1 (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Mapillary = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
4 exports.byteLength = byteLength
5 exports.toByteArray = toByteArray
6 exports.fromByteArray = fromByteArray
10 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
12 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
13 for (var i = 0, len = code.length; i < len; ++i) {
15 revLookup[code.charCodeAt(i)] = i
18 revLookup['-'.charCodeAt(0)] = 62
19 revLookup['_'.charCodeAt(0)] = 63
21 function placeHoldersCount (b64) {
24 throw new Error('Invalid string. Length must be a multiple of 4')
27 // the number of equal signs (place holders)
28 // if there are two placeholders, than the two characters before it
30 // if there is only one, then the three characters before it represent 2 bytes
31 // this is just a cheap hack to not do indexOf twice
32 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
35 function byteLength (b64) {
36 // base64 is 4/3 + up to two characters of the original data
37 return b64.length * 3 / 4 - placeHoldersCount(b64)
40 function toByteArray (b64) {
41 var i, j, l, tmp, placeHolders, arr
43 placeHolders = placeHoldersCount(b64)
45 arr = new Arr(len * 3 / 4 - placeHolders)
47 // if there are placeholders, only get up to the last complete 4 chars
48 l = placeHolders > 0 ? len - 4 : len
52 for (i = 0, j = 0; i < l; i += 4, j += 3) {
53 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
54 arr[L++] = (tmp >> 16) & 0xFF
55 arr[L++] = (tmp >> 8) & 0xFF
59 if (placeHolders === 2) {
60 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
62 } else if (placeHolders === 1) {
63 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
64 arr[L++] = (tmp >> 8) & 0xFF
71 function tripletToBase64 (num) {
72 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
75 function encodeChunk (uint8, start, end) {
78 for (var i = start; i < end; i += 3) {
79 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
80 output.push(tripletToBase64(tmp))
82 return output.join('')
85 function fromByteArray (uint8) {
87 var len = uint8.length
88 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
91 var maxChunkLength = 16383 // must be multiple of 3
93 // go through the array every three bytes, we'll deal with trailing stuff later
94 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
95 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
98 // pad the end with zeros, but make sure to not forget the extra bytes
99 if (extraBytes === 1) {
101 output += lookup[tmp >> 2]
102 output += lookup[(tmp << 4) & 0x3F]
104 } else if (extraBytes === 2) {
105 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
106 output += lookup[tmp >> 10]
107 output += lookup[(tmp >> 4) & 0x3F]
108 output += lookup[(tmp << 2) & 0x3F]
114 return parts.join('')
117 },{}],2:[function(require,module,exports){
119 },{}],3:[function(require,module,exports){
121 * Cross-Browser Split 1.1.1
122 * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
123 * Available under the MIT License
124 * ECMAScript compliant, uniform cross-browser split method
128 * Splits a string into an array of strings using a regex or string separator. Matches of the
129 * separator are not included in the result array. However, if `separator` is a regex that contains
130 * capturing groups, backreferences are spliced into the result each time `separator` is matched.
131 * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably
133 * @param {String} str String to split.
134 * @param {RegExp|String} separator Regex or string to use for separating the string.
135 * @param {Number} [limit] Maximum number of items to include in the result array.
136 * @returns {Array} Array of substrings.
140 * split('a b c d', ' ');
141 * // -> ['a', 'b', 'c', 'd']
144 * split('a b c d', ' ', 2);
147 * // Backreferences in result array
148 * split('..word1 word2..', /([a-z]+)(\d+)/i);
149 * // -> ['..', 'word', '1', ' ', 'word', '2', '..']
151 module.exports = (function split(undef) {
153 var nativeSplit = String.prototype.split,
154 compliantExecNpcg = /()??/.exec("")[1] === undef,
155 // NPCG: nonparticipating capturing group
158 self = function(str, separator, limit) {
159 // If `separator` is not a regex, use `nativeSplit`
160 if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
161 return nativeSplit.call(str, separator, limit);
164 flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.extended ? "x" : "") + // Proposed for ES6
165 (separator.sticky ? "y" : ""),
168 // Make `global` and avoid `lastIndex` issues by working with a copy
169 separator = new RegExp(separator.source, flags + "g"),
170 separator2, match, lastIndex, lastLength;
171 str += ""; // Type-convert
172 if (!compliantExecNpcg) {
173 // Doesn't need flags gy, but they don't hurt
174 separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags);
176 /* Values for `limit`, per the spec:
177 * If undefined: 4294967295 // Math.pow(2, 32) - 1
178 * If 0, Infinity, or NaN: 0
179 * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
180 * If negative number: 4294967296 - Math.floor(Math.abs(limit))
181 * If other: Type-convert, then use the above rules
183 limit = limit === undef ? -1 >>> 0 : // Math.pow(2, 32) - 1
184 limit >>> 0; // ToUint32(limit)
185 while (match = separator.exec(str)) {
186 // `separator.lastIndex` is not reliable cross-browser
187 lastIndex = match.index + match[0].length;
188 if (lastIndex > lastLastIndex) {
189 output.push(str.slice(lastLastIndex, match.index));
190 // Fix browsers whose `exec` methods don't consistently return `undefined` for
191 // nonparticipating capturing groups
192 if (!compliantExecNpcg && match.length > 1) {
193 match[0].replace(separator2, function() {
194 for (var i = 1; i < arguments.length - 2; i++) {
195 if (arguments[i] === undef) {
201 if (match.length > 1 && match.index < str.length) {
202 Array.prototype.push.apply(output, match.slice(1));
204 lastLength = match[0].length;
205 lastLastIndex = lastIndex;
206 if (output.length >= limit) {
210 if (separator.lastIndex === match.index) {
211 separator.lastIndex++; // Avoid an infinite loop
214 if (lastLastIndex === str.length) {
215 if (lastLength || !separator.test("")) {
219 output.push(str.slice(lastLastIndex));
221 return output.length > limit ? output.slice(0, limit) : output;
227 },{}],4:[function(require,module,exports){
228 // shim for using process in browser
229 var process = module.exports = {};
231 // cached from whatever global is present so that test runners that stub it
232 // don't break things. But we need to wrap it in a try catch in case it is
233 // wrapped in strict mode code which doesn't define any globals. It's inside a
234 // function because try/catches deoptimize in certain engines.
236 var cachedSetTimeout;
237 var cachedClearTimeout;
239 function defaultSetTimout() {
240 throw new Error('setTimeout has not been defined');
242 function defaultClearTimeout () {
243 throw new Error('clearTimeout has not been defined');
247 if (typeof setTimeout === 'function') {
248 cachedSetTimeout = setTimeout;
250 cachedSetTimeout = defaultSetTimout;
253 cachedSetTimeout = defaultSetTimout;
256 if (typeof clearTimeout === 'function') {
257 cachedClearTimeout = clearTimeout;
259 cachedClearTimeout = defaultClearTimeout;
262 cachedClearTimeout = defaultClearTimeout;
265 function runTimeout(fun) {
266 if (cachedSetTimeout === setTimeout) {
267 //normal enviroments in sane situations
268 return setTimeout(fun, 0);
270 // if setTimeout wasn't available but was latter defined
271 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
272 cachedSetTimeout = setTimeout;
273 return setTimeout(fun, 0);
276 // when when somebody has screwed with setTimeout but no I.E. maddness
277 return cachedSetTimeout(fun, 0);
280 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
281 return cachedSetTimeout.call(null, fun, 0);
283 // 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
284 return cachedSetTimeout.call(this, fun, 0);
290 function runClearTimeout(marker) {
291 if (cachedClearTimeout === clearTimeout) {
292 //normal enviroments in sane situations
293 return clearTimeout(marker);
295 // if clearTimeout wasn't available but was latter defined
296 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
297 cachedClearTimeout = clearTimeout;
298 return clearTimeout(marker);
301 // when when somebody has screwed with setTimeout but no I.E. maddness
302 return cachedClearTimeout(marker);
305 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
306 return cachedClearTimeout.call(null, marker);
308 // 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.
309 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
310 return cachedClearTimeout.call(this, marker);
318 var draining = false;
322 function cleanUpNextTick() {
323 if (!draining || !currentQueue) {
327 if (currentQueue.length) {
328 queue = currentQueue.concat(queue);
337 function drainQueue() {
341 var timeout = runTimeout(cleanUpNextTick);
344 var len = queue.length;
346 currentQueue = queue;
348 while (++queueIndex < len) {
350 currentQueue[queueIndex].run();
358 runClearTimeout(timeout);
361 process.nextTick = function (fun) {
362 var args = new Array(arguments.length - 1);
363 if (arguments.length > 1) {
364 for (var i = 1; i < arguments.length; i++) {
365 args[i - 1] = arguments[i];
368 queue.push(new Item(fun, args));
369 if (queue.length === 1 && !draining) {
370 runTimeout(drainQueue);
374 // v8 likes predictible objects
375 function Item(fun, array) {
379 Item.prototype.run = function () {
380 this.fun.apply(null, this.array);
382 process.title = 'browser';
383 process.browser = true;
386 process.version = ''; // empty string to avoid regexp issues
387 process.versions = {};
392 process.addListener = noop;
395 process.removeListener = noop;
396 process.removeAllListeners = noop;
399 process.binding = function (name) {
400 throw new Error('process.binding is not supported');
403 process.cwd = function () { return '/' };
404 process.chdir = function (dir) {
405 throw new Error('process.chdir is not supported');
407 process.umask = function() { return 0; };
409 },{}],5:[function(require,module,exports){
412 * The buffer module from node.js, for the browser.
414 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
417 /* eslint-disable no-proto */
421 var base64 = require('base64-js')
422 var ieee754 = require('ieee754')
423 var isArray = require('isarray')
425 exports.Buffer = Buffer
426 exports.SlowBuffer = SlowBuffer
427 exports.INSPECT_MAX_BYTES = 50
430 * If `Buffer.TYPED_ARRAY_SUPPORT`:
431 * === true Use Uint8Array implementation (fastest)
432 * === false Use Object implementation (most compatible, even IE6)
434 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
435 * Opera 11.6+, iOS 4.2+.
437 * Due to various browser bugs, sometimes the Object implementation will be used even
438 * when the browser supports typed arrays.
442 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
443 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
445 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
447 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
448 * incorrect length in some situations.
450 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
451 * get the Object implementation, which is slower but behaves correctly.
453 Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
454 ? global.TYPED_ARRAY_SUPPORT
455 : typedArraySupport()
458 * Export kMaxLength after typed array support is determined.
460 exports.kMaxLength = kMaxLength()
462 function typedArraySupport () {
464 var arr = new Uint8Array(1)
465 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
466 return arr.foo() === 42 && // typed array instances can be augmented
467 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
468 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
474 function kMaxLength () {
475 return Buffer.TYPED_ARRAY_SUPPORT
480 function createBuffer (that, length) {
481 if (kMaxLength() < length) {
482 throw new RangeError('Invalid typed array length')
484 if (Buffer.TYPED_ARRAY_SUPPORT) {
485 // Return an augmented `Uint8Array` instance, for best performance
486 that = new Uint8Array(length)
487 that.__proto__ = Buffer.prototype
489 // Fallback: Return an object instance of the Buffer class
491 that = new Buffer(length)
500 * The Buffer constructor returns instances of `Uint8Array` that have their
501 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
502 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
503 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
504 * returns a single octet.
506 * The `Uint8Array` prototype remains unmodified.
509 function Buffer (arg, encodingOrOffset, length) {
510 if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
511 return new Buffer(arg, encodingOrOffset, length)
515 if (typeof arg === 'number') {
516 if (typeof encodingOrOffset === 'string') {
518 'If encoding is specified then the first argument must be a string'
521 return allocUnsafe(this, arg)
523 return from(this, arg, encodingOrOffset, length)
526 Buffer.poolSize = 8192 // not used by this implementation
528 // TODO: Legacy, not needed anymore. Remove in next major version.
529 Buffer._augment = function (arr) {
530 arr.__proto__ = Buffer.prototype
534 function from (that, value, encodingOrOffset, length) {
535 if (typeof value === 'number') {
536 throw new TypeError('"value" argument must not be a number')
539 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
540 return fromArrayBuffer(that, value, encodingOrOffset, length)
543 if (typeof value === 'string') {
544 return fromString(that, value, encodingOrOffset)
547 return fromObject(that, value)
551 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
552 * if value is a number.
553 * Buffer.from(str[, encoding])
555 * Buffer.from(buffer)
556 * Buffer.from(arrayBuffer[, byteOffset[, length]])
558 Buffer.from = function (value, encodingOrOffset, length) {
559 return from(null, value, encodingOrOffset, length)
562 if (Buffer.TYPED_ARRAY_SUPPORT) {
563 Buffer.prototype.__proto__ = Uint8Array.prototype
564 Buffer.__proto__ = Uint8Array
565 if (typeof Symbol !== 'undefined' && Symbol.species &&
566 Buffer[Symbol.species] === Buffer) {
567 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
568 Object.defineProperty(Buffer, Symbol.species, {
575 function assertSize (size) {
576 if (typeof size !== 'number') {
577 throw new TypeError('"size" argument must be a number')
578 } else if (size < 0) {
579 throw new RangeError('"size" argument must not be negative')
583 function alloc (that, size, fill, encoding) {
586 return createBuffer(that, size)
588 if (fill !== undefined) {
589 // Only pay attention to encoding if it's a string. This
590 // prevents accidentally sending in a number that would
591 // be interpretted as a start offset.
592 return typeof encoding === 'string'
593 ? createBuffer(that, size).fill(fill, encoding)
594 : createBuffer(that, size).fill(fill)
596 return createBuffer(that, size)
600 * Creates a new filled Buffer instance.
601 * alloc(size[, fill[, encoding]])
603 Buffer.alloc = function (size, fill, encoding) {
604 return alloc(null, size, fill, encoding)
607 function allocUnsafe (that, size) {
609 that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
610 if (!Buffer.TYPED_ARRAY_SUPPORT) {
611 for (var i = 0; i < size; ++i) {
619 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
621 Buffer.allocUnsafe = function (size) {
622 return allocUnsafe(null, size)
625 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
627 Buffer.allocUnsafeSlow = function (size) {
628 return allocUnsafe(null, size)
631 function fromString (that, string, encoding) {
632 if (typeof encoding !== 'string' || encoding === '') {
636 if (!Buffer.isEncoding(encoding)) {
637 throw new TypeError('"encoding" must be a valid string encoding')
640 var length = byteLength(string, encoding) | 0
641 that = createBuffer(that, length)
643 var actual = that.write(string, encoding)
645 if (actual !== length) {
646 // Writing a hex string, for example, that contains invalid characters will
647 // cause everything after the first invalid character to be ignored. (e.g.
648 // 'abxxcd' will be treated as 'ab')
649 that = that.slice(0, actual)
655 function fromArrayLike (that, array) {
656 var length = array.length < 0 ? 0 : checked(array.length) | 0
657 that = createBuffer(that, length)
658 for (var i = 0; i < length; i += 1) {
659 that[i] = array[i] & 255
664 function fromArrayBuffer (that, array, byteOffset, length) {
665 array.byteLength // this throws if `array` is not a valid ArrayBuffer
667 if (byteOffset < 0 || array.byteLength < byteOffset) {
668 throw new RangeError('\'offset\' is out of bounds')
671 if (array.byteLength < byteOffset + (length || 0)) {
672 throw new RangeError('\'length\' is out of bounds')
675 if (byteOffset === undefined && length === undefined) {
676 array = new Uint8Array(array)
677 } else if (length === undefined) {
678 array = new Uint8Array(array, byteOffset)
680 array = new Uint8Array(array, byteOffset, length)
683 if (Buffer.TYPED_ARRAY_SUPPORT) {
684 // Return an augmented `Uint8Array` instance, for best performance
686 that.__proto__ = Buffer.prototype
688 // Fallback: Return an object instance of the Buffer class
689 that = fromArrayLike(that, array)
694 function fromObject (that, obj) {
695 if (Buffer.isBuffer(obj)) {
696 var len = checked(obj.length) | 0
697 that = createBuffer(that, len)
699 if (that.length === 0) {
703 obj.copy(that, 0, 0, len)
708 if ((typeof ArrayBuffer !== 'undefined' &&
709 obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
710 if (typeof obj.length !== 'number' || isnan(obj.length)) {
711 return createBuffer(that, 0)
713 return fromArrayLike(that, obj)
716 if (obj.type === 'Buffer' && isArray(obj.data)) {
717 return fromArrayLike(that, obj.data)
721 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
724 function checked (length) {
725 // Note: cannot use `length < kMaxLength()` here because that fails when
726 // length is NaN (which is otherwise coerced to zero.)
727 if (length >= kMaxLength()) {
728 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
729 'size: 0x' + kMaxLength().toString(16) + ' bytes')
734 function SlowBuffer (length) {
735 if (+length != length) { // eslint-disable-line eqeqeq
738 return Buffer.alloc(+length)
741 Buffer.isBuffer = function isBuffer (b) {
742 return !!(b != null && b._isBuffer)
745 Buffer.compare = function compare (a, b) {
746 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
747 throw new TypeError('Arguments must be Buffers')
750 if (a === b) return 0
755 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
768 Buffer.isEncoding = function isEncoding (encoding) {
769 switch (String(encoding).toLowerCase()) {
787 Buffer.concat = function concat (list, length) {
788 if (!isArray(list)) {
789 throw new TypeError('"list" argument must be an Array of Buffers')
792 if (list.length === 0) {
793 return Buffer.alloc(0)
797 if (length === undefined) {
799 for (i = 0; i < list.length; ++i) {
800 length += list[i].length
804 var buffer = Buffer.allocUnsafe(length)
806 for (i = 0; i < list.length; ++i) {
808 if (!Buffer.isBuffer(buf)) {
809 throw new TypeError('"list" argument must be an Array of Buffers')
811 buf.copy(buffer, pos)
817 function byteLength (string, encoding) {
818 if (Buffer.isBuffer(string)) {
821 if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
822 (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
823 return string.byteLength
825 if (typeof string !== 'string') {
829 var len = string.length
830 if (len === 0) return 0
832 // Use a for loop to avoid recursion
833 var loweredCase = false
843 return utf8ToBytes(string).length
852 return base64ToBytes(string).length
854 if (loweredCase) return utf8ToBytes(string).length // assume utf8
855 encoding = ('' + encoding).toLowerCase()
860 Buffer.byteLength = byteLength
862 function slowToString (encoding, start, end) {
863 var loweredCase = false
865 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
866 // property of a typed array.
868 // This behaves neither like String nor Uint8Array in that we set start/end
869 // to their upper/lower bounds if the value passed is out of range.
870 // undefined is handled specially as per ECMA-262 6th Edition,
871 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
872 if (start === undefined || start < 0) {
875 // Return early if start > this.length. Done here to prevent potential uint32
876 // coercion fail below.
877 if (start > this.length) {
881 if (end === undefined || end > this.length) {
889 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
897 if (!encoding) encoding = 'utf8'
902 return hexSlice(this, start, end)
906 return utf8Slice(this, start, end)
909 return asciiSlice(this, start, end)
913 return latin1Slice(this, start, end)
916 return base64Slice(this, start, end)
922 return utf16leSlice(this, start, end)
925 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
926 encoding = (encoding + '').toLowerCase()
932 // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
934 Buffer.prototype._isBuffer = true
936 function swap (b, n, m) {
942 Buffer.prototype.swap16 = function swap16 () {
943 var len = this.length
945 throw new RangeError('Buffer size must be a multiple of 16-bits')
947 for (var i = 0; i < len; i += 2) {
953 Buffer.prototype.swap32 = function swap32 () {
954 var len = this.length
956 throw new RangeError('Buffer size must be a multiple of 32-bits')
958 for (var i = 0; i < len; i += 4) {
960 swap(this, i + 1, i + 2)
965 Buffer.prototype.swap64 = function swap64 () {
966 var len = this.length
968 throw new RangeError('Buffer size must be a multiple of 64-bits')
970 for (var i = 0; i < len; i += 8) {
972 swap(this, i + 1, i + 6)
973 swap(this, i + 2, i + 5)
974 swap(this, i + 3, i + 4)
979 Buffer.prototype.toString = function toString () {
980 var length = this.length | 0
981 if (length === 0) return ''
982 if (arguments.length === 0) return utf8Slice(this, 0, length)
983 return slowToString.apply(this, arguments)
986 Buffer.prototype.equals = function equals (b) {
987 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
988 if (this === b) return true
989 return Buffer.compare(this, b) === 0
992 Buffer.prototype.inspect = function inspect () {
994 var max = exports.INSPECT_MAX_BYTES
995 if (this.length > 0) {
996 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
997 if (this.length > max) str += ' ... '
999 return '<Buffer ' + str + '>'
1002 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
1003 if (!Buffer.isBuffer(target)) {
1004 throw new TypeError('Argument must be a Buffer')
1007 if (start === undefined) {
1010 if (end === undefined) {
1011 end = target ? target.length : 0
1013 if (thisStart === undefined) {
1016 if (thisEnd === undefined) {
1017 thisEnd = this.length
1020 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
1021 throw new RangeError('out of range index')
1024 if (thisStart >= thisEnd && start >= end) {
1027 if (thisStart >= thisEnd) {
1039 if (this === target) return 0
1041 var x = thisEnd - thisStart
1043 var len = Math.min(x, y)
1045 var thisCopy = this.slice(thisStart, thisEnd)
1046 var targetCopy = target.slice(start, end)
1048 for (var i = 0; i < len; ++i) {
1049 if (thisCopy[i] !== targetCopy[i]) {
1056 if (x < y) return -1
1061 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
1062 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
1065 // - buffer - a Buffer to search
1066 // - val - a string, Buffer, or number
1067 // - byteOffset - an index into `buffer`; will be clamped to an int32
1068 // - encoding - an optional encoding, relevant is val is a string
1069 // - dir - true for indexOf, false for lastIndexOf
1070 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
1071 // Empty buffer means no match
1072 if (buffer.length === 0) return -1
1074 // Normalize byteOffset
1075 if (typeof byteOffset === 'string') {
1076 encoding = byteOffset
1078 } else if (byteOffset > 0x7fffffff) {
1079 byteOffset = 0x7fffffff
1080 } else if (byteOffset < -0x80000000) {
1081 byteOffset = -0x80000000
1083 byteOffset = +byteOffset // Coerce to Number.
1084 if (isNaN(byteOffset)) {
1085 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
1086 byteOffset = dir ? 0 : (buffer.length - 1)
1089 // Normalize byteOffset: negative offsets start from the end of the buffer
1090 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
1091 if (byteOffset >= buffer.length) {
1093 else byteOffset = buffer.length - 1
1094 } else if (byteOffset < 0) {
1095 if (dir) byteOffset = 0
1100 if (typeof val === 'string') {
1101 val = Buffer.from(val, encoding)
1104 // Finally, search either indexOf (if dir is true) or lastIndexOf
1105 if (Buffer.isBuffer(val)) {
1106 // Special case: looking for empty string/buffer always fails
1107 if (val.length === 0) {
1110 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
1111 } else if (typeof val === 'number') {
1112 val = val & 0xFF // Search for a byte value [0-255]
1113 if (Buffer.TYPED_ARRAY_SUPPORT &&
1114 typeof Uint8Array.prototype.indexOf === 'function') {
1116 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
1118 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
1121 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
1124 throw new TypeError('val must be string, number or Buffer')
1127 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
1129 var arrLength = arr.length
1130 var valLength = val.length
1132 if (encoding !== undefined) {
1133 encoding = String(encoding).toLowerCase()
1134 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
1135 encoding === 'utf16le' || encoding === 'utf-16le') {
1136 if (arr.length < 2 || val.length < 2) {
1146 function read (buf, i) {
1147 if (indexSize === 1) {
1150 return buf.readUInt16BE(i * indexSize)
1157 for (i = byteOffset; i < arrLength; i++) {
1158 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
1159 if (foundIndex === -1) foundIndex = i
1160 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
1162 if (foundIndex !== -1) i -= i - foundIndex
1167 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
1168 for (i = byteOffset; i >= 0; i--) {
1170 for (var j = 0; j < valLength; j++) {
1171 if (read(arr, i + j) !== read(val, j)) {
1183 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
1184 return this.indexOf(val, byteOffset, encoding) !== -1
1187 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
1188 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
1191 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
1192 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
1195 function hexWrite (buf, string, offset, length) {
1196 offset = Number(offset) || 0
1197 var remaining = buf.length - offset
1201 length = Number(length)
1202 if (length > remaining) {
1207 // must be an even number of digits
1208 var strLen = string.length
1209 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
1211 if (length > strLen / 2) {
1214 for (var i = 0; i < length; ++i) {
1215 var parsed = parseInt(string.substr(i * 2, 2), 16)
1216 if (isNaN(parsed)) return i
1217 buf[offset + i] = parsed
1222 function utf8Write (buf, string, offset, length) {
1223 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
1226 function asciiWrite (buf, string, offset, length) {
1227 return blitBuffer(asciiToBytes(string), buf, offset, length)
1230 function latin1Write (buf, string, offset, length) {
1231 return asciiWrite(buf, string, offset, length)
1234 function base64Write (buf, string, offset, length) {
1235 return blitBuffer(base64ToBytes(string), buf, offset, length)
1238 function ucs2Write (buf, string, offset, length) {
1239 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
1242 Buffer.prototype.write = function write (string, offset, length, encoding) {
1243 // Buffer#write(string)
1244 if (offset === undefined) {
1246 length = this.length
1248 // Buffer#write(string, encoding)
1249 } else if (length === undefined && typeof offset === 'string') {
1251 length = this.length
1253 // Buffer#write(string, offset[, length][, encoding])
1254 } else if (isFinite(offset)) {
1256 if (isFinite(length)) {
1258 if (encoding === undefined) encoding = 'utf8'
1263 // legacy write(string, encoding, offset, length) - remove in v0.13
1266 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
1270 var remaining = this.length - offset
1271 if (length === undefined || length > remaining) length = remaining
1273 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
1274 throw new RangeError('Attempt to write outside buffer bounds')
1277 if (!encoding) encoding = 'utf8'
1279 var loweredCase = false
1283 return hexWrite(this, string, offset, length)
1287 return utf8Write(this, string, offset, length)
1290 return asciiWrite(this, string, offset, length)
1294 return latin1Write(this, string, offset, length)
1297 // Warning: maxLength not taken into account in base64Write
1298 return base64Write(this, string, offset, length)
1304 return ucs2Write(this, string, offset, length)
1307 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
1308 encoding = ('' + encoding).toLowerCase()
1314 Buffer.prototype.toJSON = function toJSON () {
1317 data: Array.prototype.slice.call(this._arr || this, 0)
1321 function base64Slice (buf, start, end) {
1322 if (start === 0 && end === buf.length) {
1323 return base64.fromByteArray(buf)
1325 return base64.fromByteArray(buf.slice(start, end))
1329 function utf8Slice (buf, start, end) {
1330 end = Math.min(buf.length, end)
1335 var firstByte = buf[i]
1336 var codePoint = null
1337 var bytesPerSequence = (firstByte > 0xEF) ? 4
1338 : (firstByte > 0xDF) ? 3
1339 : (firstByte > 0xBF) ? 2
1342 if (i + bytesPerSequence <= end) {
1343 var secondByte, thirdByte, fourthByte, tempCodePoint
1345 switch (bytesPerSequence) {
1347 if (firstByte < 0x80) {
1348 codePoint = firstByte
1352 secondByte = buf[i + 1]
1353 if ((secondByte & 0xC0) === 0x80) {
1354 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
1355 if (tempCodePoint > 0x7F) {
1356 codePoint = tempCodePoint
1361 secondByte = buf[i + 1]
1362 thirdByte = buf[i + 2]
1363 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
1364 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
1365 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
1366 codePoint = tempCodePoint
1371 secondByte = buf[i + 1]
1372 thirdByte = buf[i + 2]
1373 fourthByte = buf[i + 3]
1374 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
1375 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
1376 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
1377 codePoint = tempCodePoint
1383 if (codePoint === null) {
1384 // we did not generate a valid codePoint so insert a
1385 // replacement char (U+FFFD) and advance only 1 byte
1387 bytesPerSequence = 1
1388 } else if (codePoint > 0xFFFF) {
1389 // encode to utf16 (surrogate pair dance)
1390 codePoint -= 0x10000
1391 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
1392 codePoint = 0xDC00 | codePoint & 0x3FF
1396 i += bytesPerSequence
1399 return decodeCodePointsArray(res)
1402 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
1403 // the lowest limit is Chrome, with 0x10000 args.
1404 // We go 1 magnitude less, for safety
1405 var MAX_ARGUMENTS_LENGTH = 0x1000
1407 function decodeCodePointsArray (codePoints) {
1408 var len = codePoints.length
1409 if (len <= MAX_ARGUMENTS_LENGTH) {
1410 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
1413 // Decode in chunks to avoid "call stack size exceeded".
1417 res += String.fromCharCode.apply(
1419 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
1425 function asciiSlice (buf, start, end) {
1427 end = Math.min(buf.length, end)
1429 for (var i = start; i < end; ++i) {
1430 ret += String.fromCharCode(buf[i] & 0x7F)
1435 function latin1Slice (buf, start, end) {
1437 end = Math.min(buf.length, end)
1439 for (var i = start; i < end; ++i) {
1440 ret += String.fromCharCode(buf[i])
1445 function hexSlice (buf, start, end) {
1446 var len = buf.length
1448 if (!start || start < 0) start = 0
1449 if (!end || end < 0 || end > len) end = len
1452 for (var i = start; i < end; ++i) {
1453 out += toHex(buf[i])
1458 function utf16leSlice (buf, start, end) {
1459 var bytes = buf.slice(start, end)
1461 for (var i = 0; i < bytes.length; i += 2) {
1462 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
1467 Buffer.prototype.slice = function slice (start, end) {
1468 var len = this.length
1470 end = end === undefined ? len : ~~end
1474 if (start < 0) start = 0
1475 } else if (start > len) {
1481 if (end < 0) end = 0
1482 } else if (end > len) {
1486 if (end < start) end = start
1489 if (Buffer.TYPED_ARRAY_SUPPORT) {
1490 newBuf = this.subarray(start, end)
1491 newBuf.__proto__ = Buffer.prototype
1493 var sliceLen = end - start
1494 newBuf = new Buffer(sliceLen, undefined)
1495 for (var i = 0; i < sliceLen; ++i) {
1496 newBuf[i] = this[i + start]
1504 * Need to make sure that buffer isn't trying to write out of bounds.
1506 function checkOffset (offset, ext, length) {
1507 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
1508 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
1511 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
1513 byteLength = byteLength | 0
1514 if (!noAssert) checkOffset(offset, byteLength, this.length)
1516 var val = this[offset]
1519 while (++i < byteLength && (mul *= 0x100)) {
1520 val += this[offset + i] * mul
1526 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
1528 byteLength = byteLength | 0
1530 checkOffset(offset, byteLength, this.length)
1533 var val = this[offset + --byteLength]
1535 while (byteLength > 0 && (mul *= 0x100)) {
1536 val += this[offset + --byteLength] * mul
1542 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
1543 if (!noAssert) checkOffset(offset, 1, this.length)
1547 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
1548 if (!noAssert) checkOffset(offset, 2, this.length)
1549 return this[offset] | (this[offset + 1] << 8)
1552 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
1553 if (!noAssert) checkOffset(offset, 2, this.length)
1554 return (this[offset] << 8) | this[offset + 1]
1557 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
1558 if (!noAssert) checkOffset(offset, 4, this.length)
1560 return ((this[offset]) |
1561 (this[offset + 1] << 8) |
1562 (this[offset + 2] << 16)) +
1563 (this[offset + 3] * 0x1000000)
1566 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
1567 if (!noAssert) checkOffset(offset, 4, this.length)
1569 return (this[offset] * 0x1000000) +
1570 ((this[offset + 1] << 16) |
1571 (this[offset + 2] << 8) |
1575 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
1577 byteLength = byteLength | 0
1578 if (!noAssert) checkOffset(offset, byteLength, this.length)
1580 var val = this[offset]
1583 while (++i < byteLength && (mul *= 0x100)) {
1584 val += this[offset + i] * mul
1588 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1593 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
1595 byteLength = byteLength | 0
1596 if (!noAssert) checkOffset(offset, byteLength, this.length)
1600 var val = this[offset + --i]
1601 while (i > 0 && (mul *= 0x100)) {
1602 val += this[offset + --i] * mul
1606 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1611 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
1612 if (!noAssert) checkOffset(offset, 1, this.length)
1613 if (!(this[offset] & 0x80)) return (this[offset])
1614 return ((0xff - this[offset] + 1) * -1)
1617 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
1618 if (!noAssert) checkOffset(offset, 2, this.length)
1619 var val = this[offset] | (this[offset + 1] << 8)
1620 return (val & 0x8000) ? val | 0xFFFF0000 : val
1623 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
1624 if (!noAssert) checkOffset(offset, 2, this.length)
1625 var val = this[offset + 1] | (this[offset] << 8)
1626 return (val & 0x8000) ? val | 0xFFFF0000 : val
1629 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
1630 if (!noAssert) checkOffset(offset, 4, this.length)
1632 return (this[offset]) |
1633 (this[offset + 1] << 8) |
1634 (this[offset + 2] << 16) |
1635 (this[offset + 3] << 24)
1638 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
1639 if (!noAssert) checkOffset(offset, 4, this.length)
1641 return (this[offset] << 24) |
1642 (this[offset + 1] << 16) |
1643 (this[offset + 2] << 8) |
1647 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
1648 if (!noAssert) checkOffset(offset, 4, this.length)
1649 return ieee754.read(this, offset, true, 23, 4)
1652 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
1653 if (!noAssert) checkOffset(offset, 4, this.length)
1654 return ieee754.read(this, offset, false, 23, 4)
1657 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
1658 if (!noAssert) checkOffset(offset, 8, this.length)
1659 return ieee754.read(this, offset, true, 52, 8)
1662 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
1663 if (!noAssert) checkOffset(offset, 8, this.length)
1664 return ieee754.read(this, offset, false, 52, 8)
1667 function checkInt (buf, value, offset, ext, max, min) {
1668 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
1669 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
1670 if (offset + ext > buf.length) throw new RangeError('Index out of range')
1673 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
1676 byteLength = byteLength | 0
1678 var maxBytes = Math.pow(2, 8 * byteLength) - 1
1679 checkInt(this, value, offset, byteLength, maxBytes, 0)
1684 this[offset] = value & 0xFF
1685 while (++i < byteLength && (mul *= 0x100)) {
1686 this[offset + i] = (value / mul) & 0xFF
1689 return offset + byteLength
1692 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
1695 byteLength = byteLength | 0
1697 var maxBytes = Math.pow(2, 8 * byteLength) - 1
1698 checkInt(this, value, offset, byteLength, maxBytes, 0)
1701 var i = byteLength - 1
1703 this[offset + i] = value & 0xFF
1704 while (--i >= 0 && (mul *= 0x100)) {
1705 this[offset + i] = (value / mul) & 0xFF
1708 return offset + byteLength
1711 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
1714 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
1715 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
1716 this[offset] = (value & 0xff)
1720 function objectWriteUInt16 (buf, value, offset, littleEndian) {
1721 if (value < 0) value = 0xffff + value + 1
1722 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
1723 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
1724 (littleEndian ? i : 1 - i) * 8
1728 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
1731 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
1732 if (Buffer.TYPED_ARRAY_SUPPORT) {
1733 this[offset] = (value & 0xff)
1734 this[offset + 1] = (value >>> 8)
1736 objectWriteUInt16(this, value, offset, true)
1741 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
1744 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
1745 if (Buffer.TYPED_ARRAY_SUPPORT) {
1746 this[offset] = (value >>> 8)
1747 this[offset + 1] = (value & 0xff)
1749 objectWriteUInt16(this, value, offset, false)
1754 function objectWriteUInt32 (buf, value, offset, littleEndian) {
1755 if (value < 0) value = 0xffffffff + value + 1
1756 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
1757 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
1761 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
1764 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
1765 if (Buffer.TYPED_ARRAY_SUPPORT) {
1766 this[offset + 3] = (value >>> 24)
1767 this[offset + 2] = (value >>> 16)
1768 this[offset + 1] = (value >>> 8)
1769 this[offset] = (value & 0xff)
1771 objectWriteUInt32(this, value, offset, true)
1776 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
1779 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
1780 if (Buffer.TYPED_ARRAY_SUPPORT) {
1781 this[offset] = (value >>> 24)
1782 this[offset + 1] = (value >>> 16)
1783 this[offset + 2] = (value >>> 8)
1784 this[offset + 3] = (value & 0xff)
1786 objectWriteUInt32(this, value, offset, false)
1791 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
1795 var limit = Math.pow(2, 8 * byteLength - 1)
1797 checkInt(this, value, offset, byteLength, limit - 1, -limit)
1803 this[offset] = value & 0xFF
1804 while (++i < byteLength && (mul *= 0x100)) {
1805 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
1808 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
1811 return offset + byteLength
1814 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
1818 var limit = Math.pow(2, 8 * byteLength - 1)
1820 checkInt(this, value, offset, byteLength, limit - 1, -limit)
1823 var i = byteLength - 1
1826 this[offset + i] = value & 0xFF
1827 while (--i >= 0 && (mul *= 0x100)) {
1828 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
1831 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
1834 return offset + byteLength
1837 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
1840 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
1841 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
1842 if (value < 0) value = 0xff + value + 1
1843 this[offset] = (value & 0xff)
1847 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
1850 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
1851 if (Buffer.TYPED_ARRAY_SUPPORT) {
1852 this[offset] = (value & 0xff)
1853 this[offset + 1] = (value >>> 8)
1855 objectWriteUInt16(this, value, offset, true)
1860 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
1863 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
1864 if (Buffer.TYPED_ARRAY_SUPPORT) {
1865 this[offset] = (value >>> 8)
1866 this[offset + 1] = (value & 0xff)
1868 objectWriteUInt16(this, value, offset, false)
1873 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
1876 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
1877 if (Buffer.TYPED_ARRAY_SUPPORT) {
1878 this[offset] = (value & 0xff)
1879 this[offset + 1] = (value >>> 8)
1880 this[offset + 2] = (value >>> 16)
1881 this[offset + 3] = (value >>> 24)
1883 objectWriteUInt32(this, value, offset, true)
1888 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
1891 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
1892 if (value < 0) value = 0xffffffff + value + 1
1893 if (Buffer.TYPED_ARRAY_SUPPORT) {
1894 this[offset] = (value >>> 24)
1895 this[offset + 1] = (value >>> 16)
1896 this[offset + 2] = (value >>> 8)
1897 this[offset + 3] = (value & 0xff)
1899 objectWriteUInt32(this, value, offset, false)
1904 function checkIEEE754 (buf, value, offset, ext, max, min) {
1905 if (offset + ext > buf.length) throw new RangeError('Index out of range')
1906 if (offset < 0) throw new RangeError('Index out of range')
1909 function writeFloat (buf, value, offset, littleEndian, noAssert) {
1911 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
1913 ieee754.write(buf, value, offset, littleEndian, 23, 4)
1917 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
1918 return writeFloat(this, value, offset, true, noAssert)
1921 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
1922 return writeFloat(this, value, offset, false, noAssert)
1925 function writeDouble (buf, value, offset, littleEndian, noAssert) {
1927 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
1929 ieee754.write(buf, value, offset, littleEndian, 52, 8)
1933 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
1934 return writeDouble(this, value, offset, true, noAssert)
1937 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
1938 return writeDouble(this, value, offset, false, noAssert)
1941 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
1942 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
1943 if (!start) start = 0
1944 if (!end && end !== 0) end = this.length
1945 if (targetStart >= target.length) targetStart = target.length
1946 if (!targetStart) targetStart = 0
1947 if (end > 0 && end < start) end = start
1949 // Copy 0 bytes; we're done
1950 if (end === start) return 0
1951 if (target.length === 0 || this.length === 0) return 0
1953 // Fatal error conditions
1954 if (targetStart < 0) {
1955 throw new RangeError('targetStart out of bounds')
1957 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
1958 if (end < 0) throw new RangeError('sourceEnd out of bounds')
1961 if (end > this.length) end = this.length
1962 if (target.length - targetStart < end - start) {
1963 end = target.length - targetStart + start
1966 var len = end - start
1969 if (this === target && start < targetStart && targetStart < end) {
1970 // descending copy from end
1971 for (i = len - 1; i >= 0; --i) {
1972 target[i + targetStart] = this[i + start]
1974 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
1975 // ascending copy from start
1976 for (i = 0; i < len; ++i) {
1977 target[i + targetStart] = this[i + start]
1980 Uint8Array.prototype.set.call(
1982 this.subarray(start, start + len),
1991 // buffer.fill(number[, offset[, end]])
1992 // buffer.fill(buffer[, offset[, end]])
1993 // buffer.fill(string[, offset[, end]][, encoding])
1994 Buffer.prototype.fill = function fill (val, start, end, encoding) {
1995 // Handle string cases:
1996 if (typeof val === 'string') {
1997 if (typeof start === 'string') {
2001 } else if (typeof end === 'string') {
2005 if (val.length === 1) {
2006 var code = val.charCodeAt(0)
2011 if (encoding !== undefined && typeof encoding !== 'string') {
2012 throw new TypeError('encoding must be a string')
2014 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
2015 throw new TypeError('Unknown encoding: ' + encoding)
2017 } else if (typeof val === 'number') {
2021 // Invalid ranges are not set to a default, so can range check early.
2022 if (start < 0 || this.length < start || this.length < end) {
2023 throw new RangeError('Out of range index')
2031 end = end === undefined ? this.length : end >>> 0
2036 if (typeof val === 'number') {
2037 for (i = start; i < end; ++i) {
2041 var bytes = Buffer.isBuffer(val)
2043 : utf8ToBytes(new Buffer(val, encoding).toString())
2044 var len = bytes.length
2045 for (i = 0; i < end - start; ++i) {
2046 this[i + start] = bytes[i % len]
2056 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
2058 function base64clean (str) {
2059 // Node strips out invalid characters like \n and \t from the string, base64-js does not
2060 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
2061 // Node converts strings with length < 2 to ''
2062 if (str.length < 2) return ''
2063 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
2064 while (str.length % 4 !== 0) {
2070 function stringtrim (str) {
2071 if (str.trim) return str.trim()
2072 return str.replace(/^\s+|\s+$/g, '')
2075 function toHex (n) {
2076 if (n < 16) return '0' + n.toString(16)
2077 return n.toString(16)
2080 function utf8ToBytes (string, units) {
2081 units = units || Infinity
2083 var length = string.length
2084 var leadSurrogate = null
2087 for (var i = 0; i < length; ++i) {
2088 codePoint = string.charCodeAt(i)
2090 // is surrogate component
2091 if (codePoint > 0xD7FF && codePoint < 0xE000) {
2092 // last char was a lead
2093 if (!leadSurrogate) {
2095 if (codePoint > 0xDBFF) {
2097 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2099 } else if (i + 1 === length) {
2101 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2106 leadSurrogate = codePoint
2112 if (codePoint < 0xDC00) {
2113 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2114 leadSurrogate = codePoint
2118 // valid surrogate pair
2119 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
2120 } else if (leadSurrogate) {
2121 // valid bmp char, but last char was a lead
2122 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2125 leadSurrogate = null
2128 if (codePoint < 0x80) {
2129 if ((units -= 1) < 0) break
2130 bytes.push(codePoint)
2131 } else if (codePoint < 0x800) {
2132 if ((units -= 2) < 0) break
2134 codePoint >> 0x6 | 0xC0,
2135 codePoint & 0x3F | 0x80
2137 } else if (codePoint < 0x10000) {
2138 if ((units -= 3) < 0) break
2140 codePoint >> 0xC | 0xE0,
2141 codePoint >> 0x6 & 0x3F | 0x80,
2142 codePoint & 0x3F | 0x80
2144 } else if (codePoint < 0x110000) {
2145 if ((units -= 4) < 0) break
2147 codePoint >> 0x12 | 0xF0,
2148 codePoint >> 0xC & 0x3F | 0x80,
2149 codePoint >> 0x6 & 0x3F | 0x80,
2150 codePoint & 0x3F | 0x80
2153 throw new Error('Invalid code point')
2160 function asciiToBytes (str) {
2162 for (var i = 0; i < str.length; ++i) {
2163 // Node's code seems to be doing this and not & 0x7F..
2164 byteArray.push(str.charCodeAt(i) & 0xFF)
2169 function utf16leToBytes (str, units) {
2172 for (var i = 0; i < str.length; ++i) {
2173 if ((units -= 2) < 0) break
2175 c = str.charCodeAt(i)
2185 function base64ToBytes (str) {
2186 return base64.toByteArray(base64clean(str))
2189 function blitBuffer (src, dst, offset, length) {
2190 for (var i = 0; i < length; ++i) {
2191 if ((i + offset >= dst.length) || (i >= src.length)) break
2192 dst[i + offset] = src[i]
2197 function isnan (val) {
2198 return val !== val // eslint-disable-line no-self-compare
2201 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
2203 },{"base64-js":1,"ieee754":15,"isarray":19}],6:[function(require,module,exports){
2206 module.exports = earcut;
2208 function earcut(data, holeIndices, dim) {
2212 var hasHoles = holeIndices && holeIndices.length,
2213 outerLen = hasHoles ? holeIndices[0] * dim : data.length,
2214 outerNode = linkedList(data, 0, outerLen, dim, true),
2217 if (!outerNode) return triangles;
2219 var minX, minY, maxX, maxY, x, y, size;
2221 if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);
2223 // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
2224 if (data.length > 80 * dim) {
2225 minX = maxX = data[0];
2226 minY = maxY = data[1];
2228 for (var i = dim; i < outerLen; i += dim) {
2231 if (x < minX) minX = x;
2232 if (y < minY) minY = y;
2233 if (x > maxX) maxX = x;
2234 if (y > maxY) maxY = y;
2237 // minX, minY and size are later used to transform coords into integers for z-order calculation
2238 size = Math.max(maxX - minX, maxY - minY);
2241 earcutLinked(outerNode, triangles, dim, minX, minY, size);
2246 // create a circular doubly linked list from polygon points in the specified winding order
2247 function linkedList(data, start, end, dim, clockwise) {
2250 if (clockwise === (signedArea(data, start, end, dim) > 0)) {
2251 for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);
2253 for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);
2256 if (last && equals(last, last.next)) {
2264 // eliminate colinear or duplicate points
2265 function filterPoints(start, end) {
2266 if (!start) return start;
2267 if (!end) end = start;
2274 if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {
2277 if (p === p.next) return null;
2283 } while (again || p !== end);
2288 // main ear slicing loop which triangulates a polygon (given as a linked list)
2289 function earcutLinked(ear, triangles, dim, minX, minY, size, pass) {
2292 // interlink polygon nodes in z-order
2293 if (!pass && size) indexCurve(ear, minX, minY, size);
2298 // iterate through ears, slicing them one by one
2299 while (ear.prev !== ear.next) {
2303 if (size ? isEarHashed(ear, minX, minY, size) : isEar(ear)) {
2304 // cut off the triangle
2305 triangles.push(prev.i / dim);
2306 triangles.push(ear.i / dim);
2307 triangles.push(next.i / dim);
2311 // skipping the next vertice leads to less sliver triangles
2320 // if we looped through the whole remaining polygon and can't find any more ears
2322 // try filtering points and slicing again
2324 earcutLinked(filterPoints(ear), triangles, dim, minX, minY, size, 1);
2326 // if this didn't work, try curing all small self-intersections locally
2327 } else if (pass === 1) {
2328 ear = cureLocalIntersections(ear, triangles, dim);
2329 earcutLinked(ear, triangles, dim, minX, minY, size, 2);
2331 // as a last resort, try splitting the remaining polygon into two
2332 } else if (pass === 2) {
2333 splitEarcut(ear, triangles, dim, minX, minY, size);
2341 // check whether a polygon node forms a valid ear with adjacent nodes
2342 function isEar(ear) {
2347 if (area(a, b, c) >= 0) return false; // reflex, can't be an ear
2349 // now make sure we don't have other points inside the potential ear
2350 var p = ear.next.next;
2352 while (p !== ear.prev) {
2353 if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
2354 area(p.prev, p, p.next) >= 0) return false;
2361 function isEarHashed(ear, minX, minY, size) {
2366 if (area(a, b, c) >= 0) return false; // reflex, can't be an ear
2368 // triangle bbox; min & max are calculated like this for speed
2369 var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),
2370 minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),
2371 maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),
2372 maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);
2374 // z-order range for the current triangle bbox;
2375 var minZ = zOrder(minTX, minTY, minX, minY, size),
2376 maxZ = zOrder(maxTX, maxTY, minX, minY, size);
2378 // first look for points inside the triangle in increasing z-order
2381 while (p && p.z <= maxZ) {
2382 if (p !== ear.prev && p !== ear.next &&
2383 pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
2384 area(p.prev, p, p.next) >= 0) return false;
2388 // then look for points in decreasing z-order
2391 while (p && p.z >= minZ) {
2392 if (p !== ear.prev && p !== ear.next &&
2393 pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
2394 area(p.prev, p, p.next) >= 0) return false;
2401 // go through all polygon nodes and cure small local self-intersections
2402 function cureLocalIntersections(start, triangles, dim) {
2408 if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {
2410 triangles.push(a.i / dim);
2411 triangles.push(p.i / dim);
2412 triangles.push(b.i / dim);
2414 // remove two nodes involved
2421 } while (p !== start);
2426 // try splitting polygon into two and triangulate them independently
2427 function splitEarcut(start, triangles, dim, minX, minY, size) {
2428 // look for a valid diagonal that divides the polygon into two
2431 var b = a.next.next;
2432 while (b !== a.prev) {
2433 if (a.i !== b.i && isValidDiagonal(a, b)) {
2434 // split the polygon in two by the diagonal
2435 var c = splitPolygon(a, b);
2437 // filter colinear points around the cuts
2438 a = filterPoints(a, a.next);
2439 c = filterPoints(c, c.next);
2441 // run earcut on each half
2442 earcutLinked(a, triangles, dim, minX, minY, size);
2443 earcutLinked(c, triangles, dim, minX, minY, size);
2449 } while (a !== start);
2452 // link every hole into the outer loop, producing a single-ring polygon without holes
2453 function eliminateHoles(data, holeIndices, outerNode, dim) {
2455 i, len, start, end, list;
2457 for (i = 0, len = holeIndices.length; i < len; i++) {
2458 start = holeIndices[i] * dim;
2459 end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
2460 list = linkedList(data, start, end, dim, false);
2461 if (list === list.next) list.steiner = true;
2462 queue.push(getLeftmost(list));
2465 queue.sort(compareX);
2467 // process holes from left to right
2468 for (i = 0; i < queue.length; i++) {
2469 eliminateHole(queue[i], outerNode);
2470 outerNode = filterPoints(outerNode, outerNode.next);
2476 function compareX(a, b) {
2480 // find a bridge between vertices that connects hole with an outer ring and and link it
2481 function eliminateHole(hole, outerNode) {
2482 outerNode = findHoleBridge(hole, outerNode);
2484 var b = splitPolygon(outerNode, hole);
2485 filterPoints(b, b.next);
2489 // David Eberly's algorithm for finding a bridge between hole and outer polygon
2490 function findHoleBridge(hole, outerNode) {
2497 // find a segment intersected by a ray from the hole's leftmost point to the left;
2498 // segment's endpoint with lesser x will be potential connection point
2500 if (hy <= p.y && hy >= p.next.y) {
2501 var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);
2502 if (x <= hx && x > qx) {
2505 if (hy === p.y) return p;
2506 if (hy === p.next.y) return p.next;
2508 m = p.x < p.next.x ? p : p.next;
2512 } while (p !== outerNode);
2514 if (!m) return null;
2516 if (hx === qx) return m.prev; // hole touches outer segment; pick lower endpoint
2518 // look for points inside the triangle of hole point, segment intersection and endpoint;
2519 // if there are no points found, we have a valid connection;
2520 // otherwise choose the point of the minimum angle with the ray as connection point
2530 while (p !== stop) {
2531 if (hx >= p.x && p.x >= mx &&
2532 pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {
2534 tan = Math.abs(hy - p.y) / (hx - p.x); // tangential
2536 if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && locallyInside(p, hole)) {
2548 // interlink polygon nodes in z-order
2549 function indexCurve(start, minX, minY, size) {
2552 if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, size);
2556 } while (p !== start);
2558 p.prevZ.nextZ = null;
2564 // Simon Tatham's linked list merge sort algorithm
2565 // http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
2566 function sortLinked(list) {
2567 var i, p, q, e, tail, numMerges, pSize, qSize,
2580 for (i = 0; i < inSize; i++) {
2588 while (pSize > 0 || (qSize > 0 && q)) {
2594 } else if (qSize === 0 || !q) {
2598 } else if (p.z <= q.z) {
2608 if (tail) tail.nextZ = e;
2621 } while (numMerges > 1);
2626 // z-order of a point given coords and size of the data bounding box
2627 function zOrder(x, y, minX, minY, size) {
2628 // coords are transformed into non-negative 15-bit integer range
2629 x = 32767 * (x - minX) / size;
2630 y = 32767 * (y - minY) / size;
2632 x = (x | (x << 8)) & 0x00FF00FF;
2633 x = (x | (x << 4)) & 0x0F0F0F0F;
2634 x = (x | (x << 2)) & 0x33333333;
2635 x = (x | (x << 1)) & 0x55555555;
2637 y = (y | (y << 8)) & 0x00FF00FF;
2638 y = (y | (y << 4)) & 0x0F0F0F0F;
2639 y = (y | (y << 2)) & 0x33333333;
2640 y = (y | (y << 1)) & 0x55555555;
2642 return x | (y << 1);
2645 // find the leftmost node of a polygon ring
2646 function getLeftmost(start) {
2650 if (p.x < leftmost.x) leftmost = p;
2652 } while (p !== start);
2657 // check if a point lies within a convex triangle
2658 function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {
2659 return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&
2660 (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&
2661 (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
2664 // check if a diagonal between two polygon nodes is valid (lies in polygon interior)
2665 function isValidDiagonal(a, b) {
2666 return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) &&
2667 locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b);
2670 // signed area of a triangle
2671 function area(p, q, r) {
2672 return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
2675 // check if two points are equal
2676 function equals(p1, p2) {
2677 return p1.x === p2.x && p1.y === p2.y;
2680 // check if two segments intersect
2681 function intersects(p1, q1, p2, q2) {
2682 if ((equals(p1, q1) && equals(p2, q2)) ||
2683 (equals(p1, q2) && equals(p2, q1))) return true;
2684 return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 &&
2685 area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0;
2688 // check if a polygon diagonal intersects any polygon segments
2689 function intersectsPolygon(a, b) {
2692 if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&
2693 intersects(p, p.next, a, b)) return true;
2700 // check if a polygon diagonal is locally inside the polygon
2701 function locallyInside(a, b) {
2702 return area(a.prev, a, a.next) < 0 ?
2703 area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :
2704 area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;
2707 // check if the middle point of a polygon diagonal is inside the polygon
2708 function middleInside(a, b) {
2711 px = (a.x + b.x) / 2,
2712 py = (a.y + b.y) / 2;
2714 if (((p.y > py) !== (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))
2722 // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;
2723 // if one belongs to the outer ring and another to a hole, it merges it into a single ring
2724 function splitPolygon(a, b) {
2725 var a2 = new Node(a.i, a.x, a.y),
2726 b2 = new Node(b.i, b.x, b.y),
2745 // create a node and optionally link it with previous one (in a circular doubly linked list)
2746 function insertNode(i, x, y, last) {
2747 var p = new Node(i, x, y);
2762 function removeNode(p) {
2763 p.next.prev = p.prev;
2764 p.prev.next = p.next;
2766 if (p.prevZ) p.prevZ.nextZ = p.nextZ;
2767 if (p.nextZ) p.nextZ.prevZ = p.prevZ;
2770 function Node(i, x, y) {
2771 // vertice index in coordinates array
2774 // vertex coordinates
2778 // previous and next vertice nodes in a polygon ring
2782 // z-order curve value
2785 // previous and next nodes in z-order
2789 // indicates whether this is a steiner point
2790 this.steiner = false;
2793 // return a percentage difference between the polygon area and its triangulation area;
2794 // used to verify correctness of triangulation
2795 earcut.deviation = function (data, holeIndices, dim, triangles) {
2796 var hasHoles = holeIndices && holeIndices.length;
2797 var outerLen = hasHoles ? holeIndices[0] * dim : data.length;
2799 var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));
2801 for (var i = 0, len = holeIndices.length; i < len; i++) {
2802 var start = holeIndices[i] * dim;
2803 var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
2804 polygonArea -= Math.abs(signedArea(data, start, end, dim));
2808 var trianglesArea = 0;
2809 for (i = 0; i < triangles.length; i += 3) {
2810 var a = triangles[i] * dim;
2811 var b = triangles[i + 1] * dim;
2812 var c = triangles[i + 2] * dim;
2813 trianglesArea += Math.abs(
2814 (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -
2815 (data[a] - data[b]) * (data[c + 1] - data[a + 1]));
2818 return polygonArea === 0 && trianglesArea === 0 ? 0 :
2819 Math.abs((trianglesArea - polygonArea) / polygonArea);
2822 function signedArea(data, start, end, dim) {
2824 for (var i = start, j = end - dim; i < end; i += dim) {
2825 sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);
2831 // turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts
2832 earcut.flatten = function (data) {
2833 var dim = data[0][0].length,
2834 result = {vertices: [], holes: [], dimensions: dim},
2837 for (var i = 0; i < data.length; i++) {
2838 for (var j = 0; j < data[i].length; j++) {
2839 for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);
2842 holeIndex += data[i - 1].length;
2843 result.holes.push(holeIndex);
2849 },{}],7:[function(require,module,exports){
2852 var OneVersionConstraint = require('individual/one-version');
2854 var MY_VERSION = '7';
2855 OneVersionConstraint('ev-store', MY_VERSION);
2857 var hashKey = '__EV_STORE_KEY@' + MY_VERSION;
2859 module.exports = EvStore;
2861 function EvStore(elem) {
2862 var hash = elem[hashKey];
2865 hash = elem[hashKey] = {};
2871 },{"individual/one-version":17}],8:[function(require,module,exports){
2873 var request = require('./request');
2874 var buildQueryObject = require('./buildQueryObject');
2875 var isArray = Array.isArray;
2877 function simpleExtend(obj, obj2) {
2879 for (prop in obj2) {
2880 obj[prop] = obj2[prop];
2885 function XMLHttpSource(jsongUrl, config) {
2886 this._jsongUrl = jsongUrl;
2887 if (typeof config === 'number') {
2893 this._config = simpleExtend({
2899 XMLHttpSource.prototype = {
2900 // because javascript
2901 constructor: XMLHttpSource,
2903 * buildQueryObject helper
2905 buildQueryObject: buildQueryObject,
2908 * @inheritDoc DataSource#get
2910 get: function httpSourceGet(pathSet) {
2912 var queryObject = this.buildQueryObject(this._jsongUrl, method, {
2916 var config = simpleExtend(queryObject, this._config);
2917 // pass context for onBeforeRequest callback
2919 return request(method, config, context);
2923 * @inheritDoc DataSource#set
2925 set: function httpSourceSet(jsongEnv) {
2926 var method = 'POST';
2927 var queryObject = this.buildQueryObject(this._jsongUrl, method, {
2928 jsonGraph: jsongEnv,
2931 var config = simpleExtend(queryObject, this._config);
2932 config.headers["Content-Type"] = "application/x-www-form-urlencoded";
2934 // pass context for onBeforeRequest callback
2936 return request(method, config, context);
2941 * @inheritDoc DataSource#call
2943 call: function httpSourceCall(callPath, args, pathSuffix, paths) {
2944 // arguments defaults
2946 pathSuffix = pathSuffix || [];
2947 paths = paths || [];
2949 var method = 'POST';
2951 queryData.push('method=call');
2952 queryData.push('callPath=' + encodeURIComponent(JSON.stringify(callPath)));
2953 queryData.push('arguments=' + encodeURIComponent(JSON.stringify(args)));
2954 queryData.push('pathSuffixes=' + encodeURIComponent(JSON.stringify(pathSuffix)));
2955 queryData.push('paths=' + encodeURIComponent(JSON.stringify(paths)));
2957 var queryObject = this.buildQueryObject(this._jsongUrl, method, queryData.join('&'));
2958 var config = simpleExtend(queryObject, this._config);
2959 config.headers["Content-Type"] = "application/x-www-form-urlencoded";
2961 // pass context for onBeforeRequest callback
2963 return request(method, config, context);
2967 XMLHttpSource.XMLHttpSource = XMLHttpSource;
2968 XMLHttpSource['default'] = XMLHttpSource;
2970 module.exports = XMLHttpSource;
2972 },{"./buildQueryObject":9,"./request":12}],9:[function(require,module,exports){
2974 module.exports = function buildQueryObject(url, method, queryData) {
2977 var data = {url: url};
2978 var isQueryParamUrl = url.indexOf('?') !== -1;
2979 var startUrl = (isQueryParamUrl) ? '&' : '?';
2981 if (typeof queryData === 'string') {
2982 qData.push(queryData);
2985 keys = Object.keys(queryData);
2986 keys.forEach(function (k) {
2987 var value = (typeof queryData[k] === 'object') ? JSON.stringify(queryData[k]) : queryData[k];
2988 qData.push(k + '=' + encodeURIComponent(value));
2992 if (method === 'GET') {
2993 data.url += startUrl + qData.join('&');
2995 data.data = qData.join('&');
3001 },{}],10:[function(require,module,exports){
3004 // Get CORS support even for older IE
3005 module.exports = function getCORSRequest() {
3006 var xhr = new global.XMLHttpRequest();
3007 if ('withCredentials' in xhr) {
3009 } else if (!!global.XDomainRequest) {
3010 return new XDomainRequest();
3012 throw new Error('CORS is not supported by your browser');
3016 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3018 },{}],11:[function(require,module,exports){
3021 module.exports = function getXMLHttpRequest() {
3025 if (global.XMLHttpRequest) {
3026 return new global.XMLHttpRequest();
3029 progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
3030 for (i = 0; i < 3; i++) {
3032 progId = progIds[i];
3033 if (new global.ActiveXObject(progId)) {
3038 return new global.ActiveXObject(progId);
3040 throw new Error('XMLHttpRequest is not supported by your browser');
3045 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3047 },{}],12:[function(require,module,exports){
3049 var getXMLHttpRequest = require('./getXMLHttpRequest');
3050 var getCORSRequest = require('./getCORSRequest');
3051 var hasOwnProp = Object.prototype.hasOwnProperty;
3053 var noop = function() {};
3055 function Observable() {}
3057 Observable.create = function(subscribe) {
3058 var o = new Observable();
3060 o.subscribe = function(onNext, onError, onCompleted) {
3065 if (typeof onNext === 'function') {
3068 onError: (onError || noop),
3069 onCompleted: (onCompleted || noop)
3075 disposable = subscribe(observer);
3077 if (typeof disposable === 'function') {
3089 function request(method, options, context) {
3090 return Observable.create(function requestObserver(observer) {
3093 method: method || 'GET',
3097 responseType: 'json'
3106 for (prop in options) {
3107 if (hasOwnProp.call(options, prop)) {
3108 config[prop] = options[prop];
3112 // Add request with Headers
3113 if (!config.crossDomain && !config.headers['X-Requested-With']) {
3114 config.headers['X-Requested-With'] = 'XMLHttpRequest';
3117 // allow the user to mutate the config open
3118 if (context.onBeforeRequest != null) {
3119 context.onBeforeRequest(config);
3124 xhr = config.crossDomain ? getCORSRequest() : getXMLHttpRequest();
3126 observer.onError(err);
3129 // Takes the url and opens the connection
3131 xhr.open(config.method, config.url, config.async, config.user, config.password);
3133 xhr.open(config.method, config.url, config.async);
3136 // Sets timeout information
3137 xhr.timeout = config.timeout;
3139 // Anything but explicit false results in true.
3140 xhr.withCredentials = config.withCredentials !== false;
3142 // Fills the request headers
3143 headers = config.headers;
3144 for (header in headers) {
3145 if (hasOwnProp.call(headers, header)) {
3146 xhr.setRequestHeader(header, headers[header]);
3150 if (config.responseType) {
3152 xhr.responseType = config.responseType;
3154 // WebKit added support for the json responseType value on 09/03/2013
3155 // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are
3156 // known to throw when setting the value "json" as the response type. Other older
3157 // browsers implementing the responseType
3159 // The json response type can be ignored if not supported, because JSON payloads are
3160 // parsed on the client-side regardless.
3161 if (config.responseType !== 'json') {
3167 xhr.onreadystatechange = function onreadystatechange(e) {
3169 if (xhr.readyState === 4) {
3172 onXhrLoad(observer, xhr, e);
3178 xhr.ontimeout = function ontimeout(e) {
3181 onXhrError(observer, xhr, 'timeout error', e);
3186 xhr.send(config.data);
3189 observer.onError(e);
3192 return function dispose() {
3193 // Doesn't work in IE9
3194 if (!isDone && xhr.readyState !== 4) {
3203 * General handling of ultimate failure (after appropriate retries)
3205 function _handleXhrError(observer, textStatus, errorThrown) {
3206 // IE9: cross-domain request may be considered errors
3208 errorThrown = new Error(textStatus);
3211 observer.onError(errorThrown);
3214 function onXhrLoad(observer, xhr, e) {
3219 // If there's no observer, the request has been (or is being) cancelled.
3220 if (xhr && observer) {
3221 responseType = xhr.responseType;
3222 // responseText is the old-school way of retrieving response (supported by IE8 & 9)
3223 // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
3224 responseData = ('response' in xhr) ? xhr.response : xhr.responseText;
3226 // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
3227 var status = (xhr.status === 1223) ? 204 : xhr.status;
3229 if (status >= 200 && status <= 399) {
3231 if (responseType !== 'json') {
3232 responseData = JSON.parse(responseData || '');
3234 if (typeof responseData === 'string') {
3235 responseData = JSON.parse(responseData || '');
3238 _handleXhrError(observer, 'invalid json', e);
3240 observer.onNext(responseData);
3241 observer.onCompleted();
3244 } else if (status === 401 || status === 403 || status === 407) {
3246 return _handleXhrError(observer, responseData);
3248 } else if (status === 410) {
3250 return _handleXhrError(observer, responseData);
3252 } else if (status === 408 || status === 504) {
3254 return _handleXhrError(observer, responseData);
3258 return _handleXhrError(observer, responseData || ('Response code ' + status));
3264 function onXhrError(observer, xhr, status, e) {
3265 _handleXhrError(observer, status || xhr.statusText || 'request error', e);
3268 module.exports = request;
3270 },{"./getCORSRequest":10,"./getXMLHttpRequest":11}],13:[function(require,module,exports){
3272 !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.falcor=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var p=n[s]={exports:{}};t[s][0].call(p.exports,function(e){var n=t[s][1][e];return o(n?n:e)},p,p.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s<r.length;s++)o(r[s]);return o}({1:[function(t,e,n){var r=t(32),o=t(130);r.atom=o.atom,r.ref=o.ref,r.error=o.error,r.pathValue=o.pathValue,r.HttpDataSource=t(125),e.exports=r},{125:125,130:130,32:32}],2:[function(t,e,n){function r(t){var e=t||{};this._root=e._root||new o(e),this._path=e.path||e._path||[],this._scheduler=e.scheduler||e._scheduler||new l,this._source=e.source||e._source,this._request=e.request||e._request||new s(this,this._scheduler),this._ID=N++,"number"==typeof e.maxSize?this._maxSize=e.maxSize:this._maxSize=e._maxSize||r.prototype._maxSize,"number"==typeof e.collectRatio?this._collectRatio=e.collectRatio:this._collectRatio=e._collectRatio||r.prototype._collectRatio,(e.boxed||e.hasOwnProperty("_boxed"))&&(this._boxed=e.boxed||e._boxed),(e.materialized||e.hasOwnProperty("_materialized"))&&(this._materialized=e.materialized||e._materialized),"boolean"==typeof e.treatErrorsAsValues?this._treatErrorsAsValues=e.treatErrorsAsValues:e.hasOwnProperty("_treatErrorsAsValues")&&(this._treatErrorsAsValues=e._treatErrorsAsValues),e.cache&&this.setCache(e.cache)}var o=t(4),i=t(3),s=t(55),u=t(64),a=t(65),c=t(61),p=t(63),h=t(73),f=t(75),l=t(74),d=t(81),v=t(84),y=t(49),b=t(134),m=t(88),g=t(100),w=t(96),x=t(102),_=t(98),S=t(99),E=t(77),C=t(76),A=t(130),N=0,k=t(116),O=function(){},P=t(14),j=t(19),D={pathValue:!0,pathSyntax:!0,json:!0,jsonGraph:!0},q=t(72);e.exports=r,r.ref=A.ref,r.atom=A.atom,r.error=A.error,r.pathValue=A.pathValue,r.prototype.constructor=r,r.prototype._materialized=!1,r.prototype._boxed=!1,r.prototype._progressive=!1,r.prototype._treatErrorsAsValues=!1,r.prototype._maxSize=Math.pow(2,53)-1,r.prototype._collectRatio=.75,r.prototype.get=t(71),r.prototype._getWithPaths=t(70),r.prototype.set=function(){var t=k(arguments,D,"set");return t!==!0?new u(function(e){e.onError(t)}):this._set.apply(this,arguments)},r.prototype.preload=function(){var t=k(arguments,q,"preload");if(t!==!0)return new u(function(e){e.onError(t)});var e=Array.prototype.slice.call(arguments),n=this;return new u(function(t){return n.get.apply(n,e).subscribe(function(){},function(e){t.onError(e)},function(){t.onCompleted()})})},r.prototype._set=function(){var t,e=-1,n=arguments.length,r=arguments[n-1];for(w(r)?n-=1:r=void 0,t=new Array(n);++e<n;)t[e]=arguments[e];return a.create(this,t,r)},r.prototype.call=function(){var t,e=-1,n=arguments.length;for(t=new Array(n);++e<n;){var r=arguments[e];t[e]=r;var o=typeof r;if(e>1&&!Array.isArray(r)||0===e&&!Array.isArray(r)&&"string"!==o||1===e&&!Array.isArray(r)&&!x(r))return new u(function(t){t.onError(new Error("Invalid argument"))})}return c.create(this,t)},r.prototype.invalidate=function(){var t,e=-1,n=arguments.length,r=arguments[n-1];for(t=new Array(n);++e<n;)if(t[e]=b.fromPath(arguments[e]),"object"!=typeof t[e])throw new Error("Invalid argument");p.create(this,t,r).subscribe(O,function(t){throw t})},r.prototype.deref=t(5),r.prototype.getValue=t(16),r.prototype.setValue=t(79),r.prototype._getValueSync=t(24),r.prototype._setValueSync=t(80),r.prototype._derefSync=t(6),r.prototype.setCache=function(t){var e=this._root.cache;if(t!==e){var n=this._root,r=this._path;this._path=[],this._root.cache={},"undefined"!=typeof e&&y(n,n.expired,m(e),0),S(t)?C(this,[t]):_(t)?E(this,[t]):g(t)&&E(this,[{json:t}]),this._path=r}else"undefined"==typeof e&&(this._root.cache={});return this},r.prototype.getCache=function(){var t=v(arguments);if(0===t.length)return P(this._root.cache);var e=[{}],n=this._path;return j.getWithPathsAsJSONGraph(this,t,e),this._path=n,e[0].jsonGraph},r.prototype.getVersion=function(t){var e=t&&b.fromPath(t)||[];if(Array.isArray(e)===!1)throw new Error("Model#getVersion must be called with an Array path.");return this._path.length&&(e=this._path.concat(e)),this._getVersion(this,e)},r.prototype._syncCheck=function(t){if(Boolean(this._source)&&this._root.syncRefCount<=0&&this._root.unsafeMode===!1)throw new Error("Model#"+t+" may only be called within the context of a request selector.");return!0},r.prototype._clone=function(t){var e=new r(this);for(var n in t){var o=t[n];"delete"===o?delete e[n]:e[n]=o}return e.setCache=void 0,e},r.prototype.batch=function(t){var e=t;"number"==typeof e?e=new f(Math.round(Math.abs(e))):e&&e.schedule||(e=new h);var n=this._clone();return n._request=new s(n,e),n},r.prototype.unbatch=function(){var t=this._clone();return t._request=new s(t,new l),t},r.prototype.treatErrorsAsValues=function(){return this._clone({_treatErrorsAsValues:!0})},r.prototype.asDataSource=function(){return new i(this)},r.prototype._materialize=function(){return this._clone({_materialized:!0})},r.prototype._dematerialize=function(){return this._clone({_materialized:"delete"})},r.prototype.boxValues=function(){return this._clone({_boxed:!0})},r.prototype.unboxValues=function(){return this._clone({_boxed:"delete"})},r.prototype.withoutDataSource=function(){return this._clone({_source:"delete"})},r.prototype.toJSON=function(){return{$type:"ref",value:this._path}},r.prototype.getPath=function(){return d(this._path)},r.prototype._getBoundValue=t(13),r.prototype._getVersion=t(18),r.prototype._getValueSync=t(17),r.prototype._getPathValuesAsPathMap=j.getWithPathsAsPathMap,r.prototype._getPathValuesAsJSONG=j.getWithPathsAsJSONGraph,r.prototype._setPathValuesAsJSON=t(78),r.prototype._setPathValuesAsJSONG=t(78),r.prototype._setPathValuesAsPathMap=t(78),r.prototype._setPathValuesAsValues=t(78),r.prototype._setPathMapsAsJSON=t(77),r.prototype._setPathMapsAsJSONG=t(77),r.prototype._setPathMapsAsPathMap=t(77),r.prototype._setPathMapsAsValues=t(77),r.prototype._setJSONGsAsJSON=t(76),r.prototype._setJSONGsAsJSONG=t(76),r.prototype._setJSONGsAsPathMap=t(76),r.prototype._setJSONGsAsValues=t(76),r.prototype._setCache=t(77),r.prototype._invalidatePathValuesAsJSON=t(48),r.prototype._invalidatePathMapsAsJSON=t(47)},{100:100,102:102,116:116,13:13,130:130,134:134,14:14,16:16,17:17,18:18,19:19,24:24,3:3,4:4,47:47,48:48,49:49,5:5,55:55,6:6,61:61,63:63,64:64,65:65,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,84:84,88:88,96:96,98:98,99:99}],3:[function(t,e,n){function r(t){this._model=t._materialize().treatErrorsAsValues()}r.prototype.get=function(t){return this._model.get.apply(this._model,t)._toJSONG()},r.prototype.set=function(t){return this._model.set(t)._toJSONG()},r.prototype.call=function(t,e,n,r){var o=[t,e,n].concat(r);return this._model.call.apply(this._model,o)._toJSONG()},e.exports=r},{}],4:[function(t,e,n){function r(t){var e=t||{};this.syncRefCount=0,this.expired=e.expired||[],this.unsafeMode=e.unsafeMode||!1,this.collectionScheduler=e.collectionScheduler||new s,this.cache={},o(e.comparator)&&(this.comparator=e.comparator),o(e.errorSelector)&&(this.errorSelector=e.errorSelector),o(e.onChange)&&(this.onChange=e.onChange)}var o=t(96),i=t(91),s=t(74);r.prototype.errorSelector=function(t,e){return e},r.prototype.comparator=function(t,e){return i(t,"value")&&i(e,"value")?t.value===e.value&&t.$type===e.$type&&t.$expires===e.$expires:t===e},e.exports=r},{74:74,91:91,96:96}],5:[function(t,e,n){function r(t,e){var n,r=!1;try{++t._root.syncRefCount,n=t._derefSync(e)}catch(i){n=i,r=!0}finally{--t._root.syncRefCount}return r?o.Observable["throw"](n):o.Observable["return"](n)}var o=t(159),i=t(134);e.exports=function(t){for(var e=this,n=-1,s=arguments.length-1,u=new Array(s),a=i.fromPath(t);++n<s;)u[n]=i.fromPath(arguments[n+1]);if(0===s)throw new Error("Model#deref requires at least one value path.");return o.Observable.defer(function(){return r(e,a)}).flatMap(function(t){if(Boolean(t)){if(s>0){var n=o.Observable.of(t);return t.get.apply(t,u)["catch"](o.Observable.empty()).concat(n).last().flatMap(function(){return r(e,a)}).filter(function(t){return t})}return o.Observable["return"](t)}if(s>0){var i=u.map(function(t){return a.concat(t)});return e.get.apply(e,i).concat(o.Observable.defer(function(){return r(e,a)})).last().filter(function(t){return t})}return o.Observable.empty()})}},{134:134,159:159}],6:[function(t,e,n){var r=t(134),o=t(13),i=t(8),s=t(118);e.exports=function(t){var e=r.fromPath(t);if(!Array.isArray(e))throw new Error("Model#derefSync must be called with an Array path.");var n=o(this,this._path.concat(e),!1),u=n.path,a=n.value,c=n.found;if(c&&void 0!==a&&(a.$type!==s||void 0!==a.value)){if(a.$type)throw new i;return this._clone({_path:u})}}},{118:118,13:13,134:134,8:8}],7:[function(t,e,n){function r(){this.message=r.message,this.stack=(new Error).stack}r.prototype=new Error,r.prototype.name="BoundJSONGraphModelError",r.message="It is not legal to use the JSON Graph format from a bound Model. JSON Graph format can only be used from a root model.",e.exports=r},{}],8:[function(t,e,n){function r(t,e){this.message=i,this.stack=(new Error).stack,this.boundPath=t,this.shortedPath=e}var o="InvalidModelError",i="The boundPath of the model is not valid since a value or error was found before the path end.";r.prototype=new Error,r.prototype.name=o,r.message=i,e.exports=r},{}],9:[function(t,e,n){function r(t){this.message="An exception was thrown when making a request.",this.stack=(new Error).stack,this.innerError=t}var o="InvalidSourceError";r.prototype=new Error,r.prototype.name=o,r.is=function(t){return t&&t.name===o},e.exports=r},{}],10:[function(t,e,n){function r(){this.message="The allowed number of retries have been exceeded.",this.stack=(new Error).stack}var o="MaxRetryExceededError";r.prototype=new Error,r.prototype.name=o,r.is=function(t){return t&&t.name===o},e.exports=r},{}],11:[function(t,e,n){function r(t,e,n,r,o,h,f){for(var l,d,v=n,y=o,b=r,m=0;;){if(0===m&&b[c]?(m=y.length,d=b[c]):(l=y[m++],d=v[l]),d){var g=d.$type,w=g&&d.value||d;if(m<y.length){if(g){v=d;break}v=d;continue}if(v=d,g&&u(d))break;if(b[c]||i(b,d),g===a){f?s(t,d,h,null,null,null,y,y.length,f):p(t,d),m=0,y=w,b=d,v=e;continue}break}v=void 0;break}if(m<y.length&&void 0!==v){for(var x=[],_=0;m>_;_++)x[_]=y[_];y=x}return[v,y]}var o=t(26),i=o.create,s=t(22),u=t(27),a=t(120),c=t(33),p=t(29).promote;e.exports=r},{120:120,22:22,26:26,27:27,29:29,33:33}],12:[function(t,e,n){var r=t(15),o=t(8),i=t(7);e.exports=function(t,e){return function(n,s,u){var a,c,p,h=u[0],f={values:u,optimizedPaths:[]},l=n._root.cache,d=n._path,v=l,y=d.length,b=[];if(y){if(e)return{criticalError:new i};if(v=r(n,d),v.$type)return{criticalError:new o(d,d)};for(a=[],c=0;y>c;++c)a[c]=d[c]}else a=[],y=0;for(c=0,p=s.length;p>c;c++)t(n,l,v,s[c],0,h,f,b,a,y,e);return f}}},{15:15,7:7,8:8}],13:[function(t,e,n){var r=t(17),o=t(8);e.exports=function(t,e,n){var i,s,u,a,c,p=e,h=e;for(i=t._boxed,n=t._materialized,s=t._treatErrorsAsValues,t._boxed=!0,t._materialized=void 0===n||n,t._treatErrorsAsValues=!0,u=r(t,p.concat(null),!0),t._boxed=i,t._materialized=n,t._treatErrorsAsValues=s,p=u.optimizedPath,a=u.shorted,c=u.found,u=u.value;p.length&&null===p[p.length-1];)p.pop();if(c&&a)throw new o(h,p);return{path:p,value:u,shorted:a,found:c}}},{17:17,8:8}],14:[function(t,e,n){function r(t){var e,n,r,o={},i=Object.keys(t);for(n=0,r=i.length;r>n;n++)e=i[n],s(e)||(o[e]=t[e]);return o}function o(t,e,n){Object.keys(t).filter(function(e){return!s(e)&&t[e]}).forEach(function(n){var s=t[n],u=e[n];if(u||(u=e[n]={}),s.$type){var a,c=s.value&&"object"==typeof s.value,p=!t[i];return a=c||p?r(s):s.value,void(e[n]=a)}o(s,u,n)})}var i=t(37),s=t(97);e.exports=function(t){var e={};return o(t,e),e}},{37:37,97:97}],15:[function(t,e,n){e.exports=function(t,e){for(var n=t._root.cache,r=-1,o=e.length;++r<o&&n&&!n.$type;)n=n[e[r]];return n}},{}],16:[function(t,e,n){var r=t(64),o=t(134);e.exports=function(t){for(var e=o.fromPath(t),n=0,i=e.length;++n<i;)if("object"==typeof e[n])return new r(function(t){t.onError(new Error("Paths must be simple paths"))});var s=this;return new r(function(t){return s.get(e).subscribe(function(n){for(var r=n.json,o=-1,i=e.length;r&&++o<i;)r=r[e[o]];t.onNext(r)},function(e){t.onError(e)},function(){t.onCompleted()})})}},{134:134,64:64}],17:[function(t,e,n){var r=t(11),o=t(25),i=t(27),s=t(29).promote,u=t(120),a=t(118),c=t(119);e.exports=function(t,e,n){for(var p,h,f,l,d,v=t._root.cache,y=e.length,b=[],m=!1,g=!1,w=0,x=v,_=v,S=v,E=!0,C=!1;x&&y>w;){if(p=e[w++],null!==p&&(x=_[p],b[b.length]=p),!x){S=void 0,m=!0,E=!1;break}if(f=x.$type,f===a&&void 0===x.value){S=void 0,E=!1,m=y>w;break}if(y>w){if(f===u){if(i(x)){C=!0,S=void 0,E=!1;break}if(l=r(t,v,v,x,x.value),d=l[0],!d){S=void 0,x=void 0,E=!1;break}f=d.$type,x=d,b=l[1].slice(0)}if(f)break}else S=x;_=x}if(y>w&&!C){for(h=w;y>h;++h)if(null!==e[w]){g=!0;break}for(g?(m=!0,S=void 0):S=x,h=w;y>h;++h)null!==e[h]&&(b[b.length]=e[h])}if(S&&f&&(i(S)?S=void 0:s(t,S)),S&&f===c&&!t._treatErrorsAsValues)throw{path:w===y?e:e.slice(0,w),value:S.value};return S&&t._boxed?S=Boolean(f)&&!n?o(S):S:!S&&t._materialized?S={$type:a}:S&&(S=S.value),{value:S,shorted:m,optimizedPath:b,found:E}}},{11:11,118:118,119:119,120:120,25:25,27:27,29:29}],18:[function(t,e,n){var r=t(46);e.exports=function(t,e){var n=t._getValueSync({_boxed:!0,_root:t._root,_treatErrorsAsValues:t._treatErrorsAsValues},e,!0).value,o=n&&n[r];return null==o?-1:o}},{46:46}],19:[function(t,e,n){var r=t(12),o=t(31),i=r(o,!1),s=r(o,!0);e.exports={getValueSync:t(17),getBoundValue:t(13),getWithPathsAsPathMap:i,getWithPathsAsJSONGraph:s}},{12:12,13:13,17:17,31:31}],20:[function(t,e,n){var r=t(29),o=t(25),i=r.promote;e.exports=function(t,e,n,r,s){var u=e.value;s.errors||(s.errors=[]),t._boxed&&(u=o(e)),s.errors.push({path:r.slice(0,n+1),value:u}),i(t,e)}},{25:25,29:29}],21:[function(t,e,n){function r(t,e,n,r,o,i,s){s.requestedMissingPaths.push(r.slice(0,n).concat(e)),s.optimizedMissingPaths.push(o.slice(0,i).concat(e))}var o=t(30),i=o.fastCopy;e.exports=function(t,e,n,o,s,u,a){var c;o.requestedMissingPaths||(o.requestedMissingPaths=[],o.optimizedMissingPaths=[]),c=n<e.length?i(e,n):[],r(t,c,n,s,u,a,o)}},{30:30}],22:[function(t,e,n){var r=t(29),o=t(25),i=r.promote,s=t(120),u=t(118),a=t(119),c=t(37);e.exports=function(t,e,n,r,p,h,f,l,d,v){if(n){var y,b,m,g,w,x,_,S,E=!1;if(e&&i(t,e),e&&void 0!==e.value||(E=t._materialized),E)S={$type:u};else if(t._boxed)S=o(e);else if(e.$type===s||e.$type===a)S=d?o(e):e.value;else if(d){var C=e.value&&"object"==typeof e.value,A=!e[c];S=C||A?o(e):e.value}else S=e.value;if(p&&(p.hasValue=!0),d){for(w=n.jsonGraph,w||(w=n.jsonGraph={},n.paths=[]),y=0,b=l-1;b>y;y++)g=f[y],w[g]||(w[g]={}),w=w[g];g=f[y],w[g]=E?{$type:u}:S,h&&n.paths.push(h.slice(0,r))}else if(0===r)n.json=S;else{for(w=n.json,w||(w=n.json={}),y=0;r-1>y;y++)m=h[y],w[m]||(w[m]={}),x=w,_=m,w=w[m];m=h[y],null!==m?w[m]=S:x[_]=S}}}},{118:118,119:119,120:120,25:25,29:29,37:37}],23:[function(t,e,n){var r=t(27),o=t(26),i=t(29),s=o.remove,u=i.splice,a=t(119),c=t(20),p=t(22),h=t(21),f=t(28),l=t(35);e.exports=function(t,e,n,o,i,d,v,y,b,m,g){var w=e&&e.$type,x=e&&void 0===e.value;return e&&w?void(r(e)?(e[l]||(u(t,e),s(e)),h(t,n,o,d,v,y,b)):w===a?(g&&(v[o]=null),m||t._treatErrorsAsValues?p(t,e,i,o,d,v,y,b,m,g):c(t,e,o,v,d)):(g&&(v[o]=null),(!x||x&&t._materialized)&&p(t,e,i,o,d,v,y,b,m,g))):void(f(t)?p(t,e,i,o,d,v,y,b,m,g):h(t,n,o,d,v,y,b))}},{119:119,20:20,21:21,22:22,26:26,27:27,28:28,29:29,35:35}],24:[function(t,e,n){var r=t(134);e.exports=function(t){var e=r.fromPath(t);if(Array.isArray(e)===!1)throw new Error("Model#getValueSync must be called with an Array path.");return this._path.length&&(e=this._path.concat(e)),this._syncCheck("getValueSync")&&this._getValueSync(this,e).value}},{134:134}],25:[function(t,e,n){var r=t(40);e.exports=function(t){var e,n,o,i=Object.keys(t);for(e={},n=0,o=i.length;o>n;n++){var s=i[n];s[0]!==r&&(e[s]=t[s])}return e}},{40:40}],26:[function(t,e,n){function r(t,e){var n=e[a]||0;e[i+n]=t,e[a]=n+1,t[u]=n,t[s]=e}function o(t){var e=t[s];if(e){for(var n=t[u],r=e[a];r>n;)e[i+n]=e[i+n+1],++n;e[a]=r-1,t[s]=void 0,t[u]=void 0}}var i=t(43),s=t(33),u=t(42),a=t(44);e.exports={create:r,remove:o}},{33:33,42:42,43:43,44:44}],27:[function(t,e,n){var r=t(106);e.exports=function(t){var e=void 0===t.$expires&&-1||t.$expires;return-1!==e&&1!==e&&(0===e||e<r())}},{106:106}],28:[function(t,e,n){e.exports=function(t){return t._materialized&&!t._source}},{}],29:[function(t,e,n){function r(t,e){var n=t._root,r=n[i];if(r!==e){var o=e[a],s=e[u];s&&(s[a]=o),o&&(o[u]=s),e[a]=void 0,n[i]=e,e[u]=r,r[a]=e}}function o(t,e){var n=t._root,r=e[a],o=e[u];o&&(o[a]=r),r&&(r[u]=o),e[a]=void 0,e===n[i]&&(n[i]=void 0),e===n[s]&&(n[s]=void 0),e[c]=!0,n.expired.push(e)}var i=t(34),s=t(45),u=t(38),a=t(41),c=t(35);e.exports={promote:r,splice:o}},{34:34,35:35,38:38,41:41,45:45}],30:[function(t,e,n){function r(t,e){var n,r,o,i=[];for(r=0,o=e||0,n=t.length;n>o;r++,o++)i[r]=t[o];return i}function o(t,e){var n,r,o,i=[];for(n=0,r=t.length;r>n;n++)i[n]=t[n];for(o=0,r=e.length;r>o;o++)null!==e[o]&&(i[n++]=e[o]);return i}function i(t,e){var n,r,o,i=[];for(n=0,r=t.length;r>n;n++)i[n]=t[n];for(o=0,r=e.length;r>o;o++)i[n++]=e[o];return i}e.exports={fastCat:i,fastCatSkipNulls:o,fastCopy:r}},{}],31:[function(t,e,n){var r=t(11),o=t(23),i=t(27),s=t(143).iterateKeySet,u=t(120),a=t(29).promote;e.exports=function c(t,e,n,p,h,f,l,d,v,y,b,m){var g=m,w=v;if(!n||n&&n.$type||h===p.length)return void o(t,n,p,h,f,l,d,w,y,b,g);var x,_;x=p[h];var S="object"==typeof x,E=h+1,C=!1,A=x;if(S&&(C={},A=s(x,C)),void 0!==A||!C.done){var N=y+1;do{g=!1;var k;null===A?k=n:(k=n[A],w[y]=A,d[h]=A);var O=w,P=N;if(k){var j=k.$type,D=j&&k.value||k;if(E<p.length&&j&&j===u&&!i(k)){b&&o(t,k,p,E,f,l,null,w,P,b,g),a(t,k);var q=r(t,e,e,k,D,f,b);g=!0,k=q[0];var R=q[1];for(O=[],P=R.length,_=0;P>_;++_)O[_]=R[_]}}c(t,e,k,p,E,f,l,d,O,P,b,g),C&&!C.done&&(A=s(x,C))}while(C&&!C.done)}}},{11:11,120:120,143:143,23:23,27:27,29:29}],32:[function(t,e,n){"use strict";function r(t){return new r.Model(t)}"function"==typeof Promise?r.Promise=Promise:r.Promise=t(151),e.exports=r,r.Model=t(2)},{151:151,2:2}],33:[function(t,e,n){e.exports=t(40)+"context"},{40:40}],34:[function(t,e,n){e.exports=t(40)+"head"},{40:40}],35:[function(t,e,n){e.exports=t(40)+"invalidated"},{40:40}],36:[function(t,e,n){e.exports=t(40)+"key"},{40:40}],37:[function(t,e,n){e.exports="$modelCreated"},{}],38:[function(t,e,n){e.exports=t(40)+"next"},{40:40}],39:[function(t,e,n){e.exports=t(40)+"parent"},{40:40}],40:[function(t,e,n){e.exports=String.fromCharCode(30)},{}],41:[function(t,e,n){e.exports=t(40)+"prev"},{40:40}],42:[function(t,e,n){e.exports=t(40)+"ref-index"},{40:40}],43:[function(t,e,n){e.exports=t(40)+"ref"},{40:40}],44:[function(t,e,n){e.exports=t(40)+"refs-length"},{40:40}],45:[function(t,e,n){e.exports=t(40)+"tail"},{40:40}],46:[function(t,e,n){e.exports=t(40)+"version"},{40:40}],47:[function(t,e,n){function r(t,e,n,o,s,u,c,p,h,f){if(!_(t)&&!t.$type)for(var l in t)if(l[0]!==a&&"$"!==l[0]&&m(t,l)){var d=t[l],v=g(d)&&!d.$type,y=i(n,o,s,l,d,v,!1,u,c,p,h,f),w=y[0],x=y[1];w&&(v?r(d,e+1,n,x,w,u,c,p,h,f):A(w,x,l,p)&&C(x,b(w),p,u))}}function o(t,e,n,r,o,s,a,h){if(w(n))return S(n,o,s),[void 0,e];y(s,n);var d=n,v=n.value,b=e;if(n=n[p],null!=n)b=n[c]||e;else{var m=0,g=v.length-1;b=n=e;do{var x=v[m],E=g>m,C=i(e,b,n,x,t,E,!0,r,o,s,a,h);if(n=C[0],_(n))return C;b=C[1]}while(m++<g);if(d[p]!==n){var A=n[l]||0;n[l]=A+1,n[u+A]=d,d[p]=n,d[f]=A}}return[n,b]}function i(t,e,n,r,i,u,a,c,p,h,f,l){for(var v=n.$type;v===d;){var y=o(i,t,n,c,p,h,f,l);if(n=y[0],_(n))return y;e=y[1],v=n&&n.$type}if(void 0!==v)return[n,e];if(null==r){if(u)throw new Error("`null` is not allowed in branch key positions.");n&&(r=n[s])}else e=n,n=e[r];return[n,e]}var s=t(36),u=t(43),a=t(40),c=t(39),p=t(33),h=t(46),f=t(42),l=t(44),d=t(120),v=t(13),y=t(50),b=t(88),m=t(91),g=t(100),w=t(95),x=t(96),_=t(102),S=t(86),E=t(92),C=t(115),A=t(109);e.exports=function(t,e){for(var n=t._root,o=n,i=n.expired,s=E(),u=n._comparator,a=n._errorSelector,p=t._path,f=n.cache,l=p.length?v(t,p).value:f,d=l[c]||f,y=f[h],b=-1,m=e.length;++b<m;){var g=e[b];r(g.json,0,f,d,l,s,i,o,u,a)}var w=f[h],_=n.onChange;x(_)&&y!==w&&_()}},{100:100,102:102,109:109,115:115,120:120,13:13,33:33,36:36,39:39,40:40,42:42,43:43,44:44,46:46,50:50,86:86,88:88,91:91,92:92,95:95,96:96}],48:[function(t,e,n){function r(t,e,n,o,s,u,a,c){var p={},h=e<t.length-1,f=t[e],l=x(f,p);do{var d=i(n,o,s,l,h,!1,u,a,c),v=d[0],b=d[1];v&&(h?r(t,e+1,n,b,v,u,a,c):E(v,b,l,c)&&S(b,y(v),c,u)),l=x(f,p)}while(!p.done)}function o(t,e,n,r,o){if(b(e))return w(e,r,o),[void 0,t];v(o,e);var s=e,p=e.value,l=t;if(e=e[c],null!=e)l=e[a]||t;else{var d=0,y=p.length-1;l=e=t;do{var m=p[d],x=y>d,_=i(t,l,e,m,x,!0,n,r,o);if(e=_[0],g(e))return _;l=_[1]}while(d++<y);if(s[c]!==e){var S=e[f]||0;e[f]=S+1,e[u+S]=s,s[c]=e,s[h]=S}}return[e,l]}function i(t,e,n,r,i,u,a,c,p){for(var h=n.$type;h===l;){var f=o(t,n,a,c,p);if(n=f[0],g(n))return f;e=f[1],h=n.$type}if(void 0!==h)return[n,e];if(null==r){if(i)throw new Error("`null` is not allowed in branch key positions.");n&&(r=n[s])}else e=n,n=e[r];return[n,e]}var s=t(36),u=t(43),a=t(39),c=t(33),p=t(46),h=t(42),f=t(44),l=t(120),d=t(13),v=t(50),y=t(88),b=t(95),m=t(96),g=t(102),w=t(86),x=t(143).iterateKeySet,_=t(92),S=t(115),E=t(109);e.exports=function(t,e){for(var n=t._root,o=n,i=n.expired,s=_(),u=t._path,c=n.cache,h=u.length?d(t,u).value:c,f=h[a]||c,l=c[p],v=-1,y=e.length;++v<y;){var b=e[v];r(b,0,c,f,h,s,i,o)}var g=c[p],w=n.onChange;m(w)&&l!==g&&w()}},{102:102,109:109,115:115,120:120,13:13,143:143,33:33,36:36,39:39,42:42,43:43,44:44,46:46,50:50,86:86,88:88,92:92,95:95,96:96}],49:[function(t,e,n){var r=t(36),o=t(39),i=t(34),s=t(45),u=t(38),a=t(41),c=t(108),p=t(115);e.exports=function(t,e,n,h,f,l){var d=n,v=f;"number"!=typeof v&&(v=.75);var y,b,m,g="number"==typeof l,w=h*v;for(b=e.pop();b;)m=b.$size||0,d-=m,g===!0?p(b,m,t,l):(y=b[o])&&c(b,y,b[r],t),b=e.pop();if(d>=h){var x=t[s];for(b=x;d>=w&&b;)x=x[a],m=b.$size||0,d-=m,g===!0&&p(b,m,t,l),b=x;t[s]=t[a]=b,null==b?t[i]=t[u]=void 0:b[u]=void 0}}},{108:108,115:115,34:34,36:36,38:38,39:39,41:41,45:45}],50:[function(t,e,n){var r=t(121),o=t(34),i=t(45),s=t(38),u=t(41),a=t(100);e.exports=function(t,e){if(a(e)&&e.$expires!==r){var n=t[o],c=t[i],p=e[s],h=e[u];e!==n&&(null!=p&&"object"==typeof p&&(p[u]=h),null!=h&&"object"==typeof h&&(h[s]=p),p=n,null!=n&&"object"==typeof n&&(n[u]=e),t[o]=t[s]=n=e,n[s]=p,n[u]=void 0),null!=c&&e!==c||(t[i]=t[u]=c=h||e)}return e}},{100:100,121:121,34:34,38:38,41:41,45:45}],51:[function(t,e,n){var r=t(34),o=t(45),i=t(38),s=t(41);e.exports=function(t,e){var n=t[r],u=t[o],a=e[i],c=e[s];null!=a&&"object"==typeof a&&(a[s]=c),null!=c&&"object"==typeof c&&(c[i]=a),e===n&&(t[r]=t[i]=a),e===u&&(t[o]=t[s]=c),e[i]=e[s]=void 0,n=u=a=c=void 0}},{34:34,38:38,41:41,45:45}],52:[function(t,e,n){function r(t,e){var n=!1;return function(){if(!n&&!t._disposed){n=!0,t._callbacks[e]=null,t._optimizedPaths[e]=[],t._requestedPaths[e]=[];var r=--t._count;0!==r||t.sent||(t._disposable.dispose(),t.requestQueue.removeRequest(t))}}}function o(t){for(var e=[],n=-1,r=0,o=t.length;o>r;++r)for(var i=t[r],s=0,u=i.length;u>s;++s)e[++n]=i[s];return e}var i=t(59),s=t(60),u=0,a=t(57).GetRequest,c=t(76),p=t(78),h=t(119),f=[],l=function(t,e){this.sent=!1,this.scheduled=!1,this.requestQueue=e,this.id=++u,this.type=a,this._scheduler=t,this._pathMap={},this._optimizedPaths=[],this._requestedPaths=[],this._callbacks=[],this._count=0,this._disposable=null,this._collapsed=null,this._disposed=!1};l.prototype={batch:function(t,e,n){var o=this,i=o._optimizedPaths,u=o._requestedPaths,a=o._callbacks,c=i.length;return i[c]=e,u[c]=t,a[c]=n,++o._count,o.scheduled||(o.scheduled=!0,o._disposable=o._scheduler.schedule(function(){s(o,i,function(t,e){if(o.requestQueue.removeRequest(o),o._disposed=!0,o._count){o._merge(u,t,e);for(var n=0,r=a.length;r>n;++n){var i=a[n];i&&i(t,e)}}})})),r(o,c)},add:function(t,e,n){var o,s,u=this,a=i(t,e,u._pathMap);a?(s=a[2],o=a[1]):(s=t,o=e);var c=!1,p=!1;if(o.length<e.length){c=!0;var h=u._callbacks.length;u._callbacks[h]=n,u._requestedPaths[h]=a[0],u._optimizedPaths[h]=[],++u._count,p=r(u,h)}return[c,s,o,p]},_merge:function(t,e,n){var r=this,i=r.requestQueue.model,s=i._root,u=s.errorSelector,a=s.comparator,l=i._path;i._path=f;var d=o(t);if(e){var v=e;v instanceof Error&&(v={message:v.message}),v.$type||(v={$type:h,value:v});var y=d.map(function(t){return{path:t,value:v}});p(i,y,null,u,a)}else c(i,[{paths:d,jsonGraph:n.jsonGraph}],null,u,a);i._path=l}},e.exports=l},{119:119,57:57,59:59,60:60,76:76,78:78}],53:[function(t,e,n){function r(){this.length=0,this.pending=!1,this.pathmaps=[],s.call(this,this._subscribe)}var o=t(159),i=o.Observer,s=o.Observable,u=o.Disposable,a=o.SerialDisposable,c=o.CompositeDisposable,p=t(9),h=t(143),f=h.iterateKeySet;r.create=function(t,e,n){var r=new this;return r.queue=t,r.model=e,r.index=n,r},r.prototype=Object.create(s.prototype),r.prototype.constructor=r,r.prototype.insertPath=function(t,e,n,r,o){var i=r||0,s=o||t.length-1,u=n||this.pathmaps[s+1]||(this.pathmaps[s+1]=Object.create(null));if(void 0===u||null===u)return!1;var a,c,p=t[i],h={};a=f(p,h);do{if(c=u[a],s>i){if(null==c){if(e)return!1;c=u[a]=Object.create(null)}if(this.insertPath(t,e,c,i+1,s)===!1)return!1}else u[a]=(c||0)+1,this.length+=1;h.done||(a=f(p,h))}while(!h.done);return!0},r.prototype.removePath=function(t,e,n,r){var o=n||0,i=r||t.length-1,s=e||this.pathmaps[i+1];if(void 0===s||null===s)return!0;var u,a,c=0,p=t[o],h={};u=f(p,h);do if(a=s[u],void 0!==a&&null!==a){if(i>o){c+=this.removePath(t,a,o+1,i);var l=void 0;for(l in a)break;void 0===l&&delete s[u]}else a=s[u]=(a||1)-1,0===a&&delete s[u],c+=1,this.length-=1;h.done||(u=f(p,h))}while(!h.done);return c},r.prototype.getSourceObserver=function(t){var e=this;return i.create(function(n){n.jsonGraph=n.jsonGraph||n.jsong||n.values||n.value,n.index=e.index,t.onNext(n)},function(e){t.onError(e)},function(){t.onCompleted()})},r.prototype._subscribe=function(t){var e=this,n=this.queue;e.pending=!0;var r=!1,o=new a,i=u.create(function(){r||(r=!0,n&&n._remove(e))}),s=new c(o,i);try{o.setDisposable(this.model._source[this.method](this.getSourceArgs()).subscribe(this.getSourceObserver(t)))}catch(h){throw new p(h)}return s},e.exports=r},{143:143,159:159,9:9}],54:[function(t,e,n){function r(t,e){this.total=0,this.model=t,this.requests=[],this.scheduler=e}var o=t(58),i=t(40),s=t(90),u=t(100),a=t(143);r.prototype.set=function(t){return t.paths=a.collapse(t.paths),o.create(this.model,t)},r.prototype._remove=function(t){var e=this.requests,n=e.indexOf(t);-1!==n&&e.splice(n,1)},r.prototype.distributePaths=function(t,e,n){var r,o,i=this.model,s=-1,u=t.length,a=-1,c=e.length,p=[];t:for(;++s<u;){var h=t[s];for(a=-1;++a<c;)if(o=e[a],o.insertPath(h,o.pending)){p[a]=o;continue t}r||(r=n.create(this,i,this.total++),e[a]=r,p[c++]=r),r.insertPath(h,!1)}var f=[],l=-1;for(a=-1;++a<c;)o=p[a],null!=o&&(f[++l]=o);return f},r.prototype.mergeJSONGraphs=function(t,e){var n=0,r=[],o=[],a=[],c=t.index,p=e.index;t.index=Math.max(c,p),r[-1]=t.jsonGraph||{},o[-1]=e.jsonGraph||{};t:for(;n>-1;){for(var h=r[n-1],f=o[n-1],l=a[n-1]||(a[n-1]=Object.keys(f));l.length>0;){var d=l.pop();if(d[0]!==i)if(h.hasOwnProperty(d)){var v=h[d],y=s(v),b=f[d],m=s(b);if(u(v)&&u(b)&&!y&&!m){r[n]=v,o[n]=b,n+=1;continue t}p>c&&(h[d]=b)}else h[d]=f[d]}n-=1}return t},e.exports=r},{100:100,143:143,40:40,58:58,90:90}],55:[function(t,e,n){function r(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var o=t(54),i=t(56);r.prototype.get=i.prototype.get,r.prototype.removeRequest=i.prototype.removeRequest,r.prototype.set=o.prototype.set,r.prototype.call=o.prototype.call,e.exports=r},{54:54,56:56}],56:[function(t,e,n){function r(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var o=t(57),i=t(52);r.prototype={setScheduler:function(t){this.scheduler=t},get:function(t,e,n){function r(){v||(--h,0===h&&n())}var s,u,a,c=this,p=[],h=0,f=c._requests,l=e,d=t,v=!1;for(s=0,u=f.length;u>s;++s)if(a=f[s],a.type===o.GetRequest){if(a.sent){var y=a.add(d,l,r);y[0]&&(d=y[1],l=y[2],p[p.length]=y[3],++h)}else a.batch(d,l,r),l=[],d=[],++h;if(!l.length)break}if(l.length){a=new i(c.scheduler,c),f[f.length]=a,++h;var b=a.batch(d,l,r);p[p.length]=b}return function(){if(!v&&0!==h){v=!0;for(var t=p.length,e=0;t>e;++e)p[e]()}}},removeRequest:function(t){for(var e=this._requests,n=e.length;--n>=0;)if(e[n].id===t.id){e.splice(n,1);break}}},e.exports=r},{52:52,57:57}],57:[function(t,e,n){e.exports={GetRequest:"GET"}},{}],58:[function(t,e,n){function r(){s.call(this)}var o=t(159),i=o.Observer,s=t(53),u=t(83),a=t(76),c=t(78),p=new Array(0);r.create=function(t,e){var n=new r;return n.model=t,n.jsonGraphEnvelope=e,n},r.prototype=Object.create(s.prototype),r.prototype.constructor=r,r.prototype.method="set",r.prototype.insertPath=function(){return!1},r.prototype.removePath=function(){return 0},r.prototype.getSourceArgs=function(){return this.jsonGraphEnvelope},r.prototype.getSourceObserver=function(t){var e=this.model,n=e._path,r=this.jsonGraphEnvelope.paths,o=e._root,h=o.errorSelector,f=o.comparator;return s.prototype.getSourceObserver.call(this,i.create(function(o){e._path=p;var i=a(e,[{paths:r,jsonGraph:o.jsonGraph}],null,h,f);o.paths=i[1],e._path=n,t.onNext(o)},function(o){e._path=p,c(e,u(r,function(t){return{path:t,value:o}}),null,h,f),e._path=n,t.onError(o)},function(){t.onCompleted()}))},e.exports=r},{159:159,53:53,76:76,78:78,83:83}],59:[function(t,e,n){var r=t(143).hasIntersection,o=t(84);e.exports=function(t,e,n){for(var i=[],s=[],u=[],a=-1,c=-1,p=!1,h=0,f=e.length;f>h;++h){var l=e[h],d=n[l.length];d&&r(d,l,0)?(!p&&h>0&&(s=o(t,0,h),i=o(e,0,h)),u[++a]=t[h],p=!0):p&&(i[++c]=l,s[c]=t[h])}return p?[u,i,s]:null}},{143:143,84:84}],60:[function(t,e,n){var r=t(143),o=r.toTree,i=r.toPaths;e.exports=function(t,e,n){if(0===t._count)return void t.requestQueue.removeRequest(t);t.sent=!0,t.scheduled=!1;for(var r=t._pathMap,s=Object.keys(e),u=0,a=s.length;a>u;++u)for(var c=e[u],p=0,h=c.length;h>p;++p){var f=c[p],l=f.length;if(r[l]){var d=r[l];d[d.length]=f}else r[l]=[f]}for(var v=Object.keys(r),y=0,b=v.length;b>y;++y){var m=v[y];r[m]=o(r[m])}var g,w=t._collasped=i(r);t.requestQueue.model._source.get(w).subscribe(function(t){g=t},function(t){n(t,g)},function(){n(null,g)})}},{143:143}],61:[function(t,e,n){function r(t){u.call(this,t||i)}function o(t){return s.Observable.defer(function(){return t})}function i(t){function e(t){function e(t,e){if(Boolean(e.invalidated))t.invalidations.push(t.localThisPath.concat(e.path));else{var n=e.path,r=e.value;Boolean(r)&&"object"==typeof r&&r.$type===f?t.references.push({path:i(n),value:e.value}):t.values.push({path:i(n),value:e.value})}return t}function n(t){var e=t.values.concat(t.references);return e.length>0?o(g.set.apply(g,e)._toJSONG()).map(function(e){return{results:t,envelope:e}}):u["return"]({results:t,envelope:{jsonGraph:{},paths:[]}})}function r(t){var e,n=t.envelope,r=t.results,c=r.values,p=r.references,h=r.invalidations,f=c.map(a).map(i),l=p.reduce(s,[]),d=b.map(i),v=l.concat(d);return e=v.length>0?o(m.get.apply(m,f.concat(v))._toJSONG()):u["return"](n),e.doAction(function(t){t.invalidated=h})}function s(t,e){var n=e.path;return t.push.apply(t,y.map(function(t){return n.concat(t)})),t}function a(t){return t.path}var c=t&&t.localFn;if("function"==typeof c){var p=t.model,h=p._path,l=c.apply(p,v).reduce(e,{values:[],references:[],invalidations:[],localThisPath:h}).flatMap(n).flatMap(r);return u["return"](l)}return u.empty()}function n(t){function e(t){var e=t.invalidated;return e&&e.length&&m.invalidate.apply(m,e),t}return t&&"object"==typeof t?s.Observable.defer(function(){
3273 var e;try{e=t.call(x,v,y,b)}catch(n){e=u["throw"](new p(n))}return e}).map(e):u.empty()}function r(t){return o(g.set(t)).reduce(function(t){return t},null).map(function(){return{invalidated:t.invalidated,paths:t.paths.map(function(t){return t.slice(w.length)})}})}function i(t){return _.concat(t)}var c=this.args,l=this.model,d=h.fromPath(c[0]),v=c[1]||[],y=(c[2]||[]).map(h.fromPath),b=(c[3]||[]).map(h.fromPath),m=l._clone({_path:[]}),g=m.withoutDataSource(),w=l._path,x=w.concat(d),_=x.slice(0,-1),S=o(l.withoutDataSource().get(d)).map(function(t){for(var e=t.json,n=-1,r=d.length;e&&++n<r;)e=e[d[n]];var o=m._derefSync(_).boxValues();return{model:o,localFn:e}}).flatMap(e).defaultIfEmpty(n(l._source)).mergeAll().flatMap(r),E=new a;return E.add(S.subscribe(function(e){var n=e.paths,r=e.invalidated,i=l.get.apply(l,n);"AsJSONG"===t.outputFormat&&(i=o(i._toJSONG()).doAction(function(t){t.invalidated=r})),E.add(i.subscribe(t))},function(e){t.onError(e)})),E}var s=t(159)&&t(158),u=s.Observable,a=s.CompositeDisposable,c=t(64),p=t(9),h=t(134),f=t(120);r.create=c.create,r.prototype=Object.create(u.prototype),r.prototype.constructor=r,r.prototype.invokeSourceRequest=function(t){return this},r.prototype.ensureCollect=function(t){return this},r.prototype.initialize=function(){return this},e.exports=r},{120:120,134:134,158:158,159:159,64:64,9:9}],62:[function(t,e,n){function r(t){i.call(this,t)}var o=t(159),i=o.Observable,s=t(64),u=t(134),a=t(88),c=t(49),p=t(81),h=t(46),f=Array.isArray,l=t(101),d=t(98),v=t(99);r.create=s.create,r.prototype=Object.create(i.prototype),r.prototype.constructor=r,r.prototype.subscribeCount=0,r.prototype.subscribeLimit=10,r.prototype.initialize=function(){for(var t,e,n=this.model,r=this.outputFormat||"AsPathMap",o=this.isProgressive,i=[{}],s=[],a=this.args,c=-1,h=a.length;++c<h;){var y,b=a[c];f(b)||"string"==typeof b?(b=u.fromPath(b),y="PathValues"):l(b)?(b.path=u.fromPath(b.path),y="PathValues"):v(b)?y="JSONGs":d(b)&&(y="PathMaps"),e!==y&&(e=y,t={inputType:y,arguments:[]},s.push(t),t.values=i),t.arguments.push(b)}return this.boundPath=p(n._path),this.groups=s,this.outputFormat=r,this.isProgressive=o,this.isCompleted=!1,this.isMaster=null==n._source,this.values=i,this},r.prototype.invokeSourceRequest=function(t){return this},r.prototype.ensureCollect=function(t){var e=this["finally"](function(){var e=t._root,n=e.cache;e.collectionScheduler.schedule(function(){c(e,e.expired,a(n),t._maxSize,t._collectRatio,n[h])})});return new this.constructor(function(t){return e.subscribe(t)})},e.exports=r},{101:101,134:134,159:159,46:46,49:49,64:64,81:81,88:88,98:98,99:99}],63:[function(t,e,n){function r(t){u.call(this,t||o)}function o(t){for(var e=this.model,n=this.method,r=this.groups,o=-1,i=r.length;++o<i;){var u=r[o],a=u.inputType,c=u.arguments;if(c.length>0){var p="_"+n+a+"AsJSON",h=e[p];h(e,c)}}return t.onCompleted(),s.empty}var i=t(159),s=i.Disposable,u=t(62);r.create=u.create,r.prototype=Object.create(u.prototype),r.prototype.method="invalidate",r.prototype.constructor=r,e.exports=r},{159:159,62:62}],64:[function(t,e,n){function r(t){this._subscribe=t}function o(t){var e=this.model,n=new this.type;return n.model=e,n.args=this.args,n.outputFormat=t.outputFormat||"AsPathMap",n.isProgressive=t.isProgressive||!1,n.subscribeCount=0,n.subscribeLimit=t.retryLimit||10,n.initialize().invokeSourceRequest(e).ensureCollect(e).subscribe(t)}var i=t(32),s=t(159)&&t(158),u=s.Observable,a=t(84),c=t(105),p={outputFormat:{value:"AsJSONG"}},h={isProgressive:{value:!0}};r.create=function(t,e){var n=new r(o);return n.args=e,n.type=this,n.model=t,n},r.prototype=Object.create(u.prototype),r.prototype.constructor=r,r.prototype._mixin=function(){var t=this,e=a(arguments);return new t.constructor(function(n){return t.subscribe(e.reduce(function(t,e){return Object.create(t,e)},n))})},r.prototype._toJSONG=function(){return this._mixin(p)},r.prototype.progressively=function(){return this._mixin(h)},r.prototype.subscribe=function(t,e,n){var r=t;r&&"object"==typeof r||(r={onNext:t||c,onError:e||c,onCompleted:n||c});var o=this._subscribe(r);switch(typeof o){case"function":return{dispose:o};case"object":return o||{dispose:c};default:return{dispose:c}}},r.prototype.then=function(t,e){var n=this;return new i.Promise(function(t,e){var r,o=!1;n.toArray().subscribe(function(t){r=t.length<=1?t[0]:t},function(t){o=!0,e(t)},function(){o===!1&&t(r)})}).then(t,e)},e.exports=r},{105:105,158:158,159:159,32:32,84:84}],65:[function(t,e,n){function r(t){l.call(this,t||o)}function o(t){return this.isCompleted?s.call(this,t):i.call(this,t)}function i(t){if(this.subscribeCount++>this.subscribeLimit)return t.onError("Loop kill switch thrown."),h.empty;for(var e=[],n=[],r=this.model,o=this.isMaster,i=r._root,c=this.outputFormat,p=i.errorSelector,f=this.method,l=this.groups,d=-1,y=l.length;++d<y;){var b=l[d],m=b.inputType,g=b.arguments;if(g.length>0){var w="_"+f+m+c,x=r[w],_=x(r,g,null,p);n.push.apply(n,_[1]),"PathValues"===m?e.push.apply(e,g.map(u)):"JSONGs"===m?e.push.apply(e,v(g,a)):e.push.apply(e,_[0])}}return this.requestedPaths=e,o?(this.isCompleted=!0,s.call(this,t)):void t.onError({method:f,optimizedPaths:n,invokeSourceRequest:!0})}function s(t){var e=new f(this.model,this.requestedPaths);return"AsJSONG"===this.outputFormat&&(e=e._toJSONG()),this.isProgressive&&(e=e.progressively()),e.subscribe(t)}function u(t){return t.path}function a(t){return t.paths}var c=t(159),p=c.Observable,h=c.Disposable,f=t(67),l=t(62),d=t(9),v=t(82),y=new Array(0);r.create=l.create,r.prototype=Object.create(l.prototype),r.prototype.method="set",r.prototype.constructor=r,r.prototype.invokeSourceRequest=function(t){var e=this,n=this["catch"](function(r){var o;if(r&&r.invokeSourceRequest===!0){var i={},s=t._path,u=r.optimizedPaths;t._path=y,t._getPathValuesAsJSONG(t._materialize().withoutDataSource(),u,[i]),t._path=s,o=t._request.set(i)["do"](function(t){e.isCompleted=u.length===t.paths.length},function(){e.isCompleted=!0}).materialize().flatMap(function(t){if("C"===t.kind)return p.empty();if("E"===t.kind){var e=t.exception;if(d.is(e))return p["throw"](t.exception)}return n})}else o=p["throw"](r);return o});return new this.constructor(function(t){return n.subscribe(t)})},e.exports=r},{159:159,62:62,67:67,82:82,9:9}],66:[function(t,e,n){var r=function(t){this.disposed=!1,this.currentDisposable=t};r.prototype={dispose:function(){if(!this.disposed&&this.currentDisposable){this.disposed=!0;var t=this.currentDisposable;t.dispose?t.dispose():t()}}},e.exports=r},{}],67:[function(t,e,n){var r=t(64),o=t(68),i=t(69),s={dispose:function(){}},u=t(159).Observable,a=e.exports=function(t,e,n,r){this.model=t,this.currentRemainingPaths=e,this.isJSONGraph=n||!1,this.isProgressive=r||!1};a.prototype=Object.create(u.prototype),a.prototype.subscribe=r.prototype.subscribe,a.prototype.then=r.prototype.then,a.prototype._toJSONG=function(){return new a(this.model,this.currentRemainingPaths,!0,this.isProgressive)},a.prototype.progressively=function(){return new a(this.model,this.currentRemainingPaths,this.isJSONGraph,!0)},a.prototype._subscribe=function(t){var e=[{}],n=[],r=t.isJSONG=this.isJSONGraph,u=this.isProgressive,a=o(this.model,this.currentRemainingPaths,t,u,r,e,n);return a?i(this,this.model,a,t,e,n,1):s}},{159:159,64:64,68:68,69:69}],68:[function(t,e,n){var r=t(19),o=r.getWithPathsAsJSONGraph,i=r.getWithPathsAsPathMap;e.exports=function(t,e,n,r,s,u,a){var c;if(c=s?o(t,e,u):i(t,e,u),c.criticalError)return n.onError(c.criticalError),null;var p=c.hasValue,h=!c.requestedMissingPaths||!t._source,f=u[0].json||u[0].jsonGraph;if(c.errors)for(var l=c.errors,d=a.length,v=0,y=l.length;y>v;++v,++d)a[d]=l[v];if(p&&r||f&&h)try{++t._root.syncRefCount,n.onNext(u[0])}catch(b){throw b}finally{--t._root.syncRefCount}return h?(a.length?n.onError(a):n.onCompleted(),null):c}},{19:19}],69:[function(t,e,n){var r=t(68),o=t(10),i=t(30).fastCat,s=t(49),u=t(88),a=t(66),c=t(46);e.exports=function p(t,e,n,h,f,l,d){if(10===d)throw new o;var v=e._request,y=n.requestedMissingPaths,b=n.optimizedMissingPaths,m=new a,g=[],w=e._path;if(w.length)for(var x=0,_=y.length;_>x;++x)g[x]=i(w,y[x]);else g=y;var S=v.get(g,b,function(){var n=r(e,y,h,t.isProgressive,t.isJSONGraph,f,l);if(n)m.currentDisposable=p(t,e,n,h,f,l,d+1);else{var o=e._root,i=o.cache,a=i[c];s(o,o.expired,u(i),e._maxSize,e._collectRatio,a)}});return m.currentDisposable=S,m}},{10:10,30:30,46:46,49:49,66:66,68:68,88:88}],70:[function(t,e,n){var r=t(67);e.exports=function(t){return new r(this,t)}},{67:67}],71:[function(t,e,n){var r=t(134),o=t(64),i=t(72),s=t(116),u=t(67);e.exports=function(){var t=s(arguments,i,"get");if(t!==!0)return new o(function(e){e.onError(t)});var e=r.fromPathsOrPathValues(arguments);return new u(this,e)}},{116:116,134:134,64:64,67:67,72:72}],72:[function(t,e,n){e.exports={path:!0,pathSyntax:!0}},{}],73:[function(t,e,n){function r(){}var o=t(123),i=t(159),s=i.Disposable;r.prototype.schedule=function(t){return o(t),s.empty},r.prototype.scheduleWithState=function(t,e){var n=this;return o(function(){e(n,t)}),s.empty},e.exports=r},{123:123,159:159}],74:[function(t,e,n){function r(){}var o=t(159),i=o.Disposable;r.prototype.schedule=function(t){return t(),i.empty},r.prototype.scheduleWithState=function(t,e){return e(this,t),i.empty},e.exports=r},{159:159}],75:[function(t,e,n){function r(t){this.delay=t}var o=t(159),i=o.Disposable;r.prototype.schedule=function(t){var e=setTimeout(t,this.delay);return i.create(function(){void 0!==e&&(clearTimeout(e),e=void 0)})},r.prototype.scheduleWithState=function(t,e){var n=this,r=setTimeout(function(){e(n,t)},this.delay);return i.create(function(){void 0!==r&&(clearTimeout(r),r=void 0)})},e.exports=r},{159:159}],76:[function(t,e,n){function r(t,e,n,o,s,u,a,c,p,h,f,d,v,y,b,g,w){for(var x={},_=e<t.length-1,S=t[e],E=m(S,x),C=d.index;;){f.depth=e;var A=i(n,o,s,u,a,c,E,_,!1,f,d,v,y,b,g,w);f[e]=E,f.index=e,d[d.index++]=E;var N=A[0],k=A[1];if(N&&(_?r(t,e+1,n,k,N,u,A[3],A[2],p,h,f,d,v,y,b,g,w):(l(b,N),p.push(f.slice(0,f.index+1)),h.push(d.slice(0,d.index)))),E=m(S,x),x.done)break;d.index=C}}function o(t,e,n,r,o,s,c,f,v,m,g){var w=e.value;if(s.splice(0,s.length),s.push.apply(s,w),d(e))return s.index=w.length,b(e,f,v),[void 0,t,r,n];l(v,e);var x=0,_=e,S=w.length-1,E=e=t,C=r=n;do{var A=w[x],N=S>x,k=i(t,E,e,n,C,r,A,N,!0,o,s,c,f,v,m,g);if(e=k[0],y(e))return s.index=x,k;E=k[1],r=k[2],C=k[3]}while(x++<S);if(s.index=x,_[a]!==e){var O=e[h]||0;e[h]=O+1,e[u+O]=_,_[a]=e,_[p]=O}return[e,E,r,C]}function i(t,e,n,r,i,u,a,c,p,h,l,d,v,b,m,g){for(var x=n.$type;x===f;){var _=o(t,n,r,u,h,l,d,v,b,m,g);if(n=_[0],y(n))return _;e=_[1],u=_[2],i=_[3],x=n.$type}if(void 0!==x)return[n,e,u,i];if(null==a){if(c)throw new Error("`null` is not allowed in branch key positions.");n&&(a=n[s])}else e=n,i=u,n=e[a],u=i&&i[a];return n=w(e,n,u,a,h,l,d,v,b,m,g),[n,e,u,i]}var s=t(36),u=t(43),a=t(33),c=t(46),p=t(42),h=t(44),f=t(120),l=t(50),d=t(94),v=t(96),y=t(102),b=t(86),m=t(143).iterateKeySet,g=t(92),w=t(103);e.exports=function(t,e,n,o,i){for(var s=t._root,u=s,a=s.expired,p=g(),h=s.cache,f=h[c],l=[],d=[],y=[],b=[],m=-1,w=e.length;++m<w;)for(var x=e[m],_=x.paths,S=x.jsonGraph,E=-1,C=_.length;++E<C;){var A=_[E];d.index=0,r(A,0,h,h,h,S,S,S,y,b,l,d,p,a,u,i,o)}var N=h[c],k=s.onChange;return v(k)&&f!==N&&k(),[y,b]}},{102:102,103:103,120:120,143:143,33:33,36:36,42:42,43:43,44:44,46:46,50:50,86:86,92:92,94:94,96:96}],77:[function(t,e,n){function r(t,e,n,o,u,a,c,p,h,f,l,d,v,y){var b=s(t);if(b&&b.length)for(var g=0,x=b.length,_=h.index;;){var S=b[g],E=t[S],C=w(E)&&!E.$type;p.depth=e;var A=i(n,o,u,S,E,C,!1,p,h,f,l,d,v,y);p[e]=S,p.index=e,h[h.index++]=S;var N=A[0],k=A[1];if(N&&(C?r(E,e+1,n,k,N,a,c,p,h,f,l,d,v,y):(m(d,N),a.push(p.slice(0,p.index+1)),c.push(h.slice(0,h.index)))),++g>=x)break;h.index=_}}function o(t,e,n,r,o,s,u,c,f,v){var y=n.value;if(o.splice(0,o.length),o.push.apply(o,y),x(n))return o.index=y.length,E(n,u,c),[void 0,e];m(c,n);var b=n,g=e;if(n=n[h],null!=n)g=n[p]||e,o.index=y.length;else{var w=0,_=y.length-1;g=n=e;do{var C=y[w],A=_>w,N=i(e,g,n,C,t,A,!0,r,o,s,u,c,f,v);if(n=N[0],S(n))return o.index=w,N;g=N[1]}while(w++<_);if(o.index=w,b[h]!==n){var k=n[d]||0;n[d]=k+1,n[a+k]=b,b[h]=n,b[l]=k}}return[n,g]}function i(t,e,n,r,i,s,a,c,p,h,f,l,d,y){for(var b=n.$type;b===v;){var m=o(i,t,n,c,p,h,f,l,d,y);if(n=m[0],S(n))return m;e=m[1],b=n&&n.$type}if(void 0!==b)return[n,e];if(null==r){if(s)throw new Error("`null` is not allowed in branch key positions.");n&&(r=n[u])}else e=n,n=e[r];return n=A(e,n,r,i,s,a,c,p,h,f,l,d,y),[n,e]}function s(t){if(w(t)&&!t.$type){var e=[],n=0;b(t)&&(e[n++]="length");for(var r in t)r[0]!==c&&"$"!==r[0]&&g(t,r)&&(e[n++]=r);return e}}var u=t(36),a=t(43),c=t(40),p=t(39),h=t(33),f=t(46),l=t(42),d=t(44),v=t(120),y=t(13),b=Array.isArray,m=t(50),g=t(91),w=t(100),x=t(95),_=t(96),S=t(102),E=t(86),C=t(92),A=t(104);e.exports=function(t,e,n,o,i){for(var s=t._root,u=s,a=s.expired,c=C(),h=t._path,l=s.cache,d=h.length?y(t,h).value:l,v=d[p]||l,b=l[f],m=[],g=[],w=[],x=h.length,S=-1,E=e.length;++S<E;){var A=e[S],N=h.slice(0);N.index=x,r(A.json,0,l,v,d,g,w,m,N,c,a,u,i,o)}var k=l[f],O=s.onChange;return _(O)&&b!==k&&O(),[g,w]}},{100:100,102:102,104:104,120:120,13:13,33:33,36:36,39:39,40:40,42:42,43:43,44:44,46:46,50:50,86:86,91:91,92:92,95:95,96:96}],78:[function(t,e,n){function r(t,e,n,o,s,u,a,c,p,h,f,l,d,y,b){for(var m={},g=n<e.length-1,x=e[n],_=w(x,m),S=h.index;;){p.depth=n;var E=i(o,s,u,_,t,g,!1,p,h,f,l,d,y,b);p[n]=_,p.index=n,h[h.index++]=_;var C=E[0],A=E[1];if(C&&(g?r(t,e,n+1,o,A,C,a,c,p,h,f,l,d,y,b):(v(d,C),a.push(p.slice(0,p.index+1)),c.push(h.slice(0,h.index)))),_=w(x,m),m.done)break;h.index=S}}function o(t,e,n,r,o,s,p,l,d,b){var w=n.value;if(o.splice(0,o.length),o.push.apply(o,w),y(n))return o.index=w.length,g(n,p,l),[void 0,e];v(l,n);var x=n,_=e;if(n=n[c],null!=n)_=n[a]||e,o.index=w.length;else{var S=0,E=w.length-1;_=n=e;do{var C=w[S],A=E>S,N=i(e,_,n,C,t,A,!0,r,o,s,p,l,d,b);if(n=N[0],m(n))return o.index=S,N;_=N[1]}while(S++<E);if(o.index=S,x[c]!==n){var k=n[f]||0;n[f]=k+1,n[u+k]=x,x[c]=n,x[h]=k}}return[n,_]}function i(t,e,n,r,i,u,a,c,p,h,f,d,v,y){for(var b=n.$type;b===l;){var g=o(i,t,n,c,p,h,f,d,v,y);if(n=g[0],m(n))return g;e=g[1],b=n.$type}if(void 0!==b)return[n,e];if(null==r){if(u)throw new Error("`null` is not allowed in branch key positions.");n&&(r=n[s])}else e=n,n=e[r];return n=_(e,n,r,i,u,a,c,p,h,f,d,v,y),[n,e]}var s=t(36),u=t(43),a=t(39),c=t(33),p=t(46),h=t(42),f=t(44),l=t(120),d=t(13),v=t(50),y=t(95),b=t(96),m=t(102),g=t(86),w=t(143).iterateKeySet,x=t(92),_=t(104);e.exports=function(t,e,n,o,i){for(var s=t._root,u=s,c=s.expired,h=x(),f=t._path,l=s.cache,v=f.length?d(t,f).value:l,y=v[a]||l,m=l[p],g=[],w=[],_=[],S=f.length,E=-1,C=e.length;++E<C;){var A=e[E],N=A.path,k=A.value,O=f.slice(0);O.index=S,r(k,N,0,l,y,v,w,_,g,O,h,c,u,i,o)}var P=l[p],j=s.onChange;return b(j)&&m!==P&&j(),[w,_]}},{102:102,104:104,120:120,13:13,143:143,33:33,36:36,39:39,42:42,43:43,44:44,46:46,50:50,86:86,92:92,95:95,96:96}],79:[function(t,e,n){var r=t(130),o=t(64),i=t(101);e.exports=function(t,e){for(var n=i(t)?t:r.pathValue(t,e),s=0,u=n.path,a=u.length;++s<a;)if("object"==typeof u[s])return new o(function(t){t.onError(new Error("Paths must be simple paths"))});var c=this;return new o(function(t){return c._set(n).subscribe(function(e){for(var n=e.json,r=-1,o=u.length;n&&++r<o;)n=n[u[r]];t.onNext(n)},function(e){t.onError(e)},function(){t.onCompleted()})})}},{101:101,130:130,64:64}],80:[function(t,e,n){var r=t(134),o=t(101),i=t(78);e.exports=function(t,e,n,s){var u=r.fromPath(t),a=e,c=n,p=s;if(o(u)?(p=c,c=a,a=u):a={path:u,value:a},o(a)===!1)throw new Error("Model#setValueSync must be called with an Array path.");return"function"!=typeof c&&(c=this._root._errorSelector),"function"!=typeof p&&(p=this._root._comparator),this._syncCheck("setValueSync")?(i(this,[a]),this._getValueSync(this,a.path).value):void 0}},{101:101,134:134,78:78}],81:[function(t,e,n){e.exports=function(t){if(!t)return t;for(var e=-1,n=t.length,r=[];++e<n;)r[e]=t[e];return r}},{}],82:[function(t,e,n){e.exports=function(t,e){for(var n=-1,r=-1,o=t.length,i=[];++r<o;)for(var s=e(t[r],r,t),u=-1,a=s.length;++u<a;)i[++n]=s[u];return i}},{}],83:[function(t,e,n){e.exports=function(t,e){for(var n=-1,r=t.length,o=new Array(r);++n<r;)o[n]=e(t[n],n,t);return o}},{}],84:[function(t,e,n){e.exports=function(t,e,n){var r=e||0,o=-1,i=t.length-r;0>i&&(i=0),n>0&&i>n&&(i=n);for(var s=new Array(i);++o<i;)s[o]=t[o+r];return s}},{}],85:[function(t,e,n){var r=t(40),o=t(91),i=Array.isArray,s=t(100);e.exports=function(t){var e=t;if(s(e)){e=i(t)?[]:{};var n=t;for(var u in n)u[0]!==r&&o(n,u)&&(e[u]=n[u])}return e}},{100:100,40:40,91:91}],86:[function(t,e,n){var r=t(51),o=t(35);e.exports=function(t,e,n){return t[o]||(t[o]=!0,e.push(t),r(n,t)),t}},{35:35,51:51}],87:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&t.$expires||void 0}},{100:100}],88:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&t.$size||0}},{100:100}],89:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&t.$timestamp||void 0}},{100:100}],90:[function(t,e,n){var r=t(100);e.exports=function(t,e){var n=r(t)&&t.$type||void 0;return e&&n?"branch":n}},{100:100}],91:[function(t,e,n){var r=t(100),o=Object.prototype.hasOwnProperty;e.exports=function(t,e){return r(t)&&o.call(t,e)}},{100:100}],92:[function(t,e,n){var r=1;e.exports=function(){return r++}},{}],93:[function(t,e,n){var r=t(36),o=t(39),i=t(46);e.exports=function(t,e,n,s){return t[r]=n,t[o]=e,t[i]=s,e[n]=t,t}},{36:36,39:39,46:46}],94:[function(t,e,n){var r=t(106),o=t(122),i=t(121);e.exports=function(t){var e=t.$expires;return null!=e&&e!==i&&e!==o&&e<r()}},{106:106,121:121,122:122}],95:[function(t,e,n){var r=t(106),o=t(122),i=t(121);e.exports=function(t){var e=t.$expires;return null!=e&&e!==i&&(e===o||e<r())}},{106:106,121:121,122:122}],96:[function(t,e,n){var r="function";e.exports=function(t){return Boolean(t)&&typeof t===r}},{}],97:[function(t,e,n){var r=t(40);e.exports=function(t){return"$size"===t||t&&t.charAt(0)===r}},{40:40}],98:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&"json"in t}},{100:100}],99:[function(t,e,n){var r=Array.isArray,o=t(100);e.exports=function(t){return o(t)&&r(t.paths)&&(o(t.jsonGraph)||o(t.jsong)||o(t.json)||o(t.values)||o(t.value))}},{100:100}],100:[function(t,e,n){var r="object";e.exports=function(t){return null!==t&&typeof t===r}},{}],101:[function(t,e,n){var r=Array.isArray,o=t(100);e.exports=function(t){return o(t)&&(r(t.path)||"string"==typeof t.path)}},{100:100}],102:[function(t,e,n){var r="object";e.exports=function(t){return null==t||typeof t!==r}},{}],103:[function(t,e,n){var r=t(36),o=t(39),i=t(120),s=t(119),u=t(88),a=t(89),c=t(100),p=t(95),h=t(96),f=t(50),l=t(117),d=t(93),v=t(86),y=t(110),b=t(115),m=t(107);e.exports=function(t,e,n,g,w,x,_,S,E,C,A){var N,k,O,P,j,D,q;if(e===n){if(null===n)return e=l(n,void 0,n),t=b(t,-e.$size,E,_),e=d(e,t,g),f(E,e),e;if(void 0===n)return n;if(P=c(e),P&&(k=e.$type,null==k))return null==e[o]&&(e[r]=g,e[o]=t),e}else P=c(e),P&&(k=e.$type);if(k!==i){if(j=c(n),j&&(O=n.$type),P&&!k&&(null==n||j&&!O))return e}else{if(null==n)return p(e)?void v(e,S,E):e;if(j=c(n),j&&(O=n.$type,O===i))if(e===n){if(null!=e[o])return e}else if(D=e.$timestamp,q=n.$timestamp,!p(e)&&!p(n)&&D>q)return}if(k&&j&&!O)return d(y(e,n,t,g,E),t,g);if(O||!j){if(O===s&&h(A)&&(n=A(m(w,g),n)),O&&e===n)null==e[o]&&(e=l(e,k,e.value),t=b(t,-e.$size,E,_),e=d(e,t,g,_));else{var R=!0;!k&&P||(R=a(n)<a(e)==!1,(k||O)&&h(C)&&(R=!C(e,n,x.slice(0,x.index)))),R&&(n=l(n,O,O?n.value:n),N=u(e)-u(n),e=y(e,n,t,g,E),t=b(t,N,E,_),e=d(e,t,g,_))}p(e)?v(e,S,E):f(E,e)}else null==e&&(e=d(n,t,g));return e}},{100:100,107:107,110:110,115:115,117:117,119:119,120:120,36:36,39:39,50:50,86:86,88:88,89:89,93:93,95:95,96:96}],104:[function(t,e,n){var r=t(120),o=t(119),i=t(90),s=t(88),u=t(89),a=t(95),c=t(102),p=t(96),h=t(117),f=t(86),l=t(93),d=t(110),v=t(115),y=t(114),b=t(107);e.exports=function(t,e,n,m,g,w,x,_,S,E,C,A,N){var k=i(e,w);if(g||w)k&&a(e)&&(k="expired",f(e,E,C)),(k&&k!==r||c(e))&&(e=d(e,{},t,n,C),e=l(e,t,n,S),e=y(e,S));else{var O=m,P=i(O),j=u(O)<u(e)==!1;if((k||P)&&p(A)&&(j=!A(e,O,_.slice(0,_.index))),j){P===o&&p(N)&&(O=N(b(x,n),O)),O=h(O,P,P?O.value:O);var D=s(e)-s(O);e=d(e,O,t,n,C),t=v(t,D,C,S),e=l(e,t,n,S)}}return e}},{102:102,107:107,110:110,114:114,115:115,117:117,119:119,120:120,86:86,88:88,89:89,90:90,93:93,95:95,96:96}],105:[function(t,e,n){e.exports=function(){}},{}],106:[function(t,e,n){e.exports=Date.now},{}],107:[function(t,e,n){e.exports=function(t,e){var n=t.slice(0,t.depth);return n[n.length]=e,n}},{}],108:[function(t,e,n){var r=t(120),o=t(39),i=t(51),s=t(100),u=t(112),a=t(113);e.exports=function(t,e,n,c){if(s(t)){var p=t.$type;return Boolean(p)&&(p===r&&a(t),i(c,t)),u(t),e[n]=t[o]=void 0,!0}return!1}},{100:100,112:112,113:113,120:120,39:39,51:51}],109:[function(t,e,n){var r=t(91),o=t(40),i=t(108);e.exports=function s(t,e,n,u){if(i(t,e,n,u)){if(null==t.$type)for(var a in t)a[0]!==o&&"$"!==a[0]&&r(t,a)&&s(t[a],t,a,u);return!0}return!1}},{108:108,40:40,91:91}],110:[function(t,e,n){var r=t(100),o=t(111),i=t(109);e.exports=function(t,e,n,s,u){return t===e?t:(r(t)&&(o(t,e),i(t,n,s,u)),n[s]=e,e)}},{100:100,109:109,111:111}],111:[function(t,e,n){var r=t(43),o=t(33),i=t(44);e.exports=function(t,e){for(var n=t[i]||0,s=e[i]||0,u=-1;++u<n;){var a=t[r+u];void 0!==a&&(a[o]=e,e[r+(s+u)]=a,t[r+u]=void 0)}return e[i]=n+s,t[i]=void 0,e}},{33:33,43:43,44:44}],112:[function(t,e,n){var r=t(43),o=t(33),i=t(42),s=t(44);e.exports=function(t){for(var e=-1,n=t[s]||0;++e<n;){var u=t[r+e];null!=u&&(u[o]=u[i]=t[r+e]=void 0)}return t[s]=void 0,t}},{33:33,42:42,43:43,44:44}],113:[function(t,e,n){var r=t(43),o=t(33),i=t(42),s=t(44);e.exports=function(t){var e=t[o];if(e){for(var n=(t[i]||0)-1,u=(e[s]||0)-1;++n<=u;)e[r+n]=e[r+(n+1)];e[s]=u,t[i]=t[o]=e=void 0}return t}},{33:33,42:42,43:43,44:44}],114:[function(t,e,n){var r=t(43),o=t(39),i=t(46),s=t(44);e.exports=function(t,e){var n=[t],u=0;do{var a=n[u--];if(a&&a[i]!==e){a[i]=e,n[u++]=a[o];for(var c=-1,p=a[s]||0;++c<p;)n[u++]=a[r+c]}}while(u>-1);return t}},{39:39,43:43,44:44,46:46}],115:[function(t,e,n){var r=t(36),o=t(46),i=t(39),s=t(108),u=t(114);e.exports=function(t,e,n,a){var c=t;do{var p=c[i],h=c.$size=(c.$size||0)-e;0>=h&&null!=p?s(c,p,c[r],n):c[o]!==a&&u(c,a),c=p}while(c);return t}},{108:108,114:114,36:36,39:39,46:46}],116:[function(t,e,n){var r=Array.isArray,o=t(101),i=t(99),s=t(98),u=t(134);e.exports=function(t,e,n){for(var a=0,c=t.length;c>a;++a){var p=t[a],h=!1;if(r(p)&&e.path?h=!0:"string"==typeof p&&e.pathSyntax?h=!0:o(p)&&e.pathValue?(p.path=u.fromPath(p.path),h=!0):i(p)&&e.jsonGraph?h=!0:s(p)&&e.json?h=!0:"function"==typeof p&&a+1===c&&e.selector&&(h=!0),!h)return new Error("Unrecognized argument "+typeof p+" ["+String(p)+"] to Model#"+n)}return!0}},{101:101,134:134,98:98,99:99}],117:[function(t,e,n){var r=t(130),o=r.atom,i=t(106),s=t(122),u=t(37),a=50,c=t(85),p=Array.isArray,h=t(88),f=t(87);e.exports=function(t,e,n){var r=0,l=t,d=e;if(d?(l=c(l),r=h(l),l.$type=d):(l=o(n),d=l.$type,l[u]=!0),null==n)r=a+1;else if(null==r||0>=r)switch(typeof n){case"object":r=p(n)?a+n.length:a+1;break;case"string":r=a+n.length;break;default:r=a+1}var v=f(l);return"number"==typeof v&&s>v&&(l.$expires=i()+-1*v),l.$size=r,l}},{106:106,122:122,130:130,37:37,85:85,87:87,88:88}],118:[function(t,e,n){e.exports="atom"},{}],119:[function(t,e,n){e.exports="error"},{}],120:[function(t,e,n){e.exports="ref"},{}],121:[function(t,e,n){e.exports=1},{}],122:[function(t,e,n){e.exports=0},{}],123:[function(t,e,n){"use strict";function r(){if(a.length)throw a.shift()}function o(t){var e;e=u.length?u.pop():new i,e.task=t,s(e)}function i(){this.task=null}var s=t(124),u=[],a=[],c=s.makeRequestCallFromTimer(r);e.exports=o,i.prototype.call=function(){try{this.task.call()}catch(t){o.onerror?o.onerror(t):(a.push(t),c())}finally{this.task=null,u[u.length]=this}}},{124:124}],124:[function(t,e,n){(function(t){"use strict";function n(t){u.length||(s(),a=!0),u[u.length]=t}function r(){for(;c<u.length;){var t=c;if(c+=1,u[t].call(),c>p){for(var e=0,n=u.length-c;n>e;e++)u[e]=u[e+c];u.length-=c,c=0}}u.length=0,c=0,a=!1}function o(t){var e=1,n=new h(t),r=document.createTextNode("");return n.observe(r,{characterData:!0}),function(){e=-e,r.data=e}}function i(t){return function(){function e(){clearTimeout(n),clearInterval(r),t()}var n=setTimeout(e,0),r=setInterval(e,50)}}e.exports=n;var s,u=[],a=!1,c=0,p=1024,h=t.MutationObserver||t.WebKitMutationObserver;s="function"==typeof h?o(r):i(r),n.requestFlush=s,n.makeRequestCallFromTimer=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],125:[function(t,e,n){"use strict";function r(t,e){var n;for(n in e)t[n]=e[n];return t}function o(t,e){if(this._jsongUrl=t,"number"==typeof e){var n={timeout:e};e=n}this._config=r({timeout:15e3,headers:{}},e||{})}var i=t(129),s=t(126);Array.isArray;o.prototype={constructor:o,buildQueryObject:s,get:function(t){var e="GET",n=this.buildQueryObject(this._jsongUrl,e,{paths:t,method:"get"}),o=r(n,this._config),s=this;return i(e,o,s)},set:function(t){var e="POST",n=this.buildQueryObject(this._jsongUrl,e,{jsonGraph:t,method:"set"}),o=r(n,this._config);o.headers["Content-Type"]="application/x-www-form-urlencoded";var s=this;return i(e,o,s)},call:function(t,e,n,o){e=e||[],n=n||[],o=o||[];var s="POST",u=[];u.push("method=call"),u.push("callPath="+encodeURIComponent(JSON.stringify(t))),u.push("arguments="+encodeURIComponent(JSON.stringify(e))),u.push("pathSuffixes="+encodeURIComponent(JSON.stringify(n))),u.push("paths="+encodeURIComponent(JSON.stringify(o)));var a=this.buildQueryObject(this._jsongUrl,s,u.join("&")),c=r(a,this._config);c.headers["Content-Type"]="application/x-www-form-urlencoded";var p=this;return i(s,c,p)}},o.XMLHttpSource=o,o["default"]=o,e.exports=o},{126:126,129:129}],126:[function(t,e,n){"use strict";e.exports=function(t,e,n){var r,o=[],i={url:t},s=-1!==t.indexOf("?"),u=s?"&":"?";return"string"==typeof n?o.push(n):(r=Object.keys(n),r.forEach(function(t){var e="object"==typeof n[t]?JSON.stringify(n[t]):n[t];o.push(t+"="+encodeURIComponent(e))})),"GET"===e?i.url+=u+o.join("&"):i.data=o.join("&"),i}},{}],127:[function(t,e,n){(function(t){"use strict";e.exports=function(){var e=new t.XMLHttpRequest;if("withCredentials"in e)return e;if(t.XDomainRequest)return new XDomainRequest;throw new Error("CORS is not supported by your browser")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],128:[function(t,e,n){(function(t){"use strict";e.exports=function(){var e,n,r;if(t.XMLHttpRequest)return new t.XMLHttpRequest;try{for(n=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],r=0;3>r;r++)try{if(e=n[r],new t.ActiveXObject(e))break}catch(o){}return new t.ActiveXObject(e)}catch(o){throw new Error("XMLHttpRequest is not supported by your browser")}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],129:[function(t,e,n){"use strict";function r(){}function o(t,e,n){return r.create(function(r){var o,i,h,f,l,d={method:t||"GET",crossDomain:!1,async:!0,headers:{},responseType:"json"};for(l in e)p.call(e,l)&&(d[l]=e[l]);d.crossDomain||d.headers["X-Requested-With"]||(d.headers["X-Requested-With"]="XMLHttpRequest"),null!=n.onBeforeRequest&&n.onBeforeRequest(d);try{o=d.crossDomain?c():a()}catch(v){r.onError(v)}try{d.user?o.open(d.method,d.url,d.async,d.user,d.password):o.open(d.method,d.url,d.async),o.timeout=d.timeout,o.withCredentials=d.withCredentials!==!1,h=d.headers;for(f in h)p.call(h,f)&&o.setRequestHeader(f,h[f]);if(d.responseType)try{o.responseType=d.responseType}catch(y){if("json"!==d.responseType)throw y}o.onreadystatechange=function(t){4===o.readyState&&(i||(i=!0,s(r,o,t)))},o.ontimeout=function(t){i||(i=!0,u(r,o,"timeout error",t))},o.send(d.data)}catch(y){r.onError(y)}return function(){i||4===o.readyState||(i=!0,o.abort())}})}function i(t,e,n){n||(n=new Error(e)),t.onError(n)}function s(t,e,n){var r,o;if(e&&t){o=e.responseType,r="response"in e?e.response:e.responseText;var s=1223===e.status?204:e.status;if(s>=200&&399>=s){try{"json"!==o&&(r=JSON.parse(r||"")),"string"==typeof r&&(r=JSON.parse(r||""))}catch(n){i(t,"invalid json",n)}return t.onNext(r),void t.onCompleted()}return 401===s||403===s||407===s?i(t,r):410===s?i(t,r):408===s||504===s?i(t,r):i(t,r||"Response code "+s)}}function u(t,e,n,r){i(t,n||e.statusText||"request error",r)}var a=t(128),c=t(127),p=Object.prototype.hasOwnProperty,h=function(){};r.create=function(t){var e=new r;return e.subscribe=function(e,n,r){var o,i;return o="function"==typeof e?{onNext:e,onError:n||h,onCompleted:r||h}:e,i=t(o),"function"==typeof i?{dispose:i}:i},e},e.exports=o},{127:127,128:128}],130:[function(t,e,n){function r(t,e,n){var r=Object.create(null);if(null!=n){for(var o in n)r[o]=n[o];return r.$type=t,r.value=e,r}return{$type:t,value:e}}var o=t(134);e.exports={ref:function(t,e){return r("ref",o.fromPath(t),e)},atom:function(t,e){return r("atom",t,e)},undefined:function(){return r("atom")},error:function(t,e){return r("error",t,e)},pathValue:function(t,e){return{path:o.fromPath(t),value:e}},pathInvalidation:function(t){return{path:o.fromPath(t),invalidated:!0}}}},{134:134}],131:[function(t,e,n){e.exports={integers:"integers",ranges:"ranges",keys:"keys"}},{}],132:[function(t,e,n){var r={token:"token",dotSeparator:".",commaSeparator:",",openingBracket:"[",closingBracket:"]",openingBrace:"{",closingBrace:"}",escape:"\\",space:" ",colon:":",quote:"quote",unknown:"unknown"};e.exports=r},{}],133:[function(t,e,n){e.exports={indexer:{nested:"Indexers cannot be nested.",needQuotes:"unquoted indexers must be numeric.",empty:"cannot have empty indexers.",leadingDot:"Indexers cannot have leading dots.",leadingComma:"Indexers cannot have leading comma.",requiresComma:"Indexers require commas between indexer args.",routedTokens:"Only one token can be used per indexer when specifying routed tokens."},range:{precedingNaN:"ranges must be preceded by numbers.",suceedingNaN:"ranges must be suceeded by numbers."},routed:{invalid:"Invalid routed token. only integers|ranges|keys are supported."},quote:{empty:"cannot have empty quoted keys.",illegalEscape:"Invalid escape character. Only quotes are escapable."},unexpectedToken:"Unexpected token.",invalidIdentifier:"Invalid Identifier.",invalidPath:"Please provide a valid path.",throwError:function(t,e,n){if(n)throw t+" -- "+e.parseString+" with next token: "+n;throw t+" -- "+e.parseString}}},{}],134:[function(t,e,n){var r=t(140),o=t(135),i=t(131),s=function(t,e){return o(new r(t,e))};e.exports=s,s.fromPathsOrPathValues=function(t,e){if(!t)return[];for(var n=[],r=0,o=t.length;o>r;r++)"string"==typeof t[r]?n[r]=s(t[r],e):"string"==typeof t[r].path?n[r]={path:s(t[r].path,e),value:t[r].value}:n[r]=t[r];return n},s.fromPath=function(t,e){return t?"string"==typeof t?s(t,e):t:[]},s.RoutedTokens=i},{131:131,135:135,140:140}],135:[function(t,e,n){var r=t(132),o=t(133),i=t(136);e.exports=function(t){for(var e=t.next(),n={},s=[];!e.done;){switch(e.type){case r.token:var u=+e.token[0];isNaN(u)||o.throwError(o.invalidIdentifier,t),s[s.length]=e.token;break;case r.dotSeparator:0===s.length&&o.throwError(o.unexpectedToken,t);break;case r.space:break;case r.openingBracket:i(t,e,n,s);break;default:o.throwError(o.unexpectedToken,t)}e=t.next()}return 0===s.length&&o.throwError(o.invalidPath,t),s}},{132:132,133:133,136:136}],136:[function(t,e,n){var r=t(132),o=t(133),i=o.indexer,s=t(138),u=t(137),a=t(139);e.exports=function(t,e,n,c){var p=t.next(),h=!1,f=1,l=!1;for(n.indexer=[];!p.done;){switch(p.type){case r.token:case r.quote:n.indexer.length===f&&o.throwError(i.requiresComma,t)}switch(p.type){case r.openingBrace:l=!0,a(t,p,n,c);break;case r.token:var d=+p.token;isNaN(d)&&o.throwError(i.needQuotes,t),n.indexer[n.indexer.length]=d;break;case r.dotSeparator:n.indexer.length||o.throwError(i.leadingDot,t),s(t,p,n,c);
3274 break;case r.space:break;case r.closingBracket:h=!0;break;case r.quote:u(t,p,n,c);break;case r.openingBracket:o.throwError(i.nested,t);break;case r.commaSeparator:++f;break;default:o.throwError(o.unexpectedToken,t)}if(h)break;p=t.next()}0===n.indexer.length&&o.throwError(i.empty,t),n.indexer.length>1&&l&&o.throwError(i.routedTokens,t),1===n.indexer.length&&(n.indexer=n.indexer[0]),c[c.length]=n.indexer,n.indexer=void 0}},{132:132,133:133,137:137,138:138,139:139}],137:[function(t,e,n){var r=t(132),o=t(133),i=o.quote;e.exports=function(t,e,n,s){for(var u=t.next(),a="",c=e.token,p=!1,h=!1;!u.done;){switch(u.type){case r.token:case r.space:case r.dotSeparator:case r.commaSeparator:case r.openingBracket:case r.closingBracket:case r.openingBrace:case r.closingBrace:p&&o.throwError(i.illegalEscape,t),a+=u.token;break;case r.quote:p?(a+=u.token,p=!1):u.token!==c?a+=u.token:h=!0;break;case r.escape:p=!0;break;default:o.throwError(o.unexpectedToken,t)}if(h)break;u=t.next()}0===a.length&&o.throwError(i.empty,t),n.indexer[n.indexer.length]=a}},{132:132,133:133}],138:[function(t,e,n){var r=t(140),o=t(132),i=t(133);e.exports=function(t,e,n,s){var u,a=t.peek(),c=1,p=!1,h=!0,f=n.indexer.length-1,l=r.toNumber(n.indexer[f]);for(isNaN(l)&&i.throwError(i.range.precedingNaN,t);!p&&!a.done;){switch(a.type){case o.dotSeparator:3===c&&i.throwError(i.unexpectedToken,t),++c,3===c&&(h=!1);break;case o.token:u=r.toNumber(t.next().token),isNaN(u)&&i.throwError(i.range.suceedingNaN,t),p=!0;break;default:p=!0}if(p)break;t.next(),a=t.peek()}n.indexer[f]={from:l,to:h?u:u-1}}},{132:132,133:133,140:140}],139:[function(t,e,n){var r=t(132),o=t(131),i=t(133),s=i.routed;e.exports=function(t,e,n,u){var a=t.next(),c=!1,p="";switch(a.token){case o.integers:case o.ranges:case o.keys:break;default:i.throwError(s.invalid,t)}var h=t.next();if(h.type===r.colon&&(c=!0,h=t.next(),h.type!==r.token&&i.throwError(s.invalid,t),p=h.token,h=t.next()),h.type===r.closingBrace){var f={type:a.token,named:c,name:p};n.indexer[n.indexer.length]=f}else i.throwError(s.invalid,t)}},{131:131,132:132,133:133}],140:[function(t,e,n){function r(t,e,n){return{token:t,done:n,type:e}}function o(t,e,n){var o,g=!1,w="",x=n?m:b;do{if(o=e+1>=t.length)break;var _=t[e+1];if(void 0===_||-1!==x.indexOf(_)){if(w.length)break;++e;var S;switch(_){case s:S=i.dotSeparator;break;case u:S=i.commaSeparator;break;case a:S=i.openingBracket;break;case c:S=i.closingBracket;break;case p:S=i.openingBrace;break;case h:S=i.closingBrace;break;case y:S=i.space;break;case d:case v:S=i.quote;break;case l:S=i.escape;break;case f:S=i.colon;break;default:S=i.unknown}g=r(_,S,!1);break}w+=_,++e}while(!o);return!g&&w.length&&(g=r(w,i.token,!1)),g||(g={done:!0}),{token:g,idx:e}}var i=t(132),s=".",u=",",a="[",c="]",p="{",h="}",f=":",l="\\",d='"',v="'",y=" ",b="\\'\"[]., ",m="\\{}'\"[]., :",g=e.exports=function(t,e){this._string=t,this._idx=-1,this._extended=e,this.parseString=""};g.prototype={next:function(){var t=this._nextToken?this._nextToken:o(this._string,this._idx,this._extended);return this._idx=t.idx,this._nextToken=!1,this.parseString+=t.token.token,t.token},peek:function(){var t=this._nextToken?this._nextToken:o(this._string,this._idx,this._extended);return this._nextToken=t,t.token}},g.toNumber=function(t){return isNaN(+t)?NaN:+t}},{132:132}],141:[function(t,e,n){var r=t(147),o=t(148);e.exports=function(t){var e=t.reduce(function(t,e){var n=e.length;return t[n]||(t[n]=[]),t[n].push(e),t},{});return Object.keys(e).forEach(function(t){e[t]=o(e[t])}),r(e)}},{147:147,148:148}],142:[function(t,e,n){var r=t(144);e.exports=function o(t,e,n){for(var i=t,s=!0;s&&n<e.length;++n){var u=e[n],a=typeof u;if(u&&"object"===a){var c={},p=r(u,c),h=n+1;do{var f=i[p];s=void 0!==f,s&&(s=o(f,e,h)),p=r(u,c)}while(s&&!c.done);break}i=i[u],s=void 0!==i}return s}},{144:144}],143:[function(t,e,n){e.exports={iterateKeySet:t(144),toTree:t(148),toTreeWithUnion:t(149),pathsComplementFromTree:t(146),pathsComplementFromLengthTree:t(145),hasIntersection:t(142),toPaths:t(147),collapse:t(141)}},{141:141,142:142,144:144,145:145,146:146,147:147,148:148,149:149}],144:[function(t,e,n){function r(t,e){var n=e.from=t.from||0,r=e.to=t.to||"number"==typeof t.length&&e.from+t.length-1||0;e.rangeOffset=e.from,e.loaded=!0,n>r&&(e.empty=!0)}function o(t,e){e.done=!1;var n=e.isObject=!(!t||"object"!=typeof t);e.isArray=n&&i(t),e.arrayOffset=0}var i=Array.isArray;e.exports=function(t,e){if(void 0===e.isArray&&o(t,e),e.isArray){var n;do{e.loaded&&e.rangeOffset>e.to&&(++e.arrayOffset,e.loaded=!1);var i=e.arrayOffset,s=t.length;if(i>=s){e.done=!0;break}var u=t[e.arrayOffset],a=typeof u;if("object"===a){if(e.loaded||r(u,e),e.empty)continue;n=e.rangeOffset++}else++e.arrayOffset,n=u}while(void 0===n);return n}return e.isObject?(e.loaded||r(t,e),e.rangeOffset>e.to?void(e.done=!0):e.rangeOffset++):(e.done=!0,t)}},{}],145:[function(t,e,n){var r=t(142);e.exports=function(t,e){for(var n=[],o=-1,i=0,s=t.length;s>i;++i){var u=t[i];r(e[u.length],u,0)||(n[++o]=u)}return n}},{142:142}],146:[function(t,e,n){var r=t(142);e.exports=function(t,e){for(var n=[],o=-1,i=0,s=t.length;s>i;++i)r(e,t[i],0)||(n[++o]=t[i]);return n}},{142:142}],147:[function(t,e,n){function r(t){return null!==t&&typeof t===f}function o(t,e,n){var r,i,s,u,h,f,l,d,v,y,b,m,g,w,x=c(String(e)),_=Object.create(null),S=[],E=-1,C=0,A=[],N=0;if(u=[],h=-1,n-1>e){for(f=a(t,u);++h<f;)r=u[h],i=o(t[r],e+1,n),s=i.code,_[s]?i=_[s]:(S[C++]=s,i=_[s]={keys:[],sets:i.sets}),x=c(x+r+s),p(r)&&i.keys.push(parseInt(r,10))||i.keys.push(r);for(;++E<C;)if(r=S[E],i=_[r],u=i.keys,f=u.length,f>0)for(l=i.sets,d=-1,v=l.length,g=u[0];++d<v;){for(y=l[d],b=-1,m=y.length,w=new Array(m+1),w[0]=f>1&&u||g;++b<m;)w[b+1]=y[b];A[N++]=w}}else for(f=a(t,u),f>1?A[N++]=[u]:A[N++]=u;++h<f;)x=c(x+u[h]);return{code:x,sets:A}}function i(t){for(var e=-1,n=t.length;++e<n;){var r=t[e];h(r)&&(t[e]=s(r))}return t}function s(t){for(var e=-1,n=t.length-1,r=n>0;++e<=n;){var o=t[e];if(!p(o)){r=!1;break}t[e]=parseInt(o,10)}if(r===!0){t.sort(u);var i=t[0],s=t[n];if(n>=s-i)return{from:i,to:s}}return t}function u(t,e){return t-e}function a(t,e,n){var r=0;for(var o in t)e[r++]=o;return r>1&&e.sort(n),r}function c(t){for(var e=5381,n=-1,r=t.length;++n<r;)e=(e<<5)+e+t.charCodeAt(n);return String(e)}function p(t){return!h(t)&&t-parseFloat(t)+1>=0}var h=Array.isArray,f="object";e.exports=function(t){var e,n=[],s=0;for(var u in t)if(p(u)&&r(e=t[u]))for(var a=o(e,0,parseInt(u,10)).sets,c=-1,h=a.length;++c<h;)n[s++]=i(a[c]);return n}},{}],148:[function(t,e,n){function r(t,e,n){var i,s=e[n],u={},a=n+1;i=o(s,u);do{var c=t[i];c||(a===e.length?t[i]=null:c=t[i]={}),a<e.length&&r(c,e,a),u.done||(i=o(s,u))}while(!u.done)}var o=t(144);Array.isArray;e.exports=function(t){return t.reduce(function(t,e){return r(t,e,0),t},{})}},{144:144}],149:[function(t,e,n){},{}],150:[function(t,e,n){function r(){p=!1,u.length?c=u.concat(c):h=-1,c.length&&o()}function o(){if(!p){var t=setTimeout(r);p=!0;for(var e=c.length;e;){for(u=c,c=[];++h<e;)u&&u[h].run();h=-1,e=c.length}u=null,p=!1,clearTimeout(t)}}function i(t,e){this.fun=t,this.array=e}function s(){}var u,a=e.exports={},c=[],p=!1,h=-1;a.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new i(t,e)),1!==c.length||p||setTimeout(o,0)},i.prototype.run=function(){this.fun.apply(null,this.array)},a.title="browser",a.browser=!0,a.env={},a.argv=[],a.version="",a.versions={},a.on=s,a.addListener=s,a.once=s,a.off=s,a.removeListener=s,a.removeAllListeners=s,a.emit=s,a.binding=function(t){throw new Error("process.binding is not supported")},a.cwd=function(){return"/"},a.chdir=function(t){throw new Error("process.chdir is not supported")},a.umask=function(){return 0}},{}],151:[function(t,e,n){"use strict";e.exports=t(156)},{156:156}],152:[function(t,e,n){"use strict";function r(){}function o(t){try{return t.then}catch(e){return y=e,b}}function i(t,e){try{return t(e)}catch(n){return y=n,b}}function s(t,e,n){try{t(e,n)}catch(r){return y=r,b}}function u(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._37=0,this._12=null,this._59=[],t!==r&&d(t,this)}function a(t,e,n){return new t.constructor(function(o,i){var s=new u(r);s.then(o,i),c(t,new l(e,n,s))})}function c(t,e){for(;3===t._37;)t=t._12;return 0===t._37?void t._59.push(e):void v(function(){var n=1===t._37?e.onFulfilled:e.onRejected;if(null===n)return void(1===t._37?p(e.promise,t._12):h(e.promise,t._12));var r=i(n,t._12);r===b?h(e.promise,y):p(e.promise,r)})}function p(t,e){if(e===t)return h(t,new TypeError("A promise cannot be resolved with itself."));if(e&&("object"==typeof e||"function"==typeof e)){var n=o(e);if(n===b)return h(t,y);if(n===t.then&&e instanceof u)return t._37=3,t._12=e,void f(t);if("function"==typeof n)return void d(n.bind(e),t)}t._37=1,t._12=e,f(t)}function h(t,e){t._37=2,t._12=e,f(t)}function f(t){for(var e=0;e<t._59.length;e++)c(t,t._59[e]);t._59=null}function l(t,e,n){this.onFulfilled="function"==typeof t?t:null,this.onRejected="function"==typeof e?e:null,this.promise=n}function d(t,e){var n=!1,r=s(t,function(t){n||(n=!0,p(e,t))},function(t){n||(n=!0,h(e,t))});n||r!==b||(n=!0,h(e,y))}var v=t(124),y=null,b={};e.exports=u,u._99=r,u.prototype.then=function(t,e){if(this.constructor!==u)return a(this,t,e);var n=new u(r);return c(this,new l(t,e,n)),n}},{124:124}],153:[function(t,e,n){"use strict";var r=t(152);e.exports=r,r.prototype.done=function(t,e){var n=arguments.length?this.then.apply(this,arguments):this;n.then(null,function(t){setTimeout(function(){throw t},0)})}},{152:152}],154:[function(t,e,n){"use strict";function r(t){var e=new o(o._99);return e._37=1,e._12=t,e}var o=t(152);e.exports=o;var i=r(!0),s=r(!1),u=r(null),a=r(void 0),c=r(0),p=r("");o.resolve=function(t){if(t instanceof o)return t;if(null===t)return u;if(void 0===t)return a;if(t===!0)return i;if(t===!1)return s;if(0===t)return c;if(""===t)return p;if("object"==typeof t||"function"==typeof t)try{var e=t.then;if("function"==typeof e)return new o(e.bind(t))}catch(n){return new o(function(t,e){e(n)})}return r(t)},o.all=function(t){var e=Array.prototype.slice.call(t);return new o(function(t,n){function r(s,u){if(u&&("object"==typeof u||"function"==typeof u)){if(u instanceof o&&u.then===o.prototype.then){for(;3===u._37;)u=u._12;return 1===u._37?r(s,u._12):(2===u._37&&n(u._12),void u.then(function(t){r(s,t)},n))}var a=u.then;if("function"==typeof a){var c=new o(a.bind(u));return void c.then(function(t){r(s,t)},n)}}e[s]=u,0===--i&&t(e)}if(0===e.length)return t([]);for(var i=e.length,s=0;s<e.length;s++)r(s,e[s])})},o.reject=function(t){return new o(function(e,n){n(t)})},o.race=function(t){return new o(function(e,n){t.forEach(function(t){o.resolve(t).then(e,n)})})},o.prototype["catch"]=function(t){return this.then(null,t)}},{152:152}],155:[function(t,e,n){"use strict";var r=t(152);e.exports=r,r.prototype["finally"]=function(t){return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})}},{152:152}],156:[function(t,e,n){"use strict";e.exports=t(152),t(153),t(155),t(154),t(157)},{152:152,153:153,154:154,155:155,157:157}],157:[function(t,e,n){"use strict";var r=t(152),o=t(123);e.exports=r,r.denodeify=function(t,e){return e=e||1/0,function(){var n=this,o=Array.prototype.slice.call(arguments,0,e>0?e:0);return new r(function(e,r){o.push(function(t,n){t?r(t):e(n)});var i=t.apply(n,o);!i||"object"!=typeof i&&"function"!=typeof i||"function"!=typeof i.then||e(i)})}},r.nodeify=function(t){return function(){var e=Array.prototype.slice.call(arguments),n="function"==typeof e[e.length-1]?e.pop():null,i=this;try{return t.apply(this,arguments).nodeify(n,i)}catch(s){if(null===n||"undefined"==typeof n)return new r(function(t,e){e(s)});o(function(){n.call(i,s)})}}},r.prototype.nodeify=function(t,e){return"function"!=typeof t?this:void this.then(function(n){o(function(){t.call(e,null,n)})},function(n){o(function(){t.call(e,n)})})}},{123:123,152:152}],158:[function(e,n,r){(function(o){(function(i){var s={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},u=s[typeof window]&&window||this,a=s[typeof r]&&r&&!r.nodeType&&r,c=s[typeof n]&&n&&!n.nodeType&&n,p=(c&&c.exports===a&&a,s[typeof o]&&o);!p||p.global!==p&&p.window!==p||(u=p),"function"==typeof t&&t.amd?t(["rx"],function(t,e){return i(u,e,t)}):"object"==typeof n&&n&&n.exports===a?n.exports=i(u,n.exports,e(159)):u.Rx=i(u,{},u.Rx)}).call(this,function(t,e,n,r){function o(){try{return l.apply(this,arguments)}catch(t){return M.e=t,M}}function i(t){if(!E(t))throw new TypeError("fn must be a function");return l=t,o}function s(t,e,n){return new b(function(r){var o=!1,i=null,s=[];return t.subscribe(function(t){var u,a;try{a=e(t)}catch(c){return void r.onError(c)}if(u=0,o)try{u=n(a,i)}catch(p){return void r.onError(p)}else o=!0,i=a;u>0&&(i=a,s=[]),u>=0&&s.push(t)},function(t){r.onError(t)},function(){r.onNext(s),r.onCompleted()})},t)}function u(t){if(0===t.length)throw new D;return t[0]}function a(t,e,n,r){if(0>e)throw new R;return new b(function(o){var i=e;return t.subscribe(function(t){0===i--&&(o.onNext(t),o.onCompleted())},function(t){o.onError(t)},function(){n?(o.onNext(r),o.onCompleted()):o.onError(new R)})},t)}function c(t,e,n){return new b(function(r){var o=n,i=!1;return t.subscribe(function(t){i?r.onError(new Error("Sequence contains more than one element")):(o=t,i=!0)},function(t){r.onError(t)},function(){i||e?(r.onNext(o),r.onCompleted()):r.onError(new D)})},t)}function p(t,e,n){return new b(function(r){return t.subscribe(function(t){r.onNext(t),r.onCompleted()},function(t){r.onError(t)},function(){e?(r.onNext(n),r.onCompleted()):r.onError(new D)})},t)}function h(t,e,n){return new b(function(r){var o=n,i=!1;return t.subscribe(function(t){o=t,i=!0},function(t){r.onError(t)},function(){i||e?(r.onNext(o),r.onCompleted()):r.onError(new D)})},t)}function f(t,e,n,o){var i=j(e,n,3);return new b(function(e){var n=0;return t.subscribe(function(r){var s;try{s=i(r,n,t)}catch(u){return void e.onError(u)}s?(e.onNext(o?n:r),e.onCompleted()):n++},function(t){e.onError(t)},function(){e.onNext(o?-1:r),e.onCompleted()})},t)}var l,d=n.Observable,v=d.prototype,y=n.CompositeDisposable,b=n.AnonymousObservable,m=n.Disposable.empty,g=(n.internals.isEqual,n.helpers),w=g.not,x=g.defaultComparer,_=g.identity,S=g.defaultSubComparer,E=g.isFunction,C=g.isPromise,A=g.isArrayLike,N=g.isIterable,k=n.internals.inherits,O=d.fromPromise,P=d.from,j=n.internals.bindCallback,D=n.EmptyError,q=n.ObservableBase,R=n.ArgumentOutOfRangeError,M={e:{}};v.aggregate=function(){var t,e,n=!1,r=this;return 2===arguments.length?(n=!0,e=arguments[0],t=arguments[1]):t=arguments[0],new b(function(o){var i,s,u;return r.subscribe(function(r){!u&&(u=!0);try{i?s=t(s,r):(s=n?t(e,r):r,i=!0)}catch(a){return o.onError(a)}},function(t){o.onError(t)},function(){u&&o.onNext(s),!u&&n&&o.onNext(e),!u&&!n&&o.onError(new D),o.onCompleted()})},r)};var T=function(t){function e(e,n,r,o){this.source=e,this.acc=n,this.hasSeed=r,this.seed=o,t.call(this)}function n(t,e){this.o=t,this.acc=e.acc,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.result=null,this.hasValue=!1,this.isStopped=!1}return k(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this))},n.prototype.onNext=function(t){this.isStopped||(!this.hasValue&&(this.hasValue=!0),this.hasAccumulation?this.result=i(this.acc)(this.result,t):(this.result=this.hasSeed?i(this.acc)(this.seed,t):t,this.hasAccumulation=!0),this.result===M&&this.o.onError(this.result.e))},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.hasValue&&this.o.onNext(this.result),!this.hasValue&&this.hasSeed&&this.o.onNext(this.seed),!this.hasValue&&!this.hasSeed&&this.o.onError(new D),this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(q);return v.reduce=function(t){var e=!1;if(2===arguments.length){e=!0;var n=arguments[1]}return new T(this,t,e,n)},v.some=function(t,e){var n=this;return t?n.filter(t,e).some():new b(function(t){return n.subscribe(function(){t.onNext(!0),t.onCompleted()},function(e){t.onError(e)},function(){t.onNext(!1),t.onCompleted()})},n)},v.any=function(){return this.some.apply(this,arguments)},v.isEmpty=function(){return this.any().map(w)},v.every=function(t,e){return this.filter(function(e){return!t(e)},e).some().map(w)},v.all=function(){return this.every.apply(this,arguments)},v.includes=function(t,e){function n(t,e){return 0===t&&0===e||t===e||isNaN(t)&&isNaN(e)}var r=this;return new b(function(o){var i=0,s=+e||0;return Math.abs(s)===1/0&&(s=0),0>s?(o.onNext(!1),o.onCompleted(),m):r.subscribe(function(e){i++>=s&&n(e,t)&&(o.onNext(!0),o.onCompleted())},function(t){o.onError(t)},function(){o.onNext(!1),o.onCompleted()})},this)},v.contains=function(t,e){v.includes(t,e)},v.count=function(t,e){return t?this.filter(t,e).count():this.reduce(function(t){return t+1},0)},v.indexOf=function(t,e){var n=this;return new b(function(r){var o=0,i=+e||0;return Math.abs(i)===1/0&&(i=0),0>i?(r.onNext(-1),r.onCompleted(),m):n.subscribe(function(e){o>=i&&e===t&&(r.onNext(o),r.onCompleted()),o++},function(t){r.onError(t)},function(){r.onNext(-1),r.onCompleted()})},n)},v.sum=function(t,e){return t&&E(t)?this.map(t,e).sum():this.reduce(function(t,e){return t+e},0)},v.minBy=function(t,e){return e||(e=S),s(this,t,function(t,n){return-1*e(t,n)})},v.min=function(t){return this.minBy(_,t).map(function(t){return u(t)})},v.maxBy=function(t,e){return e||(e=S),s(this,t,e)},v.max=function(t){return this.maxBy(_,t).map(function(t){return u(t)})},v.average=function(t,e){return t&&E(t)?this.map(t,e).average():this.reduce(function(t,e){return{sum:t.sum+e,count:t.count+1}},{sum:0,count:0}).map(function(t){if(0===t.count)throw new D;return t.sum/t.count})},v.sequenceEqual=function(t,e){var n=this;return e||(e=x),new b(function(r){var o=!1,i=!1,s=[],u=[],a=n.subscribe(function(t){var n,o;if(u.length>0){o=u.shift();try{n=e(o,t)}catch(a){return void r.onError(a)}n||(r.onNext(!1),r.onCompleted())}else i?(r.onNext(!1),r.onCompleted()):s.push(t)},function(t){r.onError(t)},function(){o=!0,0===s.length&&(u.length>0?(r.onNext(!1),r.onCompleted()):i&&(r.onNext(!0),r.onCompleted()))});(A(t)||N(t))&&(t=P(t)),C(t)&&(t=O(t));var c=t.subscribe(function(t){var n;if(s.length>0){var i=s.shift();try{n=e(i,t)}catch(a){return void r.onError(a)}n||(r.onNext(!1),r.onCompleted())}else o?(r.onNext(!1),r.onCompleted()):u.push(t)},function(t){r.onError(t)},function(){i=!0,0===u.length&&(s.length>0?(r.onNext(!1),r.onCompleted()):o&&(r.onNext(!0),r.onCompleted()))});return new y(a,c)},n)},v.elementAt=function(t){return a(this,t,!1)},v.elementAtOrDefault=function(t,e){return a(this,t,!0,e)},v.single=function(t,e){return t&&E(t)?this.where(t,e).single():c(this,!1)},v.singleOrDefault=function(t,e,n){return t&&E(t)?this.filter(t,n).singleOrDefault(null,e):c(this,!0,e)},v.first=function(t,e){return t?this.where(t,e).first():p(this,!1)},v.firstOrDefault=function(t,e,n){return t?this.where(t).firstOrDefault(null,e):p(this,!0,e)},v.last=function(t,e){return t?this.where(t,e).last():h(this,!1)},v.lastOrDefault=function(t,e,n){return t?this.where(t,n).lastOrDefault(null,e):h(this,!0,e)},v.find=function(t,e){return f(this,t,e,!1)},v.findIndex=function(t,e){return f(this,t,e,!0)},v.toSet=function(){if("undefined"==typeof t.Set)throw new TypeError;var e=this;return new b(function(n){var r=new t.Set;return e.subscribe(function(t){r.add(t)},function(t){n.onError(t)},function(){n.onNext(r),n.onCompleted()})},e)},v.toMap=function(e,n){if("undefined"==typeof t.Map)throw new TypeError;var r=this;return new b(function(o){var i=new t.Map;return r.subscribe(function(t){var r;try{r=e(t)}catch(s){return void o.onError(s)}var u=t;if(n)try{u=n(t)}catch(s){return void o.onError(s)}i.set(r,u)},function(t){o.onError(t)},function(){o.onNext(i),o.onCompleted()})},r)},n})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{159:159}],159:[function(e,n,r){(function(e,o){(function(i){function u(t){for(var e=[],n=0,r=t.length;r>n;n++)e.push(t[n]);return e}function a(t,e){if(ct&&e.stack&&"object"==typeof t&&null!==t&&t.stack&&-1===t.stack.indexOf(lt)){for(var n=[],r=e;r;r=r.source)r.stack&&n.unshift(r.stack);n.unshift(t.stack);var o=n.join("\n"+lt+"\n");t.stack=c(o)}}function c(t){for(var e=t.split("\n"),n=[],r=0,o=e.length;o>r;r++){var i=e[r];p(i)||h(i)||!i||n.push(i)}return n.join("\n")}function p(t){var e=l(t);if(!e)return!1;var n=e[0],r=e[1];return n===ht&&r>=ft&&$n>=r}function h(t){return-1!==t.indexOf("(module.js:")||-1!==t.indexOf("(node.js:")}function f(){if(ct)try{throw new Error}catch(t){var e=t.stack.split("\n"),n=e[0].indexOf("@")>0?e[1]:e[2],r=l(n);if(!r)return;return ht=r[0],r[1]}}function l(t){var e=/at .+ \((.+):(\d+):(?:\d+)\)$/.exec(t);if(e)return[e[1],Number(e[2])];var n=/at ([^ ]+):(\d+):(?:\d+)$/.exec(t);if(n)return[n[1],Number(n[2])];var r=/.*@(.+):(\d+)$/.exec(t);return r?[r[1],Number(r[2])]:void 0}function d(t){var e=[];if(!Ht(t))return e;Ut.nonEnumArgs&&t.length&&Xt(t)&&(t=Yt.call(t));var n=Ut.enumPrototypes&&"function"==typeof t,r=Ut.enumErrorProps&&(t===Jt||t instanceof Error);for(var o in t)n&&"prototype"==o||r&&("message"==o||"name"==o)||e.push(o);if(Ut.nonEnumShadows&&t!==It){var i=t.constructor,s=-1,u=kt;if(t===(i&&i.prototype))var a=t===Lt?$t:t===Jt?qt:Wt.call(t),c=Ft[a];for(;++s<u;)o=Nt[s],c&&c[o]||!zt.call(t,o)||e.push(o)}return e}function v(t,e,n){for(var r=-1,o=n(t),i=o.length;++r<i;){var s=o[r];if(e(t[s],s,t)===!1)break}return t}function y(t,e){return v(t,e,d)}function b(t){return"function"!=typeof t.toString&&"string"==typeof(t+"")}function m(t,e,n,r){if(t===e)return 0!==t||1/t==1/e;var o=typeof t,i=typeof e;if(t===t&&(null==t||null==e||"function"!=o&&"object"!=o&&"function"!=i&&"object"!=i))return!1;var s=Wt.call(t),u=Wt.call(e);if(s==Ot&&(s=Tt),u==Ot&&(u=Tt),s!=u)return!1;switch(s){case jt:case Dt:return+t==+e;case Mt:return t!=+t?e!=+e:0==t?1/t==1/e:t==+e;case Vt:case $t:return t==String(e)}var a=s==Pt;if(!a){if(s!=Tt||!Ut.nodeClass&&(b(t)||b(e)))return!1;var c=!Ut.argsObject&&Xt(t)?Object:t.constructor,p=!Ut.argsObject&&Xt(e)?Object:e.constructor;if(!(c==p||zt.call(t,"constructor")&&zt.call(e,"constructor")||at(c)&&c instanceof c&&at(p)&&p instanceof p||!("constructor"in t&&"constructor"in e)))return!1}n||(n=[]),r||(r=[]);for(var h=n.length;h--;)if(n[h]==t)return r[h]==e;var f=0,l=!0;if(n.push(t),r.push(e),a){if(h=t.length,f=e.length,l=f==h)for(;f--;){var d=e[f];if(!(l=m(t[f],d,n,r)))break}}else y(e,function(e,o,i){return zt.call(i,o)?(f++,l=zt.call(t,o)&&m(t[o],e,n,r)):void 0}),l&&y(t,function(t,e,n){return zt.call(n,e)?l=--f>-1:void 0});return n.pop(),r.pop(),l}function g(t,e){for(var n=new Array(t),r=0;t>r;r++)n[r]=e();return n}function w(){try{return Qt.apply(this,arguments)}catch(t){return ne.e=t,ne}}function x(t){if(!at(t))throw new TypeError("fn must be a function");return Qt=t,w}function _(t){throw t}function S(t,e){this.id=t,this.value=e}function E(t,e){this.scheduler=t,this.disposable=e,this.isDisposed=!1}function C(t,e){e.isDisposed||(e.isDisposed=!0,e.disposable.dispose())}function A(t){this._s=s}function N(t){this._s=s,this._l=s.length,this._i=0}function k(t){this._a=t}function O(t){this._a=t,this._l=q(t),this._i=0}function P(t){return"number"==typeof t&&X.isFinite(t)}function j(t){var e,n=t[xt];if(!n&&"string"==typeof t)return e=new A(t),e[xt]();if(!n&&t.length!==i)return e=new k(t),e[xt]();if(!n)throw new TypeError("Object is not iterable");return t[xt]()}function D(t){var e=+t;return 0===e?e:isNaN(e)?e:0>e?-1:1}function q(t){var e=+t.length;return isNaN(e)?0:0!==e&&P(e)?(e=D(e)*Math.floor(Math.abs(e)),0>=e?0:e>en?en:e):e}function R(t,e){this.observer=t,this.parent=e}function M(t,e){return me(t)||(t=_e),new rn(e,t)}function T(t,e){this.observer=t,this.parent=e}function V(t,e){this.observer=t,this.parent=e}function $(t,e){return new qn(function(n){var r=new fe,o=new le;return o.setDisposable(r),r.setDisposable(t.subscribe(function(t){n.onNext(t)},function(t){try{var r=e(t)}catch(i){return n.onError(i)}ut(r)&&(r=Xe(r));var s=new fe;o.setDisposable(s),s.setDisposable(r.subscribe(n))},function(t){n.onCompleted(t)})),o},t)}function W(){return!1}function z(t,e){var n=this;return new qn(function(r){var o=0,i=t.length;return n.subscribe(function(n){if(i>o){var s=t[o++],u=x(e)(n,s);if(u===ne)return r.onError(u.e);r.onNext(u)}else r.onCompleted()},function(t){r.onError(t)},function(){r.onCompleted()})},n)}function W(){return!1}function G(){return[]}function W(){return!1}function J(){return[]}function I(t,e){this.observer=t,this.accumulator=e.accumulator,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.accumulation=null,this.hasValue=!1,this.isStopped=!1}function L(t,e,n){var r=At(e,n,3);return t.map(function(e,n){var o=r(e,n,t);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o}).concatAll()}function B(t,e,n){for(var r=0,o=t.length;o>r;r++)if(n(t[r],e))return r;return-1}function F(t){this.comparer=t,this.set=[]}function U(t,e,n){var r=At(e,n,3);return t.map(function(e,n){var o=r(e,n,t);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o}).mergeAll()}var H={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},X=H[typeof window]&&window||this,Q=H[typeof r]&&r&&!r.nodeType&&r,K=H[typeof n]&&n&&!n.nodeType&&n,Y=K&&K.exports===Q&&Q,Z=H[typeof o]&&o;!Z||Z.global!==Z&&Z.window!==Z||(X=Z);var tt={internals:{},config:{Promise:X.Promise},helpers:{}},et=tt.helpers.noop=function(){},nt=(tt.helpers.notDefined=function(t){return"undefined"==typeof t},tt.helpers.identity=function(t){return t}),rt=(tt.helpers.pluck=function(t){return function(e){return e[t]}},tt.helpers.just=function(t){return function(){return t}},tt.helpers.defaultNow=Date.now),ot=tt.helpers.defaultComparer=function(t,e){return Kt(t,e)},it=tt.helpers.defaultSubComparer=function(t,e){return t>e?1:e>t?-1:0},st=(tt.helpers.defaultKeySerializer=function(t){return t.toString()},tt.helpers.defaultError=function(t){throw t}),ut=tt.helpers.isPromise=function(t){return!!t&&"function"!=typeof t.subscribe&&"function"==typeof t.then},at=(tt.helpers.asArray=function(){return Array.prototype.slice.call(arguments)},tt.helpers.not=function(t){return!t},tt.helpers.isFunction=function(){var t=function(t){return"function"==typeof t||!1};return t(/x/)&&(t=function(t){return"function"==typeof t&&"[object Function]"==Wt.call(t)}),t}());tt.config.longStackSupport=!1;var ct=!1;try{throw new Error}catch(pt){ct=!!pt.stack}var ht,ft=f(),lt="From previous event:",dt=tt.EmptyError=function(){this.message="Sequence contains no elements.",Error.call(this)};dt.prototype=Error.prototype;var vt=tt.ObjectDisposedError=function(){this.message="Object has been disposed",Error.call(this)};vt.prototype=Error.prototype;var yt=tt.ArgumentOutOfRangeError=function(){this.message="Argument out of range",Error.call(this)};yt.prototype=Error.prototype;var bt=tt.NotSupportedError=function(t){this.message=t||"This operation is not supported",Error.call(this)};bt.prototype=Error.prototype;var mt=tt.NotImplementedError=function(t){this.message=t||"This operation is not implemented",Error.call(this)};mt.prototype=Error.prototype;var gt=tt.helpers.notImplemented=function(){throw new mt},wt=tt.helpers.notSupported=function(){throw new bt},xt="function"==typeof Symbol&&Symbol.iterator||"_es6shim_iterator_";X.Set&&"function"==typeof(new X.Set)["@@iterator"]&&(xt="@@iterator");var _t=tt.doneEnumerator={done:!0,value:i},St=tt.helpers.isIterable=function(t){return t[xt]!==i},Et=tt.helpers.isArrayLike=function(t){return t&&t.length!==i};tt.helpers.iterator=xt;var Ct,At=tt.internals.bindCallback=function(t,e,n){if("undefined"==typeof e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}},Nt=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],kt=Nt.length,Ot="[object Arguments]",Pt="[object Array]",jt="[object Boolean]",Dt="[object Date]",qt="[object Error]",Rt="[object Function]",Mt="[object Number]",Tt="[object Object]",Vt="[object RegExp]",$t="[object String]",Wt=Object.prototype.toString,zt=Object.prototype.hasOwnProperty,Gt=Wt.call(arguments)==Ot,Jt=Error.prototype,It=Object.prototype,Lt=String.prototype,Bt=It.propertyIsEnumerable;try{Ct=!(Wt.call(document)==Tt&&!({toString:0}+""))}catch(pt){Ct=!0}var Ft={};Ft[Pt]=Ft[Dt]=Ft[Mt]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},Ft[jt]=Ft[$t]={constructor:!0,toString:!0,valueOf:!0},Ft[qt]=Ft[Rt]=Ft[Vt]={constructor:!0,toString:!0},Ft[Tt]={constructor:!0};var Ut={};!function(){var t=function(){this.x=1},e=[];t.prototype={valueOf:1,y:1};for(var n in new t)e.push(n);for(n in arguments);Ut.enumErrorProps=Bt.call(Jt,"message")||Bt.call(Jt,"name"),Ut.enumPrototypes=Bt.call(t,"prototype"),Ut.nonEnumArgs=0!=n,Ut.nonEnumShadows=!/valueOf/.test(e)}(1);var Ht=tt.internals.isObject=function(t){var e=typeof t;return t&&("function"==e||"object"==e)||!1},Xt=function(t){return t&&"object"==typeof t?Wt.call(t)==Ot:!1};Gt||(Xt=function(t){return t&&"object"==typeof t?zt.call(t,"callee"):!1});var Qt,Kt=tt.internals.isEqual=function(t,e){return m(t,e,[],[])},Yt=({}.hasOwnProperty,Array.prototype.slice),Zt=this.inherits=tt.internals.inherits=function(t,e){function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n},te=tt.internals.addProperties=function(t){for(var e=[],n=1,r=arguments.length;r>n;n++)e.push(arguments[n]);for(var o=0,i=e.length;i>o;o++){var s=e[o];for(var u in s)t[u]=s[u]}},ee=tt.internals.addRef=function(t,e){return new qn(function(n){return new ie(e.getDisposable(),t.subscribe(n))})},ne={e:{}};S.prototype.compareTo=function(t){var e=this.value.compareTo(t.value);return 0===e&&(e=this.id-t.id),e};var re=tt.internals.PriorityQueue=function(t){this.items=new Array(t),this.length=0},oe=re.prototype;oe.isHigherPriority=function(t,e){return this.items[t].compareTo(this.items[e])<0},oe.percolate=function(t){if(!(t>=this.length||0>t)){var e=t-1>>1;if(!(0>e||e===t)&&this.isHigherPriority(t,e)){var n=this.items[t];this.items[t]=this.items[e],this.items[e]=n,this.percolate(e)}}},oe.heapify=function(t){if(+t||(t=0),!(t>=this.length||0>t)){var e=2*t+1,n=2*t+2,r=t;if(e<this.length&&this.isHigherPriority(e,r)&&(r=e),n<this.length&&this.isHigherPriority(n,r)&&(r=n),r!==t){var o=this.items[t];this.items[t]=this.items[r],this.items[r]=o,this.heapify(r)}}},oe.peek=function(){return this.items[0].value},oe.removeAt=function(t){this.items[t]=this.items[--this.length],this.items[this.length]=i,this.heapify()},oe.dequeue=function(){var t=this.peek();return this.removeAt(0),t},oe.enqueue=function(t){var e=this.length++;this.items[e]=new S(re.count++,t),this.percolate(e)},oe.remove=function(t){for(var e=0;e<this.length;e++)if(this.items[e].value===t)return this.removeAt(e),!0;return!1},re.count=0;var ie=tt.CompositeDisposable=function(){var t,e,n=[];if(Array.isArray(arguments[0]))n=arguments[0],e=n.length;else for(e=arguments.length,n=new Array(e),t=0;e>t;t++)n[t]=arguments[t];for(t=0;e>t;t++)if(!pe(n[t]))throw new TypeError("Not a disposable");this.disposables=n,this.isDisposed=!1,this.length=n.length},se=ie.prototype;se.add=function(t){this.isDisposed?t.dispose():(this.disposables.push(t),this.length++)},se.remove=function(t){var e=!1;if(!this.isDisposed){var n=this.disposables.indexOf(t);-1!==n&&(e=!0,this.disposables.splice(n,1),this.length--,t.dispose())}return e},se.dispose=function(){
3275 if(!this.isDisposed){this.isDisposed=!0;for(var t=this.disposables.length,e=new Array(t),n=0;t>n;n++)e[n]=this.disposables[n];for(this.disposables=[],this.length=0,n=0;t>n;n++)e[n].dispose()}};var ue=tt.Disposable=function(t){this.isDisposed=!1,this.action=t||et};ue.prototype.dispose=function(){this.isDisposed||(this.action(),this.isDisposed=!0)};var ae=ue.create=function(t){return new ue(t)},ce=ue.empty={dispose:et},pe=ue.isDisposable=function(t){return t&&at(t.dispose)},he=ue.checkDisposed=function(t){if(t.isDisposed)throw new vt},fe=tt.SingleAssignmentDisposable=function(){this.isDisposed=!1,this.current=null};fe.prototype.getDisposable=function(){return this.current},fe.prototype.setDisposable=function(t){if(this.current)throw new Error("Disposable has already been assigned");var e=this.isDisposed;!e&&(this.current=t),e&&t&&t.dispose()},fe.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var le=tt.SerialDisposable=function(){this.isDisposed=!1,this.current=null};le.prototype.getDisposable=function(){return this.current},le.prototype.setDisposable=function(t){var e=this.isDisposed;if(!e){var n=this.current;this.current=t}n&&n.dispose(),e&&t&&t.dispose()},le.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var de=tt.RefCountDisposable=function(){function t(t){this.disposable=t,this.disposable.count++,this.isInnerDisposed=!1}function e(t){this.underlyingDisposable=t,this.isDisposed=!1,this.isPrimaryDisposed=!1,this.count=0}return t.prototype.dispose=function(){this.disposable.isDisposed||this.isInnerDisposed||(this.isInnerDisposed=!0,this.disposable.count--,0===this.disposable.count&&this.disposable.isPrimaryDisposed&&(this.disposable.isDisposed=!0,this.disposable.underlyingDisposable.dispose()))},e.prototype.dispose=function(){this.isDisposed||this.isPrimaryDisposed||(this.isPrimaryDisposed=!0,0===this.count&&(this.isDisposed=!0,this.underlyingDisposable.dispose()))},e.prototype.getDisposable=function(){return this.isDisposed?ce:new t(this)},e}();E.prototype.dispose=function(){this.scheduler.scheduleWithState(this,C)};var ve=tt.internals.ScheduledItem=function(t,e,n,r,o){this.scheduler=t,this.state=e,this.action=n,this.dueTime=r,this.comparer=o||it,this.disposable=new fe};ve.prototype.invoke=function(){this.disposable.setDisposable(this.invokeCore())},ve.prototype.compareTo=function(t){return this.comparer(this.dueTime,t.dueTime)},ve.prototype.isCancelled=function(){return this.disposable.isDisposed},ve.prototype.invokeCore=function(){return this.action(this.scheduler,this.state)};var ye=tt.Scheduler=function(){function t(t,e,n,r){this.now=t,this._schedule=e,this._scheduleRelative=n,this._scheduleAbsolute=r}function e(t,e){return e(),ce}t.isScheduler=function(e){return e instanceof t};var n=t.prototype;return n.schedule=function(t){return this._schedule(t,e)},n.scheduleWithState=function(t,e){return this._schedule(t,e)},n.scheduleWithRelative=function(t,n){return this._scheduleRelative(n,t,e)},n.scheduleWithRelativeAndState=function(t,e,n){return this._scheduleRelative(t,e,n)},n.scheduleWithAbsolute=function(t,n){return this._scheduleAbsolute(n,t,e)},n.scheduleWithAbsoluteAndState=function(t,e,n){return this._scheduleAbsolute(t,e,n)},t.now=rt,t.normalize=function(t){return 0>t&&(t=0),t},t}(),be=ye.normalize,me=ye.isScheduler;!function(t){function e(t,e){function n(e){o(e,function(e){var r=!1,o=!1,s=t.scheduleWithState(e,function(t,e){return r?i.remove(s):o=!0,n(e),ce});o||(i.add(s),r=!0)})}var r=e[0],o=e[1],i=new ie;return n(r),i}function n(t,e,n){function r(e){i(e,function(e,o){var i=!1,u=!1,a=t[n](e,o,function(t,e){return i?s.remove(a):u=!0,r(e),ce});u||(s.add(a),i=!0)})}var o=e[0],i=e[1],s=new ie;return r(o),s}function r(t,e){t(function(n){e(t,n)})}t.scheduleRecursive=function(t){return this.scheduleRecursiveWithState(t,r)},t.scheduleRecursiveWithState=function(t,n){return this.scheduleWithState([t,n],e)},t.scheduleRecursiveWithRelative=function(t,e){return this.scheduleRecursiveWithRelativeAndState(e,t,r)},t.scheduleRecursiveWithRelativeAndState=function(t,e,r){return this._scheduleRelative([t,r],e,function(t,e){return n(t,e,"scheduleWithRelativeAndState")})},t.scheduleRecursiveWithAbsolute=function(t,e){return this.scheduleRecursiveWithAbsoluteAndState(e,t,r)},t.scheduleRecursiveWithAbsoluteAndState=function(t,e,r){return this._scheduleAbsolute([t,r],e,function(t,e){return n(t,e,"scheduleWithAbsoluteAndState")})}}(ye.prototype),function(t){ye.prototype.schedulePeriodic=function(t,e){return this.schedulePeriodicWithState(null,t,e)},ye.prototype.schedulePeriodicWithState=function(t,e,n){if("undefined"==typeof X.setInterval)throw new bt;e=be(e);var r=t,o=X.setInterval(function(){r=n(r)},e);return ae(function(){X.clearInterval(o)})}}(ye.prototype),function(t){t.catchError=t["catch"]=function(t){return new Ae(this,t)}}(ye.prototype);var ge,we,xe=(tt.internals.SchedulePeriodicRecursive=function(){function t(t,e){e(0,this._period);try{this._state=this._action(this._state)}catch(n){throw this._cancel.dispose(),n}}function e(t,e,n,r){this._scheduler=t,this._state=e,this._period=n,this._action=r}return e.prototype.start=function(){var e=new fe;return this._cancel=e,e.setDisposable(this._scheduler.scheduleRecursiveWithRelativeAndState(0,this._period,t.bind(this))),e},e}(),ye.immediate=function(){function t(t,e){return e(this,t)}return new ye(rt,t,wt,wt)}()),_e=ye.currentThread=function(){function t(){for(;n.length>0;){var t=n.dequeue();!t.isCancelled()&&t.invoke()}}function e(e,r){var o=new ve(this,e,r,this.now());if(n)n.enqueue(o);else{n=new re(4),n.enqueue(o);var i=x(t)();if(n=null,i===ne)return _(i.e)}return o.disposable}var n,r=new ye(rt,e,wt,wt);return r.scheduleRequired=function(){return!n},r}(),Se=function(){var t,e=et;if(X.setTimeout)t=X.setTimeout,e=X.clearTimeout;else{if(!X.WScript)throw new bt;t=function(t,e){X.WScript.Sleep(e),t()}}return{setTimeout:t,clearTimeout:e}}(),Ee=Se.setTimeout,Ce=Se.clearTimeout;!function(){function t(e){if(s)Ee(function(){t(e)},0);else{var n=i[e];if(n){s=!0;var r=x(n)();if(we(e),s=!1,r===ne)return _(r.e)}}}function n(){if(!X.postMessage||X.importScripts)return!1;var t=!1,e=X.onmessage;return X.onmessage=function(){t=!0},X.postMessage("","*"),X.onmessage=e,t}function r(e){"string"==typeof e.data&&e.data.substring(0,c.length)===c&&t(e.data.substring(c.length))}var o=1,i={},s=!1;we=function(t){delete i[t]};var u=RegExp("^"+String(Wt).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),a="function"==typeof(a=Z&&Y&&Z.setImmediate)&&!u.test(a)&&a;if(at(a))ge=function(e){var n=o++;return i[n]=e,a(function(){t(n)}),n};else if("undefined"!=typeof e&&"[object process]"==={}.toString.call(e))ge=function(n){var r=o++;return i[r]=n,e.nextTick(function(){t(r)}),r};else if(n()){var c="ms.rx.schedule"+Math.random();X.addEventListener?X.addEventListener("message",r,!1):X.attachEvent?X.attachEvent("onmessage",r):X.onmessage=r,ge=function(t){var e=o++;return i[e]=t,X.postMessage(c+currentId,"*"),e}}else if(X.MessageChannel){var p=new X.MessageChannel;p.port1.onmessage=function(e){t(e.data)},ge=function(t){var e=o++;return i[e]=t,p.port2.postMessage(e),e}}else ge="document"in X&&"onreadystatechange"in X.document.createElement("script")?function(e){var n=X.document.createElement("script"),r=o++;return i[r]=e,n.onreadystatechange=function(){t(r),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},X.document.documentElement.appendChild(n),r}:function(e){var n=o++;return i[n]=e,Ee(function(){t(n)},0),n}}();var Ae=(ye.timeout=ye["default"]=function(){function t(t,e){var n=this,r=new fe,o=ge(function(){!r.isDisposed&&r.setDisposable(e(n,t))});return new ie(r,ae(function(){we(o)}))}function e(t,e,n){var r=this,o=ye.normalize(e),i=new fe;if(0===o)return r.scheduleWithState(t,n);var s=Ee(function(){!i.isDisposed&&i.setDisposable(n(r,t))},o);return new ie(i,ae(function(){Ce(s)}))}function n(t,e,n){return this.scheduleWithRelativeAndState(t,e-this.now(),n)}return new ye(rt,t,e,n)}(),function(t){function e(t,e){return this._scheduler.scheduleWithState(t,this._wrap(e))}function n(t,e,n){return this._scheduler.scheduleWithRelativeAndState(t,e,this._wrap(n))}function r(t,e,n){return this._scheduler.scheduleWithAbsoluteAndState(t,e,this._wrap(n))}function o(o,i){this._scheduler=o,this._handler=i,this._recursiveOriginal=null,this._recursiveWrapper=null,t.call(this,this._scheduler.now.bind(this._scheduler),e,n,r)}return Zt(o,t),o.prototype._clone=function(t){return new o(t,this._handler)},o.prototype._wrap=function(t){var e=this;return function(n,r){try{return t(e._getRecursiveWrapper(n),r)}catch(o){if(!e._handler(o))throw o;return ce}}},o.prototype._getRecursiveWrapper=function(t){if(this._recursiveOriginal!==t){this._recursiveOriginal=t;var e=this._clone(t);e._recursiveOriginal=t,e._recursiveWrapper=e,this._recursiveWrapper=e}return this._recursiveWrapper},o.prototype.schedulePeriodicWithState=function(t,e,n){var r=this,o=!1,i=new fe;return i.setDisposable(this._scheduler.schedulePeriodicWithState(t,e,function(t){if(o)return null;try{return n(t)}catch(e){if(o=!0,!r._handler(e))throw e;return i.dispose(),null}})),i},o}(ye)),Ne=tt.Notification=function(){function t(t,e,n,r,o,i){this.kind=t,this.value=e,this.exception=n,this._accept=r,this._acceptObservable=o,this.toString=i}return t.prototype.accept=function(t,e,n){return t&&"object"==typeof t?this._acceptObservable(t):this._accept(t,e,n)},t.prototype.toObservable=function(t){var e=this;return me(t)||(t=xe),new qn(function(n){return t.scheduleWithState(e,function(t,e){e._acceptObservable(n),"N"===e.kind&&n.onCompleted()})})},t}(),ke=Ne.createOnNext=function(){function t(t){return t(this.value)}function e(t){return t.onNext(this.value)}function n(){return"OnNext("+this.value+")"}return function(r){return new Ne("N",r,null,t,e,n)}}(),Oe=Ne.createOnError=function(){function t(t,e){return e(this.exception)}function e(t){return t.onError(this.exception)}function n(){return"OnError("+this.exception+")"}return function(r){return new Ne("E",null,r,t,e,n)}}(),Pe=Ne.createOnCompleted=function(){function t(t,e,n){return n()}function e(t){return t.onCompleted()}function n(){return"OnCompleted()"}return function(){return new Ne("C",null,null,t,e,n)}}(),je=tt.Observer=function(){};je.prototype.toNotifier=function(){var t=this;return function(e){return e.accept(t)}},je.prototype.asObserver=function(){return new Me(this.onNext.bind(this),this.onError.bind(this),this.onCompleted.bind(this))},je.prototype.checked=function(){return new Te(this)};var De=je.create=function(t,e,n){return t||(t=et),e||(e=st),n||(n=et),new Me(t,e,n)};je.fromNotifier=function(t,e){return new Me(function(n){return t.call(e,ke(n))},function(n){return t.call(e,Oe(n))},function(){return t.call(e,Pe())})},je.prototype.notifyOn=function(t){return new $e(t,this)},je.prototype.makeSafe=function(t){return new AnonymousSafeObserver(this._onNext,this._onError,this._onCompleted,t)};var qe,Re=tt.internals.AbstractObserver=function(t){function e(){this.isStopped=!1,t.call(this)}return Zt(e,t),e.prototype.next=gt,e.prototype.error=gt,e.prototype.completed=gt,e.prototype.onNext=function(t){this.isStopped||this.next(t)},e.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.error(t))},e.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.completed())},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.error(t),!0)},e}(je),Me=tt.AnonymousObserver=function(t){function e(e,n,r){t.call(this),this._onNext=e,this._onError=n,this._onCompleted=r}return Zt(e,t),e.prototype.next=function(t){this._onNext(t)},e.prototype.error=function(t){this._onError(t)},e.prototype.completed=function(){this._onCompleted()},e}(Re),Te=function(t){function e(e){t.call(this),this._observer=e,this._state=0}Zt(e,t);var n=e.prototype;return n.onNext=function(t){this.checkAccess();var e=x(this._observer.onNext).call(this._observer,t);this._state=0,e===ne&&_(e.e)},n.onError=function(t){this.checkAccess();var e=x(this._observer.onError).call(this._observer,t);this._state=2,e===ne&&_(e.e)},n.onCompleted=function(){this.checkAccess();var t=x(this._observer.onCompleted).call(this._observer);this._state=2,t===ne&&_(t.e)},n.checkAccess=function(){if(1===this._state)throw new Error("Re-entrancy detected");if(2===this._state)throw new Error("Observer completed");0===this._state&&(this._state=1)},e}(je),Ve=tt.internals.ScheduledObserver=function(t){function e(e,n){t.call(this),this.scheduler=e,this.observer=n,this.isAcquired=!1,this.hasFaulted=!1,this.queue=[],this.disposable=new le}return Zt(e,t),e.prototype.next=function(t){var e=this;this.queue.push(function(){e.observer.onNext(t)})},e.prototype.error=function(t){var e=this;this.queue.push(function(){e.observer.onError(t)})},e.prototype.completed=function(){var t=this;this.queue.push(function(){t.observer.onCompleted()})},e.prototype.ensureActive=function(){var t=!1,e=this;!this.hasFaulted&&this.queue.length>0&&(t=!this.isAcquired,this.isAcquired=!0),t&&this.disposable.setDisposable(this.scheduler.scheduleRecursive(function(t){var n;if(!(e.queue.length>0))return void(e.isAcquired=!1);n=e.queue.shift();try{n()}catch(r){throw e.queue=[],e.hasFaulted=!0,r}t()}))},e.prototype.dispose=function(){t.prototype.dispose.call(this),this.disposable.dispose()},e}(Re),$e=function(t){function e(e,n,r){t.call(this,e,n),this._cancel=r}return Zt(e,t),e.prototype.next=function(e){t.prototype.next.call(this,e),this.ensureActive()},e.prototype.error=function(e){t.prototype.error.call(this,e),this.ensureActive()},e.prototype.completed=function(){t.prototype.completed.call(this),this.ensureActive()},e.prototype.dispose=function(){t.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},e}(Ve),We=tt.Observable=function(){function t(t){if(tt.config.longStackSupport&&ct){try{throw new Error}catch(e){this.stack=e.stack.substring(e.stack.indexOf("\n")+1)}var n=this;this._subscribe=function(e){var r=e.onError.bind(e);return e.onError=function(t){a(t,n),r(t)},t.call(n,e)}}else this._subscribe=t}return qe=t.prototype,qe.subscribe=qe.forEach=function(t,e,n){return this._subscribe("object"==typeof t?t:De(t,e,n))},qe.subscribeOnNext=function(t,e){return this._subscribe(De("undefined"!=typeof e?function(n){t.call(e,n)}:t))},qe.subscribeOnError=function(t,e){return this._subscribe(De(null,"undefined"!=typeof e?function(n){t.call(e,n)}:t))},qe.subscribeOnCompleted=function(t,e){return this._subscribe(De(null,null,"undefined"!=typeof e?function(){t.call(e)}:t))},t}(),ze=tt.ObservableBase=function(t){function e(t){return t&&at(t.dispose)?t:at(t)?ae(t):ce}function n(t,n){var r=n[0],o=n[1],i=x(o.subscribeCore).call(o,r);return i!==ne||r.fail(ne.e)?void r.setDisposable(e(i)):_(ne.e)}function r(t){var e=new Rn(t),r=[e,this];return _e.scheduleRequired()?_e.scheduleWithState(r,n):n(null,r),e}function o(){t.call(this,r)}return Zt(o,t),o.prototype.subscribeCore=gt,o}(We),Ge=tt.internals.Enumerable=function(){},Je=function(t){function e(e){this.sources=e,t.call(this)}function n(t,e,n){this.o=t,this.s=e,this.e=n,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){var e,r=new le,o=xe.scheduleRecursiveWithState(this.sources[xt](),function(o,i){if(!e){var s=x(o.next).call(o);if(s===ne)return t.onError(s.e);if(s.done)return t.onCompleted();var u=s.value;ut(u)&&(u=Xe(u));var a=new fe;r.setDisposable(a),a.setDisposable(u.subscribe(new n(t,i,o)))}});return new ie(r,o,ae(function(){e=!0}))},n.prototype.onNext=function(t){this.isStopped||this.o.onNext(t)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.s(this.e))},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);Ge.prototype.concat=function(){return new Je(this)};var Ie=function(t){function e(e){this.sources=e,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e,n=this.sources[xt](),r=new le,o=xe.scheduleRecursiveWithState(null,function(o,i){if(!e){var s=x(n.next).call(n);if(s===ne)return t.onError(s.e);if(s.done)return null!==o?t.onError(o):t.onCompleted();var u=s.value;ut(u)&&(u=Xe(u));var a=new fe;r.setDisposable(a),a.setDisposable(u.subscribe(function(e){t.onNext(e)},i,function(){t.onCompleted()}))}});return new ie(r,o,ae(function(){e=!0}))},e}(ze);Ge.prototype.catchError=function(){return new Ie(this)},Ge.prototype.catchErrorWhen=function(t){var e=this;return new qn(function(n){var r,o,i=new Tn,s=new Tn,u=t(i),a=u.subscribe(s),c=e[xt](),p=new le,h=xe.scheduleRecursive(function(t){if(!r){var e=x(c.next).call(c);if(e===ne)return n.onError(e.e);if(e.done)return void(o?n.onError(o):n.onCompleted());var u=e.value;ut(u)&&(u=Xe(u));var a=new fe,h=new fe;p.setDisposable(new ie(h,a)),a.setDisposable(u.subscribe(function(t){n.onNext(t)},function(e){h.setDisposable(s.subscribe(t,function(t){n.onError(t)},function(){n.onCompleted()})),i.onNext(e)},function(){n.onCompleted()}))}});return new ie(a,p,h,ae(function(){r=!0}))})};var Le=function(t){function e(t,e){this.v=t,this.c=null==e?-1:e}function n(t){this.v=t.v,this.l=t.c}return Zt(e,t),e.prototype[xt]=function(){return new n(this)},n.prototype.next=function(){return 0===this.l?_t:(this.l>0&&this.l--,{done:!1,value:this.v})},e}(Ge),Be=Ge.repeat=function(t,e){return new Le(t,e)},Fe=function(t){function e(t,e,n){this.s=t,this.fn=e?At(e,n,3):null}function n(t){this.i=-1,this.s=t.s,this.l=this.s.length,this.fn=t.fn}return Zt(e,t),e.prototype[xt]=function(){return new n(this)},n.prototype.next=function(){return++this.i<this.l?{done:!1,value:this.fn?this.fn(this.s[this.i],this.i,this.s):this.s[this.i]}:_t},e}(Ge),Ue=Ge.of=function(t,e,n){return new Fe(t,e,n)};qe.observeOn=function(t){var e=this;return new qn(function(n){return e.subscribe(new $e(t,n))},e)},qe.subscribeOn=function(t){var e=this;return new qn(function(n){var r=new fe,o=new le;return o.setDisposable(r),r.setDisposable(t.schedule(function(){o.setDisposable(new E(t,e.subscribe(n)))})),o},e)};var He=function(t){function e(e){this.p=e,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.p.then(function(e){t.onNext(e),t.onCompleted()},function(e){t.onError(e)}),ce},e}(ze),Xe=We.fromPromise=function(t){return new He(t)};qe.toPromise=function(t){if(t||(t=tt.config.Promise),!t)throw new bt("Promise type not provided nor in Rx.config.Promise");var e=this;return new t(function(t,n){var r,o=!1;e.subscribe(function(t){r=t,o=!0},n,function(){o&&t(r)})})};var Qe=function(t){function e(e){this.source=e,t.call(this)}function n(t){this.o=t,this.a=[],this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t))},n.prototype.onNext=function(t){this.isStopped||this.a.push(t)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onNext(this.a),this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.toArray=function(){return new Qe(this)},We.create=We.createWithDisposable=function(t,e){return new qn(t,e)};var Ke=(We.defer=function(t){return new qn(function(e){var n;try{n=t()}catch(r){return dn(r).subscribe(e)}return ut(n)&&(n=Xe(n)),n.subscribe(e)})},function(t){function e(e){this.scheduler=e,t.call(this)}function n(t,e){this.observer=t,this.parent=e}function r(t,e){e.onCompleted()}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(t,this);return e.run()},n.prototype.run=function(){return this.parent.scheduler.scheduleWithState(this.observer,r)},e}(ze)),Ye=We.empty=function(t){return me(t)||(t=xe),new Ke(t)},Ze=function(t){function e(e,n,r){this.iterable=e,this.mapper=n,this.scheduler=r,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new tn(t,this);return e.run()},e}(ze),tn=function(){function t(t,e){this.observer=t,this.parent=e}return t.prototype.run=function(){function t(t,e){try{var i=n.next()}catch(s){return r.onError(s)}if(i.done)return r.onCompleted();var u=i.value;if(o)try{u=o(u,t)}catch(s){return r.onError(s)}r.onNext(u),e(t+1)}var e=Object(this.parent.iterable),n=j(e),r=this.observer,o=this.parent.mapper;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},t}(),en=Math.pow(2,53)-1;A.prototype[xt]=function(){return new N(this._s)},N.prototype[xt]=function(){return this},N.prototype.next=function(){return this._i<this._l?{done:!1,value:this._s.charAt(this._i++)}:_t},k.prototype[xt]=function(){return new O(this._a)},O.prototype[xt]=function(){return this},O.prototype.next=function(){return this._i<this._l?{done:!1,value:this._a[this._i++]}:_t};var nn=We.from=function(t,e,n,r){if(null==t)throw new Error("iterable cannot be null.");if(e&&!at(e))throw new Error("mapFn when provided must be a function");if(e)var o=At(e,n,2);return me(r)||(r=_e),new Ze(t,o,r)},rn=function(t){function e(e,n){this.args=e,this.scheduler=n,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new R(t,this);return e.run()},e}(ze);R.prototype.run=function(){function t(t,o){r>t?(e.onNext(n[t]),o(t+1)):e.onCompleted()}var e=this.observer,n=this.parent.args,r=n.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)};var on=We.fromArray=function(t,e){return me(e)||(e=_e),new rn(t,e)};We.generate=function(t,e,n,r,o){return me(o)||(o=_e),new qn(function(i){var s=!0;return o.scheduleRecursiveWithState(t,function(t,o){var u,a;try{s?s=!1:t=n(t),u=e(t),u&&(a=r(t))}catch(c){return i.onError(c)}u?(i.onNext(a),o(t)):i.onCompleted()})})};var sn=function(t){function e(){t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){return ce},e}(ze),un=We.never=function(){return new sn};We.of=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];return new rn(e,_e)},We.ofWithScheduler=function(t){for(var e=arguments.length,n=new Array(e-1),r=1;e>r;r++)n[r-1]=arguments[r];return new rn(n,t)};var an=function(t){function e(e,n){this.obj=e,this.keys=Object.keys(e),this.scheduler=n,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new T(t,this);return e.run()},e}(ze);T.prototype.run=function(){function t(t,i){if(o>t){var s=r[t];e.onNext([s,n[s]]),i(t+1)}else e.onCompleted()}var e=this.observer,n=this.parent.obj,r=this.parent.keys,o=r.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},We.pairs=function(t,e){return e||(e=_e),new an(t,e)};var cn=function(t){function e(e,n,r){this.start=e,this.rangeCount=n,this.scheduler=r,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new pn(t,this);return e.run()},e}(ze),pn=function(){function t(t,e){this.observer=t,this.parent=e}return t.prototype.run=function(){function t(t,o){n>t?(r.onNext(e+t),o(t+1)):r.onCompleted()}var e=this.parent.start,n=this.parent.rangeCount,r=this.observer;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},t}();We.range=function(t,e,n){return me(n)||(n=_e),new cn(t,e,n)};var hn=function(t){function e(e,n,r){this.value=e,this.repeatCount=null==n?-1:n,this.scheduler=r,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new V(t,this);return e.run()},e}(ze);V.prototype.run=function(){function t(t,r){return(-1===t||t>0)&&(e.onNext(n),t>0&&t--),0===t?e.onCompleted():void r(t)}var e=this.observer,n=this.parent.value;return this.parent.scheduler.scheduleRecursiveWithState(this.parent.repeatCount,t)},We.repeat=function(t,e,n){return me(n)||(n=_e),new hn(t,e,n)};var fn=function(t){function e(e,n){this.value=e,this.scheduler=n,t.call(this)}function n(t,e){this.observer=t,this.parent=e}function r(t,e){var n=e[0],r=e[1];r.onNext(n),r.onCompleted()}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(t,this);return e.run()},n.prototype.run=function(){return this.parent.scheduler.scheduleWithState([this.parent.value,this.observer],r)},e}(ze),ln=(We["return"]=We.just=We.returnValue=function(t,e){return me(e)||(e=xe),new fn(t,e)},function(t){function e(e,n){this.error=e,this.scheduler=n,t.call(this)}function n(t,e){this.o=t,this.p=e}function r(t,e){var n=e[0],r=e[1];r.onError(n)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(t,this);return e.run()},n.prototype.run=function(){return this.p.scheduler.scheduleWithState([this.p.error,this.o],r)},e}(ze)),dn=We["throw"]=We.throwError=We.throwException=function(t,e){return me(e)||(e=xe),new ln(t,e)};We.using=function(t,e){return new qn(function(n){var r,o,i=ce;try{r=t(),r&&(i=r),o=e(r)}catch(s){return new ie(dn(s).subscribe(n),i)}return new ie(o.subscribe(n),i)})},qe.amb=function(t){var e=this;return new qn(function(n){function r(){i||(i=s,c.dispose())}function o(){i||(i=u,a.dispose())}var i,s="L",u="R",a=new fe,c=new fe;return ut(t)&&(t=Xe(t)),a.setDisposable(e.subscribe(function(t){r(),i===s&&n.onNext(t)},function(t){r(),i===s&&n.onError(t)},function(){r(),i===s&&n.onCompleted()})),c.setDisposable(t.subscribe(function(t){o(),i===u&&n.onNext(t)},function(t){o(),i===u&&n.onError(t)},function(){o(),i===u&&n.onCompleted()})),new ie(a,c)})},We.amb=function(){function t(t,e){return t.amb(e)}var e=un(),n=[];if(Array.isArray(arguments[0]))n=arguments[0];else for(var r=0,o=arguments.length;o>r;r++)n.push(arguments[r]);for(var r=0,o=n.length;o>r;r++)e=t(e,n[r]);return e},qe["catch"]=qe.catchError=qe.catchException=function(t){return"function"==typeof t?$(this,t):vn([this,t])};var vn=We.catchError=We["catch"]=We.catchException=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return Ue(t).catchError()};qe.combineLatest=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];return Array.isArray(e[0])?e[0].unshift(this):e.unshift(this),yn.apply(this,e)};var yn=We.combineLatest=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=e.pop();return Array.isArray(e[0])&&(e=e[0]),new qn(function(t){function n(e){if(u[e]=!0,a||(a=u.every(nt))){try{var n=r.apply(null,p)}catch(o){return t.onError(o)}t.onNext(n)}else c.filter(function(t,n){return n!==e}).every(nt)&&t.onCompleted()}function o(e){c[e]=!0,c.every(nt)&&t.onCompleted()}for(var i=e.length,s=function(){return!1},u=g(i,s),a=!1,c=g(i,s),p=new Array(i),h=new Array(i),f=0;i>f;f++)!function(r){var i=e[r],s=new fe;ut(i)&&(i=Xe(i)),s.setDisposable(i.subscribe(function(t){p[r]=t,n(r)},function(e){t.onError(e)},function(){o(r)})),h[r]=s}(f);return new ie(h)},this)};qe.concat=function(){for(var t=[],e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return t.unshift(this),mn.apply(null,t)};var bn=function(t){function e(e){this.sources=e,t.call(this)}function n(t,e){this.sources=t,this.o=e}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(this.sources,t);return e.run()},n.prototype.run=function(){var t,e=new le,n=this.sources,r=n.length,o=this.o,i=xe.scheduleRecursiveWithState(0,function(i,s){if(!t){if(i===r)return o.onCompleted();var u=n[i];ut(u)&&(u=Xe(u));var a=new fe;e.setDisposable(a),a.setDisposable(u.subscribe(function(t){o.onNext(t)},function(t){o.onError(t)},function(){s(i+1)}))}});return new ie(e,i,ae(function(){t=!0}))},e}(ze),mn=We.concat=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{t=new Array(arguments.length);for(var e=0,n=arguments.length;n>e;e++)t[e]=arguments[e]}return new bn(t)};qe.concatAll=qe.concatObservable=function(){return this.merge(1)};var gn=function(t){function e(e,n){this.source=e,this.maxConcurrent=n,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new ie;return e.add(this.source.subscribe(new wn(t,this.maxConcurrent,e))),e},e}(ze),wn=function(){function t(t,e,n){this.o=t,this.max=e,this.g=n,this.done=!1,this.q=[],this.activeCount=0,this.isStopped=!1}function e(t,e){this.parent=t,this.sad=e,this.isStopped=!1}return t.prototype.handleSubscribe=function(t){var n=new fe;this.g.add(n),ut(t)&&(t=Xe(t)),n.setDisposable(t.subscribe(new e(this,n)))},t.prototype.onNext=function(t){this.isStopped||(this.activeCount<this.max?(this.activeCount++,this.handleSubscribe(t)):this.q.push(t))},t.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,0===this.activeCount&&this.o.onCompleted())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e.prototype.onNext=function(t){this.isStopped||this.parent.o.onNext(t)},e.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.o.onError(t))},e.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var t=this.parent;t.g.remove(this.sad),t.q.length>0?t.handleSubscribe(t.q.shift()):(t.activeCount--,t.done&&0===t.activeCount&&t.o.onCompleted())}},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(t),!0)},t}();qe.merge=function(t){return"number"!=typeof t?xn(this,t):new gn(this,t)};var xn=We.merge=function(){var t,e,n=[],r=arguments.length;if(arguments[0])if(me(arguments[0]))for(t=arguments[0],e=1;r>e;e++)n.push(arguments[e]);else for(t=xe,e=0;r>e;e++)n.push(arguments[e]);else for(t=xe,e=1;r>e;e++)n.push(arguments[e]);return Array.isArray(n[0])&&(n=n[0]),M(t,n).mergeAll()},_n=tt.CompositeError=function(t){this.name="NotImplementedError",this.innerErrors=t,this.message="This contains multiple errors. Check the innerErrors",Error.call(this)};_n.prototype=Error.prototype,We.mergeDelayError=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var n=0;e>n;n++)t[n]=arguments[n]}var r=M(null,t);return new qn(function(t){function e(){0===s.length?t.onCompleted():1===s.length?t.onError(s[0]):t.onError(new _n(s))}var n=new ie,o=new fe,i=!1,s=[];return n.add(o),o.setDisposable(r.subscribe(function(r){var o=new fe;n.add(o),ut(r)&&(r=Xe(r)),o.setDisposable(r.subscribe(function(e){t.onNext(e)},function(t){s.push(t),n.remove(o),i&&1===n.length&&e()},function(){n.remove(o),i&&1===n.length&&e()}))},function(t){s.push(t),i=!0,1===n.length&&e()},function(){i=!0,1===n.length&&e()})),n})};var Sn=function(t){function e(e){this.source=e,t.call(this)}function n(t,e){this.o=t,this.g=e,this.isStopped=!1,this.done=!1}function r(t,e,n){this.parent=t,this.g=e,this.sad=n,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new ie,r=new fe;return e.add(r),r.setDisposable(this.source.subscribe(new n(t,e))),e},n.prototype.onNext=function(t){if(!this.isStopped){var e=new fe;this.g.add(e),ut(t)&&(t=Xe(t)),e.setDisposable(t.subscribe(new r(this,this.g,e)))}},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,1===this.g.length&&this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},r.prototype.onNext=function(t){this.isStopped||this.parent.o.onNext(t)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.o.onError(t))},r.prototype.onCompleted=function(){if(!this.isStopped){var t=this.parent;this.isStopped=!0,t.g.remove(this.sad),t.done&&1===t.g.length&&t.o.onCompleted()}},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(t),!0)},e}(ze);qe.mergeAll=qe.mergeObservable=function(){
3276 return new Sn(this)},qe.onErrorResumeNext=function(t){if(!t)throw new Error("Second observable is required");return En([this,t])};var En=We.onErrorResumeNext=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return new qn(function(e){var n=0,r=new le,o=xe.scheduleRecursive(function(o){var i,s;n<t.length?(i=t[n++],ut(i)&&(i=Xe(i)),s=new fe,r.setDisposable(s),s.setDisposable(i.subscribe(e.onNext.bind(e),o,o))):e.onCompleted()});return new ie(r,o)})};qe.skipUntil=function(t){var e=this;return new qn(function(n){var r=!1,o=new ie(e.subscribe(function(t){r&&n.onNext(t)},function(t){n.onError(t)},function(){r&&n.onCompleted()}));ut(t)&&(t=Xe(t));var i=new fe;return o.add(i),i.setDisposable(t.subscribe(function(){r=!0,i.dispose()},function(t){n.onError(t)},function(){i.dispose()})),o},e)};var Cn=function(t){function e(e){this.source=e,t.call(this)}function n(t,e){this.o=t,this.inner=e,this.stopped=!1,this.latest=0,this.hasLatest=!1,this.isStopped=!1}function r(t,e){this.parent=t,this.id=e,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new le,r=this.source.subscribe(new n(t,e));return new ie(r,e)},n.prototype.onNext=function(t){if(!this.isStopped){var e=new fe,n=++this.latest;this.hasLatest=!0,this.inner.setDisposable(e),ut(t)&&(t=Xe(t)),e.setDisposable(t.subscribe(new r(this,n)))}},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.stopped=!0,!this.hasLatest&&this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},r.prototype.onNext=function(t){this.isStopped||this.parent.latest===this.id&&this.parent.o.onNext(t)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&this.parent.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&(this.parent.hasLatest=!1,this.parent.isStopped&&this.parent.o.onCompleted()))},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(t),!0)},e}(ze);qe["switch"]=qe.switchLatest=function(){return new Cn(this)};var An=function(t){function e(e,n){this.source=e,this.other=ut(n)?Xe(n):n,t.call(this)}function n(t){this.o=t,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return new ie(this.source.subscribe(t),this.other.subscribe(new n(t)))},n.prototype.onNext=function(t){this.isStopped||this.o.onCompleted()},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){!this.isStopped&&(this.isStopped=!0)},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.takeUntil=function(t){return new An(this,t)},qe.withLatestFrom=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=e.pop(),o=this;return Array.isArray(e[0])&&(e=e[0]),new qn(function(t){for(var n=e.length,i=g(n,W),s=!1,u=new Array(n),a=new Array(n+1),c=0;n>c;c++)!function(n){var r=e[n],o=new fe;ut(r)&&(r=Xe(r)),o.setDisposable(r.subscribe(function(t){u[n]=t,i[n]=!0,s=i.every(nt)},function(e){t.onError(e)},et)),a[n]=o}(c);var p=new fe;return p.setDisposable(o.subscribe(function(e){var n=[e].concat(u);if(s){var o=x(r).apply(null,n);return o===ne?t.onError(o.e):void t.onNext(o)}},function(e){t.onError(e)},function(){t.onCompleted()})),a[n]=p,new ie(a)},this)},qe.zip=function(){if(Array.isArray(arguments[0]))return z.apply(this,arguments);for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=this,o=e.pop();return e.unshift(r),new qn(function(t){for(var n=e.length,i=g(n,G),s=g(n,W),u=new Array(n),a=0;n>a;a++)!function(n){var a=e[n],c=new fe;ut(a)&&(a=Xe(a)),c.setDisposable(a.subscribe(function(e){if(i[n].push(e),i.every(function(t){return t.length>0})){var u=i.map(function(t){return t.shift()}),a=x(o).apply(r,u);if(a===ne)return t.onError(a.e);t.onNext(a)}else s.filter(function(t,e){return e!==n}).every(nt)&&t.onCompleted()},function(e){t.onError(e)},function(){s[n]=!0,s.every(nt)&&t.onCompleted()})),u[n]=c}(a);return new ie(u)},r)},We.zip=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=e.shift();return r.zip.apply(r,e)},We.zipArray=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var n=0;e>n;n++)t[n]=arguments[n]}return new qn(function(e){for(var n=t.length,r=g(n,J),o=g(n,W),i=new Array(n),s=0;n>s;s++)!function(n){i[n]=new fe,i[n].setDisposable(t[n].subscribe(function(t){if(r[n].push(t),r.every(function(t){return t.length>0})){var i=r.map(function(t){return t.shift()});e.onNext(i)}else if(o.filter(function(t,e){return e!==n}).every(nt))return e.onCompleted()},function(t){e.onError(t)},function(){o[n]=!0,o.every(nt)&&e.onCompleted()}))}(s);return new ie(i)})},qe.asObservable=function(){var t=this;return new qn(function(e){return t.subscribe(e)},t)},qe.bufferWithCount=function(t,e){return"number"!=typeof e&&(e=t),this.windowWithCount(t,e).selectMany(function(t){return t.toArray()}).where(function(t){return t.length>0})},qe.dematerialize=function(){var t=this;return new qn(function(e){return t.subscribe(function(t){return t.accept(e)},function(t){e.onError(t)},function(){e.onCompleted()})},this)},qe.distinctUntilChanged=function(t,e){var n=this;return e||(e=ot),new qn(function(r){var o,i=!1;return n.subscribe(function(n){var s=n;if(t&&(s=x(t)(n),s===ne))return r.onError(s.e);if(i){var u=x(e)(o,s);if(u===ne)return r.onError(u.e)}i&&u||(i=!0,o=s,r.onNext(n))},function(t){r.onError(t)},function(){r.onCompleted()})},this)};var Nn=function(t){function e(e,n,r,o){this.source=e,this.t=!n||at(n)?De(n||et,r||et,o||et):n,t.call(this)}function n(t,e){this.o=t,this.t=e,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.t))},n.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.t.onNext).call(this.t,t);e===ne&&this.o.onError(e.e),this.o.onNext(t)}},n.prototype.onError=function(t){if(!this.isStopped){this.isStopped=!0;var e=x(this.t.onError).call(this.t,t);if(e===ne)return this.o.onError(e.e);this.o.onError(t)}},n.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var t=x(this.t.onCompleted).call(this.t);if(t===ne)return this.o.onError(t.e);this.o.onCompleted()}},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe["do"]=qe.tap=qe.doAction=function(t,e,n){return new Nn(this,t,e,n)},qe.doOnNext=qe.tapOnNext=function(t,e){return this.tap("undefined"!=typeof e?function(n){t.call(e,n)}:t)},qe.doOnError=qe.tapOnError=function(t,e){return this.tap(et,"undefined"!=typeof e?function(n){t.call(e,n)}:t)},qe.doOnCompleted=qe.tapOnCompleted=function(t,e){return this.tap(et,null,"undefined"!=typeof e?function(){t.call(e)}:t)},qe["finally"]=qe.ensure=function(t){var e=this;return new qn(function(n){var r;try{r=e.subscribe(n)}catch(o){throw t(),o}return ae(function(){try{r.dispose()}catch(e){throw e}finally{t()}})},this)},qe.finallyAction=function(t){return this.ensure(t)};var kn=function(t){function e(e){this.source=e,t.call(this)}function n(t){this.o=t,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t))},n.prototype.onNext=et,n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(t),!0)},e}(ze);qe.ignoreElements=function(){return new kn(this)},qe.materialize=function(){var t=this;return new qn(function(e){return t.subscribe(function(t){e.onNext(ke(t))},function(t){e.onNext(Oe(t)),e.onCompleted()},function(){e.onNext(Pe()),e.onCompleted()})},t)},qe.repeat=function(t){return Be(this,t).concat()},qe.retry=function(t){return Be(this,t).catchError()},qe.retryWhen=function(t){return Be(this).catchErrorWhen(t)};var On=function(t){function e(e,n,r,o){this.source=e,this.accumulator=n,this.hasSeed=r,this.seed=o,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new I(t,this))},e}(ze);I.prototype.onNext=function(t){if(!this.isStopped){!this.hasValue&&(this.hasValue=!0);try{this.hasAccumulation?this.accumulation=this.accumulator(this.accumulation,t):(this.accumulation=this.hasSeed?this.accumulator(this.seed,t):t,this.hasAccumulation=!0)}catch(e){return this.observer.onError(e)}this.observer.onNext(this.accumulation)}},I.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.observer.onError(t))},I.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,!this.hasValue&&this.hasSeed&&this.observer.onNext(this.seed),this.observer.onCompleted())},I.prototype.dispose=function(){this.isStopped=!0},I.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(t),!0)},qe.scan=function(){var t,e,n=!1;return 2===arguments.length?(n=!0,t=arguments[0],e=arguments[1]):e=arguments[0],new On(this,e,n,t)},qe.skipLast=function(t){if(0>t)throw new yt;var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&n.onNext(r.shift())},function(t){n.onError(t)},function(){n.onCompleted()})},e)},qe.startWith=function(){var t,e=0;arguments.length&&me(arguments[0])?(t=arguments[0],e=1):t=xe;for(var n=[],r=e,o=arguments.length;o>r;r++)n.push(arguments[r]);return Ue([on(n,t),this]).concat()},qe.takeLast=function(t){if(0>t)throw new yt;var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&r.shift()},function(t){n.onError(t)},function(){for(;r.length>0;)n.onNext(r.shift());n.onCompleted()})},e)},qe.takeLastBuffer=function(t){var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&r.shift()},function(t){n.onError(t)},function(){n.onNext(r),n.onCompleted()})},e)},qe.windowWithCount=function(t,e){var n=this;if(+t||(t=0),Math.abs(t)===1/0&&(t=0),0>=t)throw new yt;if(null==e&&(e=t),+e||(e=0),Math.abs(e)===1/0&&(e=0),0>=e)throw new yt;return new qn(function(r){function o(){var t=new Tn;a.push(t),r.onNext(ee(t,s))}var i=new fe,s=new de(i),u=0,a=[];return o(),i.setDisposable(n.subscribe(function(n){for(var r=0,i=a.length;i>r;r++)a[r].onNext(n);var s=u-t+1;s>=0&&s%e===0&&a.shift().onCompleted(),++u%e===0&&o()},function(t){for(;a.length>0;)a.shift().onError(t);r.onError(t)},function(){for(;a.length>0;)a.shift().onCompleted();r.onCompleted()})),s},n)},qe.selectConcat=qe.concatMap=function(t,e,n){return at(t)&&at(e)?this.concatMap(function(n,r){var o=t(n,r);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o.map(function(t,o){return e(n,t,r,o)})}):at(t)?L(this,t,n):L(this,function(){return t})},qe.concatMapObserver=qe.selectConcatObserver=function(t,e,n,r){var o=this,i=At(t,r,2),s=At(e,r,1),u=At(n,r,0);return new qn(function(t){var e=0;return o.subscribe(function(n){var r;try{r=i(n,e++)}catch(o){return void t.onError(o)}ut(r)&&(r=Xe(r)),t.onNext(r)},function(e){var n;try{n=s(e)}catch(r){return void t.onError(r)}ut(n)&&(n=Xe(n)),t.onNext(n),t.onCompleted()},function(){var e;try{e=u()}catch(n){return void t.onError(n)}ut(e)&&(e=Xe(e)),t.onNext(e),t.onCompleted()})},this).concatAll()},qe.defaultIfEmpty=function(t){var e=this;return t===i&&(t=null),new qn(function(n){var r=!1;return e.subscribe(function(t){r=!0,n.onNext(t)},function(t){n.onError(t)},function(){!r&&n.onNext(t),n.onCompleted()})},e)},F.prototype.push=function(t){var e=-1===B(this.set,t,this.comparer);return e&&this.set.push(t),e},qe.distinct=function(t,e){var n=this;return e||(e=ot),new qn(function(r){var o=new F(e);return n.subscribe(function(e){var n=e;if(t)try{n=t(e)}catch(i){return void r.onError(i)}o.push(n)&&r.onNext(e)},function(t){r.onError(t)},function(){r.onCompleted()})},this)};var Pn=function(t){function e(e,n,r){this.source=e,this.selector=At(n,r,3),t.call(this)}function n(t,e){return function(n,r,o){return t.call(this,e.selector(n,r,o),r,o)}}function r(t,e,n){this.o=t,this.selector=e,this.source=n,this.i=0,this.isStopped=!1}return Zt(e,t),e.prototype.internalMap=function(t,r){return new e(this.source,n(t,this),r)},e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.selector,this))},r.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.selector)(t,this.i++,this.source);return e===ne?this.o.onError(e.e):void this.o.onNext(e)}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.map=qe.select=function(t,e){var n="function"==typeof t?t:function(){return t};return this instanceof Pn?this.internalMap(n,e):new Pn(this,n,e)},qe.pluck=function(){var t=arguments,e=arguments.length;if(0===e)throw new Error("List of properties cannot be empty.");return this.map(function(n){for(var r=n,o=0;e>o;o++){var s=r[t[o]];if("undefined"==typeof s)return i;r=s}return r})},qe.flatMapObserver=qe.selectManyObserver=function(t,e,n,r){var o=this;return new qn(function(i){var s=0;return o.subscribe(function(e){var n;try{n=t.call(r,e,s++)}catch(o){return void i.onError(o)}ut(n)&&(n=Xe(n)),i.onNext(n)},function(t){var n;try{n=e.call(r,t)}catch(o){return void i.onError(o)}ut(n)&&(n=Xe(n)),i.onNext(n),i.onCompleted()},function(){var t;try{t=n.call(r)}catch(e){return void i.onError(e)}ut(t)&&(t=Xe(t)),i.onNext(t),i.onCompleted()})},o).mergeAll()},qe.selectMany=qe.flatMap=function(t,e,n){return at(t)&&at(e)?this.flatMap(function(n,r){var o=t(n,r);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o.map(function(t,o){return e(n,t,r,o)})},n):at(t)?U(this,t,n):U(this,function(){return t})},qe.selectSwitch=qe.flatMapLatest=qe.switchMap=function(t,e){return this.select(t,e).switchLatest()};var jn=function(t){function e(e,n){this.source=e,this.skipCount=n,t.call(this)}function n(t,e){this.c=e,this.r=e,this.o=t,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.skipCount))},n.prototype.onNext=function(t){this.isStopped||(this.r<=0?this.o.onNext(t):this.r--)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.skip=function(t){if(0>t)throw new yt;return new jn(this,t)},qe.skipWhile=function(t,e){var n=this,r=At(t,e,3);return new qn(function(t){var e=0,o=!1;return n.subscribe(function(i){if(!o)try{o=!r(i,e++,n)}catch(s){return void t.onError(s)}o&&t.onNext(i)},function(e){t.onError(e)},function(){t.onCompleted()})},n)},qe.take=function(t,e){if(0>t)throw new yt;if(0===t)return Ye(e);var n=this;return new qn(function(e){var r=t;return n.subscribe(function(t){r-- >0&&(e.onNext(t),0>=r&&e.onCompleted())},function(t){e.onError(t)},function(){e.onCompleted()})},n)},qe.takeWhile=function(t,e){var n=this,r=At(t,e,3);return new qn(function(t){var e=0,o=!0;return n.subscribe(function(i){if(o){try{o=r(i,e++,n)}catch(s){return void t.onError(s)}o?t.onNext(i):t.onCompleted()}},function(e){t.onError(e)},function(){t.onCompleted()})},n)};var Dn=function(t){function e(e,n,r){this.source=e,this.predicate=At(n,r,3),t.call(this)}function n(t,e){return function(n,r,o){return e.predicate(n,r,o)&&t.call(this,n,r,o)}}function r(t,e,n){this.o=t,this.predicate=e,this.source=n,this.i=0,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.predicate,this))},e.prototype.internalFilter=function(t,r){return new e(this.source,n(t,this),r)},r.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.predicate)(t,this.i++,this.source);return e===ne?this.o.onError(e.e):void(e&&this.o.onNext(t))}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.filter=qe.where=function(t,e){return this instanceof Dn?this.internalFilter(t,e):new Dn(this,t,e)},qe.transduce=function(t){function e(t){return{"@@transducer/init":function(){return t},"@@transducer/step":function(t,e){return t.onNext(e)},"@@transducer/result":function(t){return t.onCompleted()}}}var n=this;return new qn(function(r){var o=t(e(r));return n.subscribe(function(t){try{o["@@transducer/step"](r,t)}catch(e){r.onError(e)}},function(t){r.onError(t)},function(){o["@@transducer/result"](r)})},n)};var qn=tt.AnonymousObservable=function(t){function e(t){return t&&at(t.dispose)?t:at(t)?ae(t):ce}function n(t,n){var r=n[0],o=n[1],i=x(o)(r);return i!==ne||r.fail(ne.e)?void r.setDisposable(e(i)):_(ne.e)}function r(e,r){function o(t){var r=new Rn(t),o=[r,e];return _e.scheduleRequired()?_e.scheduleWithState(o,n):n(null,o),r}this.source=r,t.call(this,o)}return Zt(r,t),r}(We),Rn=function(t){function e(e){t.call(this),this.observer=e,this.m=new fe}Zt(e,t);var n=e.prototype;return n.next=function(t){var e=x(this.observer.onNext).call(this.observer,t);e===ne&&(this.dispose(),_(e.e))},n.error=function(t){var e=x(this.observer.onError).call(this.observer,t);this.dispose(),e===ne&&_(e.e)},n.completed=function(){var t=x(this.observer.onCompleted).call(this.observer);this.dispose(),t===ne&&_(t.e)},n.setDisposable=function(t){this.m.setDisposable(t)},n.getDisposable=function(){return this.m.getDisposable()},n.dispose=function(){t.prototype.dispose.call(this),this.m.dispose()},e}(Re),Mn=function(t,e){this.subject=t,this.observer=e};Mn.prototype.dispose=function(){if(!this.subject.isDisposed&&null!==this.observer){var t=this.subject.observers.indexOf(this.observer);this.subject.observers.splice(t,1),this.observer=null}};var Tn=tt.Subject=function(t){function e(t){return he(this),this.isStopped?this.hasError?(t.onError(this.error),ce):(t.onCompleted(),ce):(this.observers.push(t),new Mn(this,t))}function n(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.observers=[],this.hasError=!1}return Zt(n,t),te(n.prototype,je.prototype,{hasObservers:function(){return this.observers.length>0},onCompleted:function(){if(he(this),!this.isStopped){this.isStopped=!0;for(var t=0,e=u(this.observers),n=e.length;n>t;t++)e[t].onCompleted();this.observers.length=0}},onError:function(t){if(he(this),!this.isStopped){this.isStopped=!0,this.error=t,this.hasError=!0;for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onError(t);this.observers.length=0}},onNext:function(t){if(he(this),!this.isStopped)for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onNext(t)},dispose:function(){this.isDisposed=!0,this.observers=null}}),n.create=function(t,e){return new Vn(t,e)},n}(We),Vn=(tt.AsyncSubject=function(t){function e(t){return he(this),this.isStopped?(this.hasError?t.onError(this.error):this.hasValue?(t.onNext(this.value),t.onCompleted()):t.onCompleted(),ce):(this.observers.push(t),new Mn(this,t))}function n(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.hasValue=!1,this.observers=[],this.hasError=!1}return Zt(n,t),te(n.prototype,je,{hasObservers:function(){return he(this),this.observers.length>0},onCompleted:function(){var t,e;if(he(this),!this.isStopped){this.isStopped=!0;var n=u(this.observers),e=n.length;if(this.hasValue)for(t=0;e>t;t++){var r=n[t];r.onNext(this.value),r.onCompleted()}else for(t=0;e>t;t++)n[t].onCompleted();this.observers.length=0}},onError:function(t){if(he(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=t;for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onError(t);this.observers.length=0}},onNext:function(t){he(this),this.isStopped||(this.value=t,this.hasValue=!0)},dispose:function(){this.isDisposed=!0,this.observers=null,this.exception=null,this.value=null}}),n}(We),tt.AnonymousSubject=function(t){function e(t){return this.observable.subscribe(t)}function n(n,r){this.observer=n,this.observable=r,t.call(this,e)}return Zt(n,t),te(n.prototype,je.prototype,{onCompleted:function(){this.observer.onCompleted()},onError:function(t){this.observer.onError(t)},onNext:function(t){this.observer.onNext(t)}}),n}(We));"function"==typeof t&&"object"==typeof t.amd&&t.amd?(X.Rx=tt,t(function(){return tt})):Q&&K?Y?(K.exports=tt).Rx=tt:Q.Rx=tt:X.Rx=tt;var $n=f()}).call(this)}).call(this,e(150),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{150:150}]},{},[1])(1)});
3277 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3279 },{}],14:[function(require,module,exports){
3281 var topLevel = typeof global !== 'undefined' ? global :
3282 typeof window !== 'undefined' ? window : {}
3283 var minDoc = require('min-document');
3285 if (typeof document !== 'undefined') {
3286 module.exports = document;
3288 var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
3291 doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
3294 module.exports = doccy;
3297 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3299 },{"min-document":2}],15:[function(require,module,exports){
3300 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
3302 var eLen = nBytes * 8 - mLen - 1
3303 var eMax = (1 << eLen) - 1
3304 var eBias = eMax >> 1
3306 var i = isLE ? (nBytes - 1) : 0
3307 var d = isLE ? -1 : 1
3308 var s = buffer[offset + i]
3312 e = s & ((1 << (-nBits)) - 1)
3315 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
3317 m = e & ((1 << (-nBits)) - 1)
3320 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
3324 } else if (e === eMax) {
3325 return m ? NaN : ((s ? -1 : 1) * Infinity)
3327 m = m + Math.pow(2, mLen)
3330 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
3333 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
3335 var eLen = nBytes * 8 - mLen - 1
3336 var eMax = (1 << eLen) - 1
3337 var eBias = eMax >> 1
3338 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
3339 var i = isLE ? 0 : (nBytes - 1)
3340 var d = isLE ? 1 : -1
3341 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
3343 value = Math.abs(value)
3345 if (isNaN(value) || value === Infinity) {
3346 m = isNaN(value) ? 1 : 0
3349 e = Math.floor(Math.log(value) / Math.LN2)
3350 if (value * (c = Math.pow(2, -e)) < 1) {
3354 if (e + eBias >= 1) {
3357 value += rt * Math.pow(2, 1 - eBias)
3359 if (value * c >= 2) {
3364 if (e + eBias >= eMax) {
3367 } else if (e + eBias >= 1) {
3368 m = (value * c - 1) * Math.pow(2, mLen)
3371 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
3376 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
3380 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
3382 buffer[offset + i - d] |= s * 128
3385 },{}],16:[function(require,module,exports){
3389 /*global window, global*/
3391 var root = typeof window !== 'undefined' ?
3392 window : typeof global !== 'undefined' ?
3395 module.exports = Individual;
3397 function Individual(key, value) {
3407 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3409 },{}],17:[function(require,module,exports){
3412 var Individual = require('./index.js');
3414 module.exports = OneVersion;
3416 function OneVersion(moduleName, version, defaultValue) {
3417 var key = '__INDIVIDUAL_ONE_VERSION_' + moduleName;
3418 var enforceKey = key + '_ENFORCE_SINGLETON';
3420 var versionValue = Individual(enforceKey, version);
3422 if (versionValue !== version) {
3423 throw new Error('Can only have one copy of ' +
3424 moduleName + '.\n' +
3425 'You already have version ' + versionValue +
3427 'This means you cannot install version ' + version);
3430 return Individual(key, defaultValue);
3433 },{"./index.js":16}],18:[function(require,module,exports){
3436 module.exports = function isObject(x) {
3437 return typeof x === "object" && x !== null;
3440 },{}],19:[function(require,module,exports){
3441 var toString = {}.toString;
3443 module.exports = Array.isArray || function (arr) {
3444 return toString.call(arr) == '[object Array]';
3447 },{}],20:[function(require,module,exports){
3448 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3449 /* Geohash encoding/decoding and associated functions (c) Chris Veness 2014-2016 / MIT Licence */
3450 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3456 * Geohash encode, decode, bounds, neighbours.
3462 /* (Geohash-specific) Base32 map */
3463 Geohash.base32 = '0123456789bcdefghjkmnpqrstuvwxyz';
3466 * Encodes latitude/longitude to geohash, either to specified precision or to automatically
3467 * evaluated precision.
3469 * @param {number} lat - Latitude in degrees.
3470 * @param {number} lon - Longitude in degrees.
3471 * @param {number} [precision] - Number of characters in resulting geohash.
3472 * @returns {string} Geohash of supplied latitude/longitude.
3473 * @throws Invalid geohash.
3476 * var geohash = Geohash.encode(52.205, 0.119, 7); // geohash: 'u120fxw'
3478 Geohash.encode = function(lat, lon, precision) {
3480 if (typeof precision == 'undefined') {
3481 // refine geohash until it matches precision of supplied lat/lon
3482 for (var p=1; p<=12; p++) {
3483 var hash = Geohash.encode(lat, lon, p);
3484 var posn = Geohash.decode(hash);
3485 if (posn.lat==lat && posn.lon==lon) return hash;
3487 precision = 12; // set to maximum
3492 precision = Number(precision);
3494 if (isNaN(lat) || isNaN(lon) || isNaN(precision)) throw new Error('Invalid geohash');
3496 var idx = 0; // index into base32 map
3497 var bit = 0; // each char holds 5 bits
3501 var latMin = -90, latMax = 90;
3502 var lonMin = -180, lonMax = 180;
3504 while (geohash.length < precision) {
3506 // bisect E-W longitude
3507 var lonMid = (lonMin + lonMax) / 2;
3508 if (lon >= lonMid) {
3516 // bisect N-S latitude
3517 var latMid = (latMin + latMax) / 2;
3518 if (lat >= latMid) {
3529 // 5 bits gives us a character: append it and start over
3530 geohash += Geohash.base32.charAt(idx);
3541 * Decode geohash to latitude/longitude (location is approximate centre of geohash cell,
3542 * to reasonable precision).
3544 * @param {string} geohash - Geohash string to be converted to latitude/longitude.
3545 * @returns {{lat:number, lon:number}} (Center of) geohashed location.
3546 * @throws Invalid geohash.
3549 * var latlon = Geohash.decode('u120fxw'); // latlon: { lat: 52.205, lon: 0.1188 }
3551 Geohash.decode = function(geohash) {
3553 var bounds = Geohash.bounds(geohash); // <-- the hard work
3554 // now just determine the centre of the cell...
3556 var latMin = bounds.sw.lat, lonMin = bounds.sw.lon;
3557 var latMax = bounds.ne.lat, lonMax = bounds.ne.lon;
3560 var lat = (latMin + latMax)/2;
3561 var lon = (lonMin + lonMax)/2;
3563 // round to close to centre without excessive precision: ⌊2-log10(Δ°)⌋ decimal places
3564 lat = lat.toFixed(Math.floor(2-Math.log(latMax-latMin)/Math.LN10));
3565 lon = lon.toFixed(Math.floor(2-Math.log(lonMax-lonMin)/Math.LN10));
3567 return { lat: Number(lat), lon: Number(lon) };
3572 * Returns SW/NE latitude/longitude bounds of specified geohash.
3574 * @param {string} geohash - Cell that bounds are required of.
3575 * @returns {{sw: {lat: number, lon: number}, ne: {lat: number, lon: number}}}
3576 * @throws Invalid geohash.
3578 Geohash.bounds = function(geohash) {
3579 if (geohash.length === 0) throw new Error('Invalid geohash');
3581 geohash = geohash.toLowerCase();
3584 var latMin = -90, latMax = 90;
3585 var lonMin = -180, lonMax = 180;
3587 for (var i=0; i<geohash.length; i++) {
3588 var chr = geohash.charAt(i);
3589 var idx = Geohash.base32.indexOf(chr);
3590 if (idx == -1) throw new Error('Invalid geohash');
3592 for (var n=4; n>=0; n--) {
3593 var bitN = idx >> n & 1;
3596 var lonMid = (lonMin+lonMax) / 2;
3604 var latMid = (latMin+latMax) / 2;
3616 sw: { lat: latMin, lon: lonMin },
3617 ne: { lat: latMax, lon: lonMax },
3625 * Determines adjacent cell in given direction.
3627 * @param geohash - Cell to which adjacent cell is required.
3628 * @param direction - Direction from geohash (N/S/E/W).
3629 * @returns {string} Geocode of adjacent cell.
3630 * @throws Invalid geohash.
3632 Geohash.adjacent = function(geohash, direction) {
3633 // based on github.com/davetroy/geohash-js
3635 geohash = geohash.toLowerCase();
3636 direction = direction.toLowerCase();
3638 if (geohash.length === 0) throw new Error('Invalid geohash');
3639 if ('nsew'.indexOf(direction) == -1) throw new Error('Invalid direction');
3642 n: [ 'p0r21436x8zb9dcf5h7kjnmqesgutwvy', 'bc01fg45238967deuvhjyznpkmstqrwx' ],
3643 s: [ '14365h7k9dcfesgujnmqp0r2twvyx8zb', '238967debc01fg45kmstqrwxuvhjyznp' ],
3644 e: [ 'bc01fg45238967deuvhjyznpkmstqrwx', 'p0r21436x8zb9dcf5h7kjnmqesgutwvy' ],
3645 w: [ '238967debc01fg45kmstqrwxuvhjyznp', '14365h7k9dcfesgujnmqp0r2twvyx8zb' ],
3648 n: [ 'prxz', 'bcfguvyz' ],
3649 s: [ '028b', '0145hjnp' ],
3650 e: [ 'bcfguvyz', 'prxz' ],
3651 w: [ '0145hjnp', '028b' ],
3654 var lastCh = geohash.slice(-1); // last character of hash
3655 var parent = geohash.slice(0, -1); // hash without last character
3657 var type = geohash.length % 2;
3659 // check for edge-cases which don't share common prefix
3660 if (border[direction][type].indexOf(lastCh) != -1 && parent !== '') {
3661 parent = Geohash.adjacent(parent, direction);
3664 // append letter for direction to parent
3665 return parent + Geohash.base32.charAt(neighbour[direction][type].indexOf(lastCh));
3670 * Returns all 8 adjacent cells to specified geohash.
3672 * @param {string} geohash - Geohash neighbours are required of.
3673 * @returns {{n,ne,e,se,s,sw,w,nw: string}}
3674 * @throws Invalid geohash.
3676 Geohash.neighbours = function(geohash) {
3678 'n': Geohash.adjacent(geohash, 'n'),
3679 'ne': Geohash.adjacent(Geohash.adjacent(geohash, 'n'), 'e'),
3680 'e': Geohash.adjacent(geohash, 'e'),
3681 'se': Geohash.adjacent(Geohash.adjacent(geohash, 's'), 'e'),
3682 's': Geohash.adjacent(geohash, 's'),
3683 'sw': Geohash.adjacent(Geohash.adjacent(geohash, 's'), 'w'),
3684 'w': Geohash.adjacent(geohash, 'w'),
3685 'nw': Geohash.adjacent(Geohash.adjacent(geohash, 'n'), 'w'),
3690 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
3691 if (typeof module != 'undefined' && module.exports) module.exports = Geohash; // CommonJS, node.js
3693 },{}],21:[function(require,module,exports){
3694 (function (process){
3695 // Copyright Joyent, Inc. and other Node contributors.
3697 // Permission is hereby granted, free of charge, to any person obtaining a
3698 // copy of this software and associated documentation files (the
3699 // "Software"), to deal in the Software without restriction, including
3700 // without limitation the rights to use, copy, modify, merge, publish,
3701 // distribute, sublicense, and/or sell copies of the Software, and to permit
3702 // persons to whom the Software is furnished to do so, subject to the
3703 // following conditions:
3705 // The above copyright notice and this permission notice shall be included
3706 // in all copies or substantial portions of the Software.
3708 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
3709 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
3710 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
3711 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
3712 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
3713 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
3714 // USE OR OTHER DEALINGS IN THE SOFTWARE.
3716 // resolves . and .. elements in a path array with directory names there
3717 // must be no slashes, empty elements, or device names (c:\) in the array
3718 // (so also no leading and trailing slashes - it does not distinguish
3719 // relative and absolute paths)
3720 function normalizeArray(parts, allowAboveRoot) {
3721 // if the path tries to go above the root, `up` ends up > 0
3723 for (var i = parts.length - 1; i >= 0; i--) {
3724 var last = parts[i];
3727 } else if (last === '..') {
3736 // if the path is allowed to go above the root, restore leading ..s
3737 if (allowAboveRoot) {
3739 parts.unshift('..');
3746 // Split a filename into [root, dir, basename, ext], unix version
3747 // 'root' is just a slash, or nothing.
3749 /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
3750 var splitPath = function(filename) {
3751 return splitPathRe.exec(filename).slice(1);
3754 // path.resolve([from ...], to)
3756 exports.resolve = function() {
3757 var resolvedPath = '',
3758 resolvedAbsolute = false;
3760 for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
3761 var path = (i >= 0) ? arguments[i] : process.cwd();
3763 // Skip empty and invalid entries
3764 if (typeof path !== 'string') {
3765 throw new TypeError('Arguments to path.resolve must be strings');
3770 resolvedPath = path + '/' + resolvedPath;
3771 resolvedAbsolute = path.charAt(0) === '/';
3774 // At this point the path should be resolved to a full absolute path, but
3775 // handle relative paths to be safe (might happen when process.cwd() fails)
3777 // Normalize the path
3778 resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
3780 }), !resolvedAbsolute).join('/');
3782 return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
3785 // path.normalize(path)
3787 exports.normalize = function(path) {
3788 var isAbsolute = exports.isAbsolute(path),
3789 trailingSlash = substr(path, -1) === '/';
3791 // Normalize the path
3792 path = normalizeArray(filter(path.split('/'), function(p) {
3794 }), !isAbsolute).join('/');
3796 if (!path && !isAbsolute) {
3799 if (path && trailingSlash) {
3803 return (isAbsolute ? '/' : '') + path;
3807 exports.isAbsolute = function(path) {
3808 return path.charAt(0) === '/';
3812 exports.join = function() {
3813 var paths = Array.prototype.slice.call(arguments, 0);
3814 return exports.normalize(filter(paths, function(p, index) {
3815 if (typeof p !== 'string') {
3816 throw new TypeError('Arguments to path.join must be strings');
3823 // path.relative(from, to)
3825 exports.relative = function(from, to) {
3826 from = exports.resolve(from).substr(1);
3827 to = exports.resolve(to).substr(1);
3829 function trim(arr) {
3831 for (; start < arr.length; start++) {
3832 if (arr[start] !== '') break;
3835 var end = arr.length - 1;
3836 for (; end >= 0; end--) {
3837 if (arr[end] !== '') break;
3840 if (start > end) return [];
3841 return arr.slice(start, end - start + 1);
3844 var fromParts = trim(from.split('/'));
3845 var toParts = trim(to.split('/'));
3847 var length = Math.min(fromParts.length, toParts.length);
3848 var samePartsLength = length;
3849 for (var i = 0; i < length; i++) {
3850 if (fromParts[i] !== toParts[i]) {
3851 samePartsLength = i;
3856 var outputParts = [];
3857 for (var i = samePartsLength; i < fromParts.length; i++) {
3858 outputParts.push('..');
3861 outputParts = outputParts.concat(toParts.slice(samePartsLength));
3863 return outputParts.join('/');
3867 exports.delimiter = ':';
3869 exports.dirname = function(path) {
3870 var result = splitPath(path),
3874 if (!root && !dir) {
3875 // No dirname whatsoever
3880 // It has a dirname, strip trailing slash
3881 dir = dir.substr(0, dir.length - 1);
3888 exports.basename = function(path, ext) {
3889 var f = splitPath(path)[2];
3890 // TODO: make this comparison case-insensitive on windows?
3891 if (ext && f.substr(-1 * ext.length) === ext) {
3892 f = f.substr(0, f.length - ext.length);
3898 exports.extname = function(path) {
3899 return splitPath(path)[3];
3902 function filter (xs, f) {
3903 if (xs.filter) return xs.filter(f);
3905 for (var i = 0; i < xs.length; i++) {
3906 if (f(xs[i], i, xs)) res.push(xs[i]);
3911 // String.prototype.substr - negative index don't work in IE8
3912 var substr = 'ab'.substr(-1) === 'b'
3913 ? function (str, start, len) { return str.substr(start, len) }
3914 : function (str, start, len) {
3915 if (start < 0) start = str.length + start;
3916 return str.substr(start, len);
3920 }).call(this,require('_process'))
3922 },{"_process":4}],22:[function(require,module,exports){
3925 module.exports = Pbf;
3927 var ieee754 = require('ieee754');
3930 this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);
3933 this.length = this.buf.length;
3936 Pbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum
3937 Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64
3938 Pbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields
3939 Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32
3941 var SHIFT_LEFT_32 = (1 << 16) * (1 << 16),
3942 SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
3946 destroy: function() {
3950 // === READING =================================================================
3952 readFields: function(readField, result, end) {
3953 end = end || this.length;
3955 while (this.pos < end) {
3956 var val = this.readVarint(),
3958 startPos = this.pos;
3960 this.type = val & 0x7;
3961 readField(tag, result, this);
3963 if (this.pos === startPos) this.skip(val);
3968 readMessage: function(readField, result) {
3969 return this.readFields(readField, result, this.readVarint() + this.pos);
3972 readFixed32: function() {
3973 var val = readUInt32(this.buf, this.pos);
3978 readSFixed32: function() {
3979 var val = readInt32(this.buf, this.pos);
3984 // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)
3986 readFixed64: function() {
3987 var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
3992 readSFixed64: function() {
3993 var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
3998 readFloat: function() {
3999 var val = ieee754.read(this.buf, this.pos, true, 23, 4);
4004 readDouble: function() {
4005 var val = ieee754.read(this.buf, this.pos, true, 52, 8);
4010 readVarint: function(isSigned) {
4014 b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) return val;
4015 b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) return val;
4016 b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;
4017 b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;
4018 b = buf[this.pos]; val |= (b & 0x0f) << 28;
4020 return readVarintRemainder(val, isSigned, this);
4023 readVarint64: function() { // for compatibility with v2.0.1
4024 return this.readVarint(true);
4027 readSVarint: function() {
4028 var num = this.readVarint();
4029 return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding
4032 readBoolean: function() {
4033 return Boolean(this.readVarint());
4036 readString: function() {
4037 var end = this.readVarint() + this.pos,
4038 str = readUtf8(this.buf, this.pos, end);
4043 readBytes: function() {
4044 var end = this.readVarint() + this.pos,
4045 buffer = this.buf.subarray(this.pos, end);
4050 // verbose for performance reasons; doesn't affect gzipped size
4052 readPackedVarint: function(arr, isSigned) {
4053 var end = readPackedEnd(this);
4055 while (this.pos < end) arr.push(this.readVarint(isSigned));
4058 readPackedSVarint: function(arr) {
4059 var end = readPackedEnd(this);
4061 while (this.pos < end) arr.push(this.readSVarint());
4064 readPackedBoolean: function(arr) {
4065 var end = readPackedEnd(this);
4067 while (this.pos < end) arr.push(this.readBoolean());
4070 readPackedFloat: function(arr) {
4071 var end = readPackedEnd(this);
4073 while (this.pos < end) arr.push(this.readFloat());
4076 readPackedDouble: function(arr) {
4077 var end = readPackedEnd(this);
4079 while (this.pos < end) arr.push(this.readDouble());
4082 readPackedFixed32: function(arr) {
4083 var end = readPackedEnd(this);
4085 while (this.pos < end) arr.push(this.readFixed32());
4088 readPackedSFixed32: function(arr) {
4089 var end = readPackedEnd(this);
4091 while (this.pos < end) arr.push(this.readSFixed32());
4094 readPackedFixed64: function(arr) {
4095 var end = readPackedEnd(this);
4097 while (this.pos < end) arr.push(this.readFixed64());
4100 readPackedSFixed64: function(arr) {
4101 var end = readPackedEnd(this);
4103 while (this.pos < end) arr.push(this.readSFixed64());
4107 skip: function(val) {
4108 var type = val & 0x7;
4109 if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}
4110 else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;
4111 else if (type === Pbf.Fixed32) this.pos += 4;
4112 else if (type === Pbf.Fixed64) this.pos += 8;
4113 else throw new Error('Unimplemented type: ' + type);
4116 // === WRITING =================================================================
4118 writeTag: function(tag, type) {
4119 this.writeVarint((tag << 3) | type);
4122 realloc: function(min) {
4123 var length = this.length || 16;
4125 while (length < this.pos + min) length *= 2;
4127 if (length !== this.length) {
4128 var buf = new Uint8Array(length);
4131 this.length = length;
4135 finish: function() {
4136 this.length = this.pos;
4138 return this.buf.subarray(0, this.length);
4141 writeFixed32: function(val) {
4143 writeInt32(this.buf, val, this.pos);
4147 writeSFixed32: function(val) {
4149 writeInt32(this.buf, val, this.pos);
4153 writeFixed64: function(val) {
4155 writeInt32(this.buf, val & -1, this.pos);
4156 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
4160 writeSFixed64: function(val) {
4162 writeInt32(this.buf, val & -1, this.pos);
4163 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
4167 writeVarint: function(val) {
4170 if (val > 0xfffffff || val < 0) {
4171 writeBigVarint(val, this);
4177 this.buf[this.pos++] = val & 0x7f | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
4178 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
4179 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
4180 this.buf[this.pos++] = (val >>> 7) & 0x7f;
4183 writeSVarint: function(val) {
4184 this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);
4187 writeBoolean: function(val) {
4188 this.writeVarint(Boolean(val));
4191 writeString: function(str) {
4193 this.realloc(str.length * 4);
4195 this.pos++; // reserve 1 byte for short string length
4197 var startPos = this.pos;
4198 // write the string directly to the buffer and see how much was written
4199 this.pos = writeUtf8(this.buf, str, this.pos);
4200 var len = this.pos - startPos;
4202 if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
4204 // finally, write the message length in the reserved place and restore the position
4205 this.pos = startPos - 1;
4206 this.writeVarint(len);
4210 writeFloat: function(val) {
4212 ieee754.write(this.buf, val, this.pos, true, 23, 4);
4216 writeDouble: function(val) {
4218 ieee754.write(this.buf, val, this.pos, true, 52, 8);
4222 writeBytes: function(buffer) {
4223 var len = buffer.length;
4224 this.writeVarint(len);
4226 for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];
4229 writeRawMessage: function(fn, obj) {
4230 this.pos++; // reserve 1 byte for short message length
4232 // write the message directly to the buffer and see how much was written
4233 var startPos = this.pos;
4235 var len = this.pos - startPos;
4237 if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
4239 // finally, write the message length in the reserved place and restore the position
4240 this.pos = startPos - 1;
4241 this.writeVarint(len);
4245 writeMessage: function(tag, fn, obj) {
4246 this.writeTag(tag, Pbf.Bytes);
4247 this.writeRawMessage(fn, obj);
4250 writePackedVarint: function(tag, arr) { this.writeMessage(tag, writePackedVarint, arr); },
4251 writePackedSVarint: function(tag, arr) { this.writeMessage(tag, writePackedSVarint, arr); },
4252 writePackedBoolean: function(tag, arr) { this.writeMessage(tag, writePackedBoolean, arr); },
4253 writePackedFloat: function(tag, arr) { this.writeMessage(tag, writePackedFloat, arr); },
4254 writePackedDouble: function(tag, arr) { this.writeMessage(tag, writePackedDouble, arr); },
4255 writePackedFixed32: function(tag, arr) { this.writeMessage(tag, writePackedFixed32, arr); },
4256 writePackedSFixed32: function(tag, arr) { this.writeMessage(tag, writePackedSFixed32, arr); },
4257 writePackedFixed64: function(tag, arr) { this.writeMessage(tag, writePackedFixed64, arr); },
4258 writePackedSFixed64: function(tag, arr) { this.writeMessage(tag, writePackedSFixed64, arr); },
4260 writeBytesField: function(tag, buffer) {
4261 this.writeTag(tag, Pbf.Bytes);
4262 this.writeBytes(buffer);
4264 writeFixed32Field: function(tag, val) {
4265 this.writeTag(tag, Pbf.Fixed32);
4266 this.writeFixed32(val);
4268 writeSFixed32Field: function(tag, val) {
4269 this.writeTag(tag, Pbf.Fixed32);
4270 this.writeSFixed32(val);
4272 writeFixed64Field: function(tag, val) {
4273 this.writeTag(tag, Pbf.Fixed64);
4274 this.writeFixed64(val);
4276 writeSFixed64Field: function(tag, val) {
4277 this.writeTag(tag, Pbf.Fixed64);
4278 this.writeSFixed64(val);
4280 writeVarintField: function(tag, val) {
4281 this.writeTag(tag, Pbf.Varint);
4282 this.writeVarint(val);
4284 writeSVarintField: function(tag, val) {
4285 this.writeTag(tag, Pbf.Varint);
4286 this.writeSVarint(val);
4288 writeStringField: function(tag, str) {
4289 this.writeTag(tag, Pbf.Bytes);
4290 this.writeString(str);
4292 writeFloatField: function(tag, val) {
4293 this.writeTag(tag, Pbf.Fixed32);
4294 this.writeFloat(val);
4296 writeDoubleField: function(tag, val) {
4297 this.writeTag(tag, Pbf.Fixed64);
4298 this.writeDouble(val);
4300 writeBooleanField: function(tag, val) {
4301 this.writeVarintField(tag, Boolean(val));
4305 function readVarintRemainder(l, s, p) {
4309 b = buf[p.pos++]; h = (b & 0x70) >> 4; if (b < 0x80) return toNum(l, h, s);
4310 b = buf[p.pos++]; h |= (b & 0x7f) << 3; if (b < 0x80) return toNum(l, h, s);
4311 b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);
4312 b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);
4313 b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);
4314 b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);
4316 throw new Error('Expected varint not more than 10 bytes');
4319 function readPackedEnd(pbf) {
4320 return pbf.type === Pbf.Bytes ?
4321 pbf.readVarint() + pbf.pos : pbf.pos + 1;
4324 function toNum(low, high, isSigned) {
4326 return high * 0x100000000 + (low >>> 0);
4329 return ((high >>> 0) * 0x100000000) + (low >>> 0);
4332 function writeBigVarint(val, pbf) {
4336 low = (val % 0x100000000) | 0;
4337 high = (val / 0x100000000) | 0;
4339 low = ~(-val % 0x100000000);
4340 high = ~(-val / 0x100000000);
4342 if (low ^ 0xffffffff) {
4343 low = (low + 1) | 0;
4346 high = (high + 1) | 0;
4350 if (val >= 0x10000000000000000 || val < -0x10000000000000000) {
4351 throw new Error('Given varint doesn\'t fit into 10 bytes');
4356 writeBigVarintLow(low, high, pbf);
4357 writeBigVarintHigh(high, pbf);
4360 function writeBigVarintLow(low, high, pbf) {
4361 pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
4362 pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
4363 pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
4364 pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
4365 pbf.buf[pbf.pos] = low & 0x7f;
4368 function writeBigVarintHigh(high, pbf) {
4369 var lsb = (high & 0x07) << 4;
4371 pbf.buf[pbf.pos++] |= lsb | ((high >>>= 3) ? 0x80 : 0); if (!high) return;
4372 pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
4373 pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
4374 pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
4375 pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
4376 pbf.buf[pbf.pos++] = high & 0x7f;
4379 function makeRoomForExtraLength(startPos, len, pbf) {
4382 len <= 0x1fffff ? 2 :
4383 len <= 0xfffffff ? 3 : Math.ceil(Math.log(len) / (Math.LN2 * 7));
4385 // if 1 byte isn't enough for encoding message length, shift the data to the right
4386 pbf.realloc(extraLen);
4387 for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];
4390 function writePackedVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]); }
4391 function writePackedSVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]); }
4392 function writePackedFloat(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]); }
4393 function writePackedDouble(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]); }
4394 function writePackedBoolean(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]); }
4395 function writePackedFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]); }
4396 function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }
4397 function writePackedFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]); }
4398 function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }
4400 // Buffer code below from https://github.com/feross/buffer, MIT-licensed
4402 function readUInt32(buf, pos) {
4403 return ((buf[pos]) |
4404 (buf[pos + 1] << 8) |
4405 (buf[pos + 2] << 16)) +
4406 (buf[pos + 3] * 0x1000000);
4409 function writeInt32(buf, val, pos) {
4411 buf[pos + 1] = (val >>> 8);
4412 buf[pos + 2] = (val >>> 16);
4413 buf[pos + 3] = (val >>> 24);
4416 function readInt32(buf, pos) {
4417 return ((buf[pos]) |
4418 (buf[pos + 1] << 8) |
4419 (buf[pos + 2] << 16)) +
4420 (buf[pos + 3] << 24);
4423 function readUtf8(buf, pos, end) {
4429 var c = null; // codepoint
4430 var bytesPerSequence =
4435 if (i + bytesPerSequence > end) break;
4439 if (bytesPerSequence === 1) {
4443 } else if (bytesPerSequence === 2) {
4445 if ((b1 & 0xC0) === 0x80) {
4446 c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);
4451 } else if (bytesPerSequence === 3) {
4454 if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {
4455 c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);
4456 if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {
4460 } else if (bytesPerSequence === 4) {
4464 if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {
4465 c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);
4466 if (c <= 0xFFFF || c >= 0x110000) {
4474 bytesPerSequence = 1;
4476 } else if (c > 0xFFFF) {
4478 str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);
4479 c = 0xDC00 | c & 0x3FF;
4482 str += String.fromCharCode(c);
4483 i += bytesPerSequence;
4489 function writeUtf8(buf, str, pos) {
4490 for (var i = 0, c, lead; i < str.length; i++) {
4491 c = str.charCodeAt(i); // code point
4493 if (c > 0xD7FF && c < 0xE000) {
4502 c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;
4506 if (c > 0xDBFF || (i + 1 === str.length)) {
4526 buf[pos++] = c >> 0x6 | 0xC0;
4529 buf[pos++] = c >> 0xC | 0xE0;
4531 buf[pos++] = c >> 0x12 | 0xF0;
4532 buf[pos++] = c >> 0xC & 0x3F | 0x80;
4534 buf[pos++] = c >> 0x6 & 0x3F | 0x80;
4536 buf[pos++] = c & 0x3F | 0x80;
4542 },{"ieee754":15}],23:[function(require,module,exports){
4545 module.exports = partialSort;
4547 // Floyd-Rivest selection algorithm:
4548 // Rearrange items so that all items in the [left, k] range are smaller than all items in (k, right];
4549 // The k-th element will have the (k - left + 1)th smallest value in [left, right]
4551 function partialSort(arr, k, left, right, compare) {
4553 right = right || (arr.length - 1);
4554 compare = compare || defaultCompare;
4556 while (right > left) {
4557 if (right - left > 600) {
4558 var n = right - left + 1;
4559 var m = k - left + 1;
4560 var z = Math.log(n);
4561 var s = 0.5 * Math.exp(2 * z / 3);
4562 var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
4563 var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
4564 var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
4565 partialSort(arr, k, newLeft, newRight, compare);
4573 if (compare(arr[right], t) > 0) swap(arr, left, right);
4579 while (compare(arr[i], t) < 0) i++;
4580 while (compare(arr[j], t) > 0) j--;
4583 if (compare(arr[left], t) === 0) swap(arr, left, j);
4586 swap(arr, j, right);
4589 if (j <= k) left = j + 1;
4590 if (k <= j) right = j - 1;
4594 function swap(arr, i, j) {
4600 function defaultCompare(a, b) {
4601 return a < b ? -1 : a > b ? 1 : 0;
4604 },{}],24:[function(require,module,exports){
4607 module.exports = rbush;
4609 var quickselect = require('quickselect');
4611 function rbush(maxEntries, format) {
4612 if (!(this instanceof rbush)) return new rbush(maxEntries, format);
4614 // max entries in a node is 9 by default; min node fill is 40% for best performance
4615 this._maxEntries = Math.max(4, maxEntries || 9);
4616 this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
4619 this._initFormat(format);
4628 return this._all(this.data, []);
4631 search: function (bbox) {
4633 var node = this.data,
4635 toBBox = this.toBBox;
4637 if (!intersects(bbox, node)) return result;
4639 var nodesToSearch = [],
4640 i, len, child, childBBox;
4643 for (i = 0, len = node.children.length; i < len; i++) {
4645 child = node.children[i];
4646 childBBox = node.leaf ? toBBox(child) : child;
4648 if (intersects(bbox, childBBox)) {
4649 if (node.leaf) result.push(child);
4650 else if (contains(bbox, childBBox)) this._all(child, result);
4651 else nodesToSearch.push(child);
4654 node = nodesToSearch.pop();
4660 collides: function (bbox) {
4662 var node = this.data,
4663 toBBox = this.toBBox;
4665 if (!intersects(bbox, node)) return false;
4667 var nodesToSearch = [],
4668 i, len, child, childBBox;
4671 for (i = 0, len = node.children.length; i < len; i++) {
4673 child = node.children[i];
4674 childBBox = node.leaf ? toBBox(child) : child;
4676 if (intersects(bbox, childBBox)) {
4677 if (node.leaf || contains(bbox, childBBox)) return true;
4678 nodesToSearch.push(child);
4681 node = nodesToSearch.pop();
4687 load: function (data) {
4688 if (!(data && data.length)) return this;
4690 if (data.length < this._minEntries) {
4691 for (var i = 0, len = data.length; i < len; i++) {
4692 this.insert(data[i]);
4697 // recursively build the tree with the given data from stratch using OMT algorithm
4698 var node = this._build(data.slice(), 0, data.length - 1, 0);
4700 if (!this.data.children.length) {
4701 // save as is if tree is empty
4704 } else if (this.data.height === node.height) {
4705 // split root if trees have the same height
4706 this._splitRoot(this.data, node);
4709 if (this.data.height < node.height) {
4710 // swap trees if inserted one is bigger
4711 var tmpNode = this.data;
4716 // insert the small tree into the large tree at appropriate level
4717 this._insert(node, this.data.height - node.height - 1, true);
4723 insert: function (item) {
4724 if (item) this._insert(item, this.data.height - 1);
4728 clear: function () {
4729 this.data = createNode([]);
4733 remove: function (item, equalsFn) {
4734 if (!item) return this;
4736 var node = this.data,
4737 bbox = this.toBBox(item),
4740 i, parent, index, goingUp;
4742 // depth-first iterative tree traversal
4743 while (node || path.length) {
4745 if (!node) { // go up
4747 parent = path[path.length - 1];
4752 if (node.leaf) { // check current node
4753 index = findItem(item, node.children, equalsFn);
4756 // item found, remove the item and condense tree upwards
4757 node.children.splice(index, 1);
4759 this._condense(path);
4764 if (!goingUp && !node.leaf && contains(node, bbox)) { // go down
4769 node = node.children[0];
4771 } else if (parent) { // go right
4773 node = parent.children[i];
4776 } else node = null; // nothing found
4782 toBBox: function (item) { return item; },
4784 compareMinX: compareNodeMinX,
4785 compareMinY: compareNodeMinY,
4787 toJSON: function () { return this.data; },
4789 fromJSON: function (data) {
4794 _all: function (node, result) {
4795 var nodesToSearch = [];
4797 if (node.leaf) result.push.apply(result, node.children);
4798 else nodesToSearch.push.apply(nodesToSearch, node.children);
4800 node = nodesToSearch.pop();
4805 _build: function (items, left, right, height) {
4807 var N = right - left + 1,
4808 M = this._maxEntries,
4812 // reached leaf level; return leaf
4813 node = createNode(items.slice(left, right + 1));
4814 calcBBox(node, this.toBBox);
4819 // target height of the bulk-loaded tree
4820 height = Math.ceil(Math.log(N) / Math.log(M));
4822 // target number of root entries to maximize storage utilization
4823 M = Math.ceil(N / Math.pow(M, height - 1));
4826 node = createNode([]);
4828 node.height = height;
4830 // split the items into M mostly square tiles
4832 var N2 = Math.ceil(N / M),
4833 N1 = N2 * Math.ceil(Math.sqrt(M)),
4834 i, j, right2, right3;
4836 multiSelect(items, left, right, N1, this.compareMinX);
4838 for (i = left; i <= right; i += N1) {
4840 right2 = Math.min(i + N1 - 1, right);
4842 multiSelect(items, i, right2, N2, this.compareMinY);
4844 for (j = i; j <= right2; j += N2) {
4846 right3 = Math.min(j + N2 - 1, right2);
4848 // pack each entry recursively
4849 node.children.push(this._build(items, j, right3, height - 1));
4853 calcBBox(node, this.toBBox);
4858 _chooseSubtree: function (bbox, node, level, path) {
4860 var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;
4865 if (node.leaf || path.length - 1 === level) break;
4867 minArea = minEnlargement = Infinity;
4869 for (i = 0, len = node.children.length; i < len; i++) {
4870 child = node.children[i];
4871 area = bboxArea(child);
4872 enlargement = enlargedArea(bbox, child) - area;
4874 // choose entry with the least area enlargement
4875 if (enlargement < minEnlargement) {
4876 minEnlargement = enlargement;
4877 minArea = area < minArea ? area : minArea;
4880 } else if (enlargement === minEnlargement) {
4881 // otherwise choose one with the smallest area
4882 if (area < minArea) {
4889 node = targetNode || node.children[0];
4895 _insert: function (item, level, isNode) {
4897 var toBBox = this.toBBox,
4898 bbox = isNode ? item : toBBox(item),
4901 // find the best node for accommodating the item, saving all nodes along the path too
4902 var node = this._chooseSubtree(bbox, this.data, level, insertPath);
4904 // put the item into the node
4905 node.children.push(item);
4908 // split on node overflow; propagate upwards if necessary
4909 while (level >= 0) {
4910 if (insertPath[level].children.length > this._maxEntries) {
4911 this._split(insertPath, level);
4916 // adjust bboxes along the insertion path
4917 this._adjustParentBBoxes(bbox, insertPath, level);
4920 // split overflowed node into two
4921 _split: function (insertPath, level) {
4923 var node = insertPath[level],
4924 M = node.children.length,
4925 m = this._minEntries;
4927 this._chooseSplitAxis(node, m, M);
4929 var splitIndex = this._chooseSplitIndex(node, m, M);
4931 var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));
4932 newNode.height = node.height;
4933 newNode.leaf = node.leaf;
4935 calcBBox(node, this.toBBox);
4936 calcBBox(newNode, this.toBBox);
4938 if (level) insertPath[level - 1].children.push(newNode);
4939 else this._splitRoot(node, newNode);
4942 _splitRoot: function (node, newNode) {
4944 this.data = createNode([node, newNode]);
4945 this.data.height = node.height + 1;
4946 this.data.leaf = false;
4947 calcBBox(this.data, this.toBBox);
4950 _chooseSplitIndex: function (node, m, M) {
4952 var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;
4954 minOverlap = minArea = Infinity;
4956 for (i = m; i <= M - m; i++) {
4957 bbox1 = distBBox(node, 0, i, this.toBBox);
4958 bbox2 = distBBox(node, i, M, this.toBBox);
4960 overlap = intersectionArea(bbox1, bbox2);
4961 area = bboxArea(bbox1) + bboxArea(bbox2);
4963 // choose distribution with minimum overlap
4964 if (overlap < minOverlap) {
4965 minOverlap = overlap;
4968 minArea = area < minArea ? area : minArea;
4970 } else if (overlap === minOverlap) {
4971 // otherwise choose distribution with minimum area
4972 if (area < minArea) {
4982 // sorts node children by the best axis for split
4983 _chooseSplitAxis: function (node, m, M) {
4985 var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,
4986 compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,
4987 xMargin = this._allDistMargin(node, m, M, compareMinX),
4988 yMargin = this._allDistMargin(node, m, M, compareMinY);
4990 // if total distributions margin value is minimal for x, sort by minX,
4991 // otherwise it's already sorted by minY
4992 if (xMargin < yMargin) node.children.sort(compareMinX);
4995 // total margin of all possible split distributions where each node is at least m full
4996 _allDistMargin: function (node, m, M, compare) {
4998 node.children.sort(compare);
5000 var toBBox = this.toBBox,
5001 leftBBox = distBBox(node, 0, m, toBBox),
5002 rightBBox = distBBox(node, M - m, M, toBBox),
5003 margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),
5006 for (i = m; i < M - m; i++) {
5007 child = node.children[i];
5008 extend(leftBBox, node.leaf ? toBBox(child) : child);
5009 margin += bboxMargin(leftBBox);
5012 for (i = M - m - 1; i >= m; i--) {
5013 child = node.children[i];
5014 extend(rightBBox, node.leaf ? toBBox(child) : child);
5015 margin += bboxMargin(rightBBox);
5021 _adjustParentBBoxes: function (bbox, path, level) {
5022 // adjust bboxes along the given tree path
5023 for (var i = level; i >= 0; i--) {
5024 extend(path[i], bbox);
5028 _condense: function (path) {
5029 // go through the path, removing empty nodes and updating bboxes
5030 for (var i = path.length - 1, siblings; i >= 0; i--) {
5031 if (path[i].children.length === 0) {
5033 siblings = path[i - 1].children;
5034 siblings.splice(siblings.indexOf(path[i]), 1);
5036 } else this.clear();
5038 } else calcBBox(path[i], this.toBBox);
5042 _initFormat: function (format) {
5043 // data format (minX, minY, maxX, maxY accessors)
5045 // uses eval-type function compilation instead of just accepting a toBBox function
5046 // because the algorithms are very sensitive to sorting functions performance,
5047 // so they should be dead simple and without inner calls
5049 var compareArr = ['return a', ' - b', ';'];
5051 this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));
5052 this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));
5054 this.toBBox = new Function('a',
5055 'return {minX: a' + format[0] +
5056 ', minY: a' + format[1] +
5057 ', maxX: a' + format[2] +
5058 ', maxY: a' + format[3] + '};');
5062 function findItem(item, items, equalsFn) {
5063 if (!equalsFn) return items.indexOf(item);
5065 for (var i = 0; i < items.length; i++) {
5066 if (equalsFn(item, items[i])) return i;
5071 // calculate node's bbox from bboxes of its children
5072 function calcBBox(node, toBBox) {
5073 distBBox(node, 0, node.children.length, toBBox, node);
5076 // min bounding rectangle of node children from k to p-1
5077 function distBBox(node, k, p, toBBox, destNode) {
5078 if (!destNode) destNode = createNode(null);
5079 destNode.minX = Infinity;
5080 destNode.minY = Infinity;
5081 destNode.maxX = -Infinity;
5082 destNode.maxY = -Infinity;
5084 for (var i = k, child; i < p; i++) {
5085 child = node.children[i];
5086 extend(destNode, node.leaf ? toBBox(child) : child);
5092 function extend(a, b) {
5093 a.minX = Math.min(a.minX, b.minX);
5094 a.minY = Math.min(a.minY, b.minY);
5095 a.maxX = Math.max(a.maxX, b.maxX);
5096 a.maxY = Math.max(a.maxY, b.maxY);
5100 function compareNodeMinX(a, b) { return a.minX - b.minX; }
5101 function compareNodeMinY(a, b) { return a.minY - b.minY; }
5103 function bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }
5104 function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
5106 function enlargedArea(a, b) {
5107 return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
5108 (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
5111 function intersectionArea(a, b) {
5112 var minX = Math.max(a.minX, b.minX),
5113 minY = Math.max(a.minY, b.minY),
5114 maxX = Math.min(a.maxX, b.maxX),
5115 maxY = Math.min(a.maxY, b.maxY);
5117 return Math.max(0, maxX - minX) *
5118 Math.max(0, maxY - minY);
5121 function contains(a, b) {
5122 return a.minX <= b.minX &&
5128 function intersects(a, b) {
5129 return b.minX <= a.maxX &&
5135 function createNode(children) {
5147 // sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
5148 // combines selection algorithm with binary divide & conquer approach
5150 function multiSelect(arr, left, right, n, compare) {
5151 var stack = [left, right],
5154 while (stack.length) {
5155 right = stack.pop();
5158 if (right - left <= n) continue;
5160 mid = left + Math.ceil((right - left) / n / 2) * n;
5161 quickselect(arr, mid, left, right, compare);
5163 stack.push(left, mid, mid, right);
5167 },{"quickselect":23}],25:[function(require,module,exports){
5169 var __extends = (this && this.__extends) || function (d, b) {
5170 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
5171 function __() { this.constructor = d; }
5172 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
5174 var Subject_1 = require('./Subject');
5175 var ObjectUnsubscribedError_1 = require('./util/ObjectUnsubscribedError');
5177 * @class BehaviorSubject<T>
5179 var BehaviorSubject = (function (_super) {
5180 __extends(BehaviorSubject, _super);
5181 function BehaviorSubject(_value) {
5183 this._value = _value;
5185 Object.defineProperty(BehaviorSubject.prototype, "value", {
5187 return this.getValue();
5192 BehaviorSubject.prototype._subscribe = function (subscriber) {
5193 var subscription = _super.prototype._subscribe.call(this, subscriber);
5194 if (subscription && !subscription.closed) {
5195 subscriber.next(this._value);
5197 return subscription;
5199 BehaviorSubject.prototype.getValue = function () {
5200 if (this.hasError) {
5201 throw this.thrownError;
5203 else if (this.closed) {
5204 throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
5210 BehaviorSubject.prototype.next = function (value) {
5211 _super.prototype.next.call(this, this._value = value);
5213 return BehaviorSubject;
5214 }(Subject_1.Subject));
5215 exports.BehaviorSubject = BehaviorSubject;
5217 },{"./Subject":33,"./util/ObjectUnsubscribedError":158}],26:[function(require,module,exports){
5219 var __extends = (this && this.__extends) || function (d, b) {
5220 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
5221 function __() { this.constructor = d; }
5222 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
5224 var Subscriber_1 = require('./Subscriber');
5226 * We need this JSDoc comment for affecting ESDoc.
5228 * @extends {Ignored}
5230 var InnerSubscriber = (function (_super) {
5231 __extends(InnerSubscriber, _super);
5232 function InnerSubscriber(parent, outerValue, outerIndex) {
5234 this.parent = parent;
5235 this.outerValue = outerValue;
5236 this.outerIndex = outerIndex;
5239 InnerSubscriber.prototype._next = function (value) {
5240 this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
5242 InnerSubscriber.prototype._error = function (error) {
5243 this.parent.notifyError(error, this);
5246 InnerSubscriber.prototype._complete = function () {
5247 this.parent.notifyComplete(this);
5250 return InnerSubscriber;
5251 }(Subscriber_1.Subscriber));
5252 exports.InnerSubscriber = InnerSubscriber;
5254 },{"./Subscriber":35}],27:[function(require,module,exports){
5256 var Observable_1 = require('./Observable');
5258 * Represents a push-based event or value that an {@link Observable} can emit.
5259 * This class is particularly useful for operators that manage notifications,
5260 * like {@link materialize}, {@link dematerialize}, {@link observeOn}, and
5261 * others. Besides wrapping the actual delivered value, it also annotates it
5262 * with metadata of, for instance, what type of push message it is (`next`,
5263 * `error`, or `complete`).
5265 * @see {@link materialize}
5266 * @see {@link dematerialize}
5267 * @see {@link observeOn}
5269 * @class Notification<T>
5271 var Notification = (function () {
5272 function Notification(kind, value, error) {
5276 this.hasValue = kind === 'N';
5279 * Delivers to the given `observer` the value wrapped by this Notification.
5280 * @param {Observer} observer
5283 Notification.prototype.observe = function (observer) {
5284 switch (this.kind) {
5286 return observer.next && observer.next(this.value);
5288 return observer.error && observer.error(this.error);
5290 return observer.complete && observer.complete();
5294 * Given some {@link Observer} callbacks, deliver the value represented by the
5295 * current Notification to the correctly corresponding callback.
5296 * @param {function(value: T): void} next An Observer `next` callback.
5297 * @param {function(err: any): void} [error] An Observer `error` callback.
5298 * @param {function(): void} [complete] An Observer `complete` callback.
5301 Notification.prototype.do = function (next, error, complete) {
5302 var kind = this.kind;
5305 return next && next(this.value);
5307 return error && error(this.error);
5309 return complete && complete();
5313 * Takes an Observer or its individual callback functions, and calls `observe`
5314 * or `do` methods accordingly.
5315 * @param {Observer|function(value: T): void} nextOrObserver An Observer or
5316 * the `next` callback.
5317 * @param {function(err: any): void} [error] An Observer `error` callback.
5318 * @param {function(): void} [complete] An Observer `complete` callback.
5321 Notification.prototype.accept = function (nextOrObserver, error, complete) {
5322 if (nextOrObserver && typeof nextOrObserver.next === 'function') {
5323 return this.observe(nextOrObserver);
5326 return this.do(nextOrObserver, error, complete);
5330 * Returns a simple Observable that just delivers the notification represented
5331 * by this Notification instance.
5334 Notification.prototype.toObservable = function () {
5335 var kind = this.kind;
5338 return Observable_1.Observable.of(this.value);
5340 return Observable_1.Observable.throw(this.error);
5342 return Observable_1.Observable.empty();
5344 throw new Error('unexpected notification kind value');
5347 * A shortcut to create a Notification instance of the type `next` from a
5349 * @param {T} value The `next` value.
5350 * @return {Notification<T>} The "next" Notification representing the
5353 Notification.createNext = function (value) {
5354 if (typeof value !== 'undefined') {
5355 return new Notification('N', value);
5357 return this.undefinedValueNotification;
5360 * A shortcut to create a Notification instance of the type `error` from a
5362 * @param {any} [err] The `error` error.
5363 * @return {Notification<T>} The "error" Notification representing the
5366 Notification.createError = function (err) {
5367 return new Notification('E', undefined, err);
5370 * A shortcut to create a Notification instance of the type `complete`.
5371 * @return {Notification<any>} The valueless "complete" Notification.
5373 Notification.createComplete = function () {
5374 return this.completeNotification;
5376 Notification.completeNotification = new Notification('C');
5377 Notification.undefinedValueNotification = new Notification('N', undefined);
5378 return Notification;
5380 exports.Notification = Notification;
5382 },{"./Observable":28}],28:[function(require,module,exports){
5384 var root_1 = require('./util/root');
5385 var toSubscriber_1 = require('./util/toSubscriber');
5386 var observable_1 = require('./symbol/observable');
5388 * A representation of any set of values over any amount of time. This the most basic building block
5391 * @class Observable<T>
5393 var Observable = (function () {
5396 * @param {Function} subscribe the function that is called when the Observable is
5397 * initially subscribed to. This function is given a Subscriber, to which new values
5398 * can be `next`ed, or an `error` method can be called to raise an error, or
5399 * `complete` can be called to notify of a successful completion.
5401 function Observable(subscribe) {
5402 this._isScalar = false;
5404 this._subscribe = subscribe;
5408 * Creates a new Observable, with this Observable as the source, and the passed
5409 * operator defined as the new observable's operator.
5411 * @param {Operator} operator the operator defining the operation to take on the observable
5412 * @return {Observable} a new observable with the Operator applied
5414 Observable.prototype.lift = function (operator) {
5415 var observable = new Observable();
5416 observable.source = this;
5417 observable.operator = operator;
5420 Observable.prototype.subscribe = function (observerOrNext, error, complete) {
5421 var operator = this.operator;
5422 var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete);
5424 operator.call(sink, this.source);
5427 sink.add(this._trySubscribe(sink));
5429 if (sink.syncErrorThrowable) {
5430 sink.syncErrorThrowable = false;
5431 if (sink.syncErrorThrown) {
5432 throw sink.syncErrorValue;
5437 Observable.prototype._trySubscribe = function (sink) {
5439 return this._subscribe(sink);
5442 sink.syncErrorThrown = true;
5443 sink.syncErrorValue = err;
5449 * @param {Function} next a handler for each value emitted by the observable
5450 * @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise
5451 * @return {Promise} a promise that either resolves on observable completion or
5452 * rejects with the handled error
5454 Observable.prototype.forEach = function (next, PromiseCtor) {
5457 if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {
5458 PromiseCtor = root_1.root.Rx.config.Promise;
5460 else if (root_1.root.Promise) {
5461 PromiseCtor = root_1.root.Promise;
5465 throw new Error('no Promise impl found');
5467 return new PromiseCtor(function (resolve, reject) {
5468 var subscription = _this.subscribe(function (value) {
5470 // if there is a subscription, then we can surmise
5471 // the next handling is asynchronous. Any errors thrown
5472 // need to be rejected explicitly and unsubscribe must be
5479 subscription.unsubscribe();
5483 // if there is NO subscription, then we're getting a nexted
5484 // value synchronously during subscription. We can just call it.
5485 // If it errors, Observable's `subscribe` will ensure the
5486 // unsubscription logic is called, then synchronously rethrow the error.
5487 // After that, Promise will trap the error and send it
5488 // down the rejection path.
5491 }, reject, resolve);
5494 Observable.prototype._subscribe = function (subscriber) {
5495 return this.source.subscribe(subscriber);
5498 * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable
5499 * @method Symbol.observable
5500 * @return {Observable} this instance of the observable
5502 Observable.prototype[observable_1.$$observable] = function () {
5505 // HACK: Since TypeScript inherits static properties too, we have to
5506 // fight against TypeScript here so Subject can have a different static create signature
5508 * Creates a new cold Observable by calling the Observable constructor
5512 * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor
5513 * @return {Observable} a new cold observable
5515 Observable.create = function (subscribe) {
5516 return new Observable(subscribe);
5520 exports.Observable = Observable;
5522 },{"./symbol/observable":153,"./util/root":170,"./util/toSubscriber":172}],29:[function(require,module,exports){
5526 next: function (value) { },
5527 error: function (err) { throw err; },
5528 complete: function () { }
5531 },{}],30:[function(require,module,exports){
5533 var __extends = (this && this.__extends) || function (d, b) {
5534 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
5535 function __() { this.constructor = d; }
5536 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
5538 var Subscriber_1 = require('./Subscriber');
5540 * We need this JSDoc comment for affecting ESDoc.
5542 * @extends {Ignored}
5544 var OuterSubscriber = (function (_super) {
5545 __extends(OuterSubscriber, _super);
5546 function OuterSubscriber() {
5547 _super.apply(this, arguments);
5549 OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
5550 this.destination.next(innerValue);
5552 OuterSubscriber.prototype.notifyError = function (error, innerSub) {
5553 this.destination.error(error);
5555 OuterSubscriber.prototype.notifyComplete = function (innerSub) {
5556 this.destination.complete();
5558 return OuterSubscriber;
5559 }(Subscriber_1.Subscriber));
5560 exports.OuterSubscriber = OuterSubscriber;
5562 },{"./Subscriber":35}],31:[function(require,module,exports){
5564 var __extends = (this && this.__extends) || function (d, b) {
5565 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
5566 function __() { this.constructor = d; }
5567 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
5569 var Subject_1 = require('./Subject');
5570 var queue_1 = require('./scheduler/queue');
5571 var Subscription_1 = require('./Subscription');
5572 var observeOn_1 = require('./operator/observeOn');
5573 var ObjectUnsubscribedError_1 = require('./util/ObjectUnsubscribedError');
5574 var SubjectSubscription_1 = require('./SubjectSubscription');
5576 * @class ReplaySubject<T>
5578 var ReplaySubject = (function (_super) {
5579 __extends(ReplaySubject, _super);
5580 function ReplaySubject(bufferSize, windowTime, scheduler) {
5581 if (bufferSize === void 0) { bufferSize = Number.POSITIVE_INFINITY; }
5582 if (windowTime === void 0) { windowTime = Number.POSITIVE_INFINITY; }
5584 this.scheduler = scheduler;
5586 this._bufferSize = bufferSize < 1 ? 1 : bufferSize;
5587 this._windowTime = windowTime < 1 ? 1 : windowTime;
5589 ReplaySubject.prototype.next = function (value) {
5590 var now = this._getNow();
5591 this._events.push(new ReplayEvent(now, value));
5592 this._trimBufferThenGetEvents();
5593 _super.prototype.next.call(this, value);
5595 ReplaySubject.prototype._subscribe = function (subscriber) {
5596 var _events = this._trimBufferThenGetEvents();
5597 var scheduler = this.scheduler;
5600 throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
5602 else if (this.hasError) {
5603 subscription = Subscription_1.Subscription.EMPTY;
5605 else if (this.isStopped) {
5606 subscription = Subscription_1.Subscription.EMPTY;
5609 this.observers.push(subscriber);
5610 subscription = new SubjectSubscription_1.SubjectSubscription(this, subscriber);
5613 subscriber.add(subscriber = new observeOn_1.ObserveOnSubscriber(subscriber, scheduler));
5615 var len = _events.length;
5616 for (var i = 0; i < len && !subscriber.closed; i++) {
5617 subscriber.next(_events[i].value);
5619 if (this.hasError) {
5620 subscriber.error(this.thrownError);
5622 else if (this.isStopped) {
5623 subscriber.complete();
5625 return subscription;
5627 ReplaySubject.prototype._getNow = function () {
5628 return (this.scheduler || queue_1.queue).now();
5630 ReplaySubject.prototype._trimBufferThenGetEvents = function () {
5631 var now = this._getNow();
5632 var _bufferSize = this._bufferSize;
5633 var _windowTime = this._windowTime;
5634 var _events = this._events;
5635 var eventsCount = _events.length;
5636 var spliceCount = 0;
5637 // Trim events that fall out of the time window.
5638 // Start at the front of the list. Break early once
5639 // we encounter an event that falls within the window.
5640 while (spliceCount < eventsCount) {
5641 if ((now - _events[spliceCount].time) < _windowTime) {
5646 if (eventsCount > _bufferSize) {
5647 spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);
5649 if (spliceCount > 0) {
5650 _events.splice(0, spliceCount);
5654 return ReplaySubject;
5655 }(Subject_1.Subject));
5656 exports.ReplaySubject = ReplaySubject;
5657 var ReplayEvent = (function () {
5658 function ReplayEvent(time, value) {
5665 },{"./Subject":33,"./SubjectSubscription":34,"./Subscription":36,"./operator/observeOn":128,"./scheduler/queue":151,"./util/ObjectUnsubscribedError":158}],32:[function(require,module,exports){
5668 * An execution context and a data structure to order tasks and schedule their
5669 * execution. Provides a notion of (potentially virtual) time, through the
5670 * `now()` getter method.
5672 * Each unit of work in a Scheduler is called an {@link Action}.
5677 * schedule(work, delay?, state?): Subscription;
5683 var Scheduler = (function () {
5684 function Scheduler(SchedulerAction, now) {
5685 if (now === void 0) { now = Scheduler.now; }
5686 this.SchedulerAction = SchedulerAction;
5690 * Schedules a function, `work`, for execution. May happen at some point in
5691 * the future, according to the `delay` parameter, if specified. May be passed
5692 * some context object, `state`, which will be passed to the `work` function.
5694 * The given arguments will be processed an stored as an Action object in a
5697 * @param {function(state: ?T): ?Subscription} work A function representing a
5698 * task, or some unit of work to be executed by the Scheduler.
5699 * @param {number} [delay] Time to wait before executing the work, where the
5700 * time unit is implicit and defined by the Scheduler itself.
5701 * @param {T} [state] Some contextual data that the `work` function uses when
5702 * called by the Scheduler.
5703 * @return {Subscription} A subscription in order to be able to unsubscribe
5704 * the scheduled work.
5706 Scheduler.prototype.schedule = function (work, delay, state) {
5707 if (delay === void 0) { delay = 0; }
5708 return new this.SchedulerAction(this, work).schedule(state, delay);
5710 Scheduler.now = Date.now ? Date.now : function () { return +new Date(); };
5713 exports.Scheduler = Scheduler;
5715 },{}],33:[function(require,module,exports){
5717 var __extends = (this && this.__extends) || function (d, b) {
5718 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
5719 function __() { this.constructor = d; }
5720 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
5722 var Observable_1 = require('./Observable');
5723 var Subscriber_1 = require('./Subscriber');
5724 var Subscription_1 = require('./Subscription');
5725 var ObjectUnsubscribedError_1 = require('./util/ObjectUnsubscribedError');
5726 var SubjectSubscription_1 = require('./SubjectSubscription');
5727 var rxSubscriber_1 = require('./symbol/rxSubscriber');
5729 * @class SubjectSubscriber<T>
5731 var SubjectSubscriber = (function (_super) {
5732 __extends(SubjectSubscriber, _super);
5733 function SubjectSubscriber(destination) {
5734 _super.call(this, destination);
5735 this.destination = destination;
5737 return SubjectSubscriber;
5738 }(Subscriber_1.Subscriber));
5739 exports.SubjectSubscriber = SubjectSubscriber;
5743 var Subject = (function (_super) {
5744 __extends(Subject, _super);
5745 function Subject() {
5747 this.observers = [];
5748 this.closed = false;
5749 this.isStopped = false;
5750 this.hasError = false;
5751 this.thrownError = null;
5753 Subject.prototype[rxSubscriber_1.$$rxSubscriber] = function () {
5754 return new SubjectSubscriber(this);
5756 Subject.prototype.lift = function (operator) {
5757 var subject = new AnonymousSubject(this, this);
5758 subject.operator = operator;
5761 Subject.prototype.next = function (value) {
5763 throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
5765 if (!this.isStopped) {
5766 var observers = this.observers;
5767 var len = observers.length;
5768 var copy = observers.slice();
5769 for (var i = 0; i < len; i++) {
5770 copy[i].next(value);
5774 Subject.prototype.error = function (err) {
5776 throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
5778 this.hasError = true;
5779 this.thrownError = err;
5780 this.isStopped = true;
5781 var observers = this.observers;
5782 var len = observers.length;
5783 var copy = observers.slice();
5784 for (var i = 0; i < len; i++) {
5787 this.observers.length = 0;
5789 Subject.prototype.complete = function () {
5791 throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
5793 this.isStopped = true;
5794 var observers = this.observers;
5795 var len = observers.length;
5796 var copy = observers.slice();
5797 for (var i = 0; i < len; i++) {
5800 this.observers.length = 0;
5802 Subject.prototype.unsubscribe = function () {
5803 this.isStopped = true;
5805 this.observers = null;
5807 Subject.prototype._trySubscribe = function (subscriber) {
5809 throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
5812 return _super.prototype._trySubscribe.call(this, subscriber);
5815 Subject.prototype._subscribe = function (subscriber) {
5817 throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
5819 else if (this.hasError) {
5820 subscriber.error(this.thrownError);
5821 return Subscription_1.Subscription.EMPTY;
5823 else if (this.isStopped) {
5824 subscriber.complete();
5825 return Subscription_1.Subscription.EMPTY;
5828 this.observers.push(subscriber);
5829 return new SubjectSubscription_1.SubjectSubscription(this, subscriber);
5832 Subject.prototype.asObservable = function () {
5833 var observable = new Observable_1.Observable();
5834 observable.source = this;
5837 Subject.create = function (destination, source) {
5838 return new AnonymousSubject(destination, source);
5841 }(Observable_1.Observable));
5842 exports.Subject = Subject;
5844 * @class AnonymousSubject<T>
5846 var AnonymousSubject = (function (_super) {
5847 __extends(AnonymousSubject, _super);
5848 function AnonymousSubject(destination, source) {
5850 this.destination = destination;
5851 this.source = source;
5853 AnonymousSubject.prototype.next = function (value) {
5854 var destination = this.destination;
5855 if (destination && destination.next) {
5856 destination.next(value);
5859 AnonymousSubject.prototype.error = function (err) {
5860 var destination = this.destination;
5861 if (destination && destination.error) {
5862 this.destination.error(err);
5865 AnonymousSubject.prototype.complete = function () {
5866 var destination = this.destination;
5867 if (destination && destination.complete) {
5868 this.destination.complete();
5871 AnonymousSubject.prototype._subscribe = function (subscriber) {
5872 var source = this.source;
5874 return this.source.subscribe(subscriber);
5877 return Subscription_1.Subscription.EMPTY;
5880 return AnonymousSubject;
5882 exports.AnonymousSubject = AnonymousSubject;
5884 },{"./Observable":28,"./SubjectSubscription":34,"./Subscriber":35,"./Subscription":36,"./symbol/rxSubscriber":154,"./util/ObjectUnsubscribedError":158}],34:[function(require,module,exports){
5886 var __extends = (this && this.__extends) || function (d, b) {
5887 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
5888 function __() { this.constructor = d; }
5889 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
5891 var Subscription_1 = require('./Subscription');
5893 * We need this JSDoc comment for affecting ESDoc.
5895 * @extends {Ignored}
5897 var SubjectSubscription = (function (_super) {
5898 __extends(SubjectSubscription, _super);
5899 function SubjectSubscription(subject, subscriber) {
5901 this.subject = subject;
5902 this.subscriber = subscriber;
5903 this.closed = false;
5905 SubjectSubscription.prototype.unsubscribe = function () {
5910 var subject = this.subject;
5911 var observers = subject.observers;
5912 this.subject = null;
5913 if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
5916 var subscriberIndex = observers.indexOf(this.subscriber);
5917 if (subscriberIndex !== -1) {
5918 observers.splice(subscriberIndex, 1);
5921 return SubjectSubscription;
5922 }(Subscription_1.Subscription));
5923 exports.SubjectSubscription = SubjectSubscription;
5925 },{"./Subscription":36}],35:[function(require,module,exports){
5927 var __extends = (this && this.__extends) || function (d, b) {
5928 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
5929 function __() { this.constructor = d; }
5930 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
5932 var isFunction_1 = require('./util/isFunction');
5933 var Subscription_1 = require('./Subscription');
5934 var Observer_1 = require('./Observer');
5935 var rxSubscriber_1 = require('./symbol/rxSubscriber');
5937 * Implements the {@link Observer} interface and extends the
5938 * {@link Subscription} class. While the {@link Observer} is the public API for
5939 * consuming the values of an {@link Observable}, all Observers get converted to
5940 * a Subscriber, in order to provide Subscription-like capabilities such as
5941 * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for
5942 * implementing operators, but it is rarely used as a public API.
5944 * @class Subscriber<T>
5946 var Subscriber = (function (_super) {
5947 __extends(Subscriber, _super);
5949 * @param {Observer|function(value: T): void} [destinationOrNext] A partially
5950 * defined Observer or a `next` callback function.
5951 * @param {function(e: ?any): void} [error] The `error` callback of an
5953 * @param {function(): void} [complete] The `complete` callback of an
5956 function Subscriber(destinationOrNext, error, complete) {
5958 this.syncErrorValue = null;
5959 this.syncErrorThrown = false;
5960 this.syncErrorThrowable = false;
5961 this.isStopped = false;
5962 switch (arguments.length) {
5964 this.destination = Observer_1.empty;
5967 if (!destinationOrNext) {
5968 this.destination = Observer_1.empty;
5971 if (typeof destinationOrNext === 'object') {
5972 if (destinationOrNext instanceof Subscriber) {
5973 this.destination = destinationOrNext;
5974 this.destination.add(this);
5977 this.syncErrorThrowable = true;
5978 this.destination = new SafeSubscriber(this, destinationOrNext);
5983 this.syncErrorThrowable = true;
5984 this.destination = new SafeSubscriber(this, destinationOrNext, error, complete);
5988 Subscriber.prototype[rxSubscriber_1.$$rxSubscriber] = function () { return this; };
5990 * A static factory for a Subscriber, given a (potentially partial) definition
5992 * @param {function(x: ?T): void} [next] The `next` callback of an Observer.
5993 * @param {function(e: ?any): void} [error] The `error` callback of an
5995 * @param {function(): void} [complete] The `complete` callback of an
5997 * @return {Subscriber<T>} A Subscriber wrapping the (partially defined)
5998 * Observer represented by the given arguments.
6000 Subscriber.create = function (next, error, complete) {
6001 var subscriber = new Subscriber(next, error, complete);
6002 subscriber.syncErrorThrowable = false;
6006 * The {@link Observer} callback to receive notifications of type `next` from
6007 * the Observable, with a value. The Observable may call this method 0 or more
6009 * @param {T} [value] The `next` value.
6012 Subscriber.prototype.next = function (value) {
6013 if (!this.isStopped) {
6018 * The {@link Observer} callback to receive notifications of type `error` from
6019 * the Observable, with an attached {@link Error}. Notifies the Observer that
6020 * the Observable has experienced an error condition.
6021 * @param {any} [err] The `error` exception.
6024 Subscriber.prototype.error = function (err) {
6025 if (!this.isStopped) {
6026 this.isStopped = true;
6031 * The {@link Observer} callback to receive a valueless notification of type
6032 * `complete` from the Observable. Notifies the Observer that the Observable
6033 * has finished sending push-based notifications.
6036 Subscriber.prototype.complete = function () {
6037 if (!this.isStopped) {
6038 this.isStopped = true;
6042 Subscriber.prototype.unsubscribe = function () {
6046 this.isStopped = true;
6047 _super.prototype.unsubscribe.call(this);
6049 Subscriber.prototype._next = function (value) {
6050 this.destination.next(value);
6052 Subscriber.prototype._error = function (err) {
6053 this.destination.error(err);
6056 Subscriber.prototype._complete = function () {
6057 this.destination.complete();
6060 Subscriber.prototype._unsubscribeAndRecycle = function () {
6061 var _a = this, _parent = _a._parent, _parents = _a._parents;
6062 this._parent = null;
6063 this._parents = null;
6065 this.closed = false;
6066 this.isStopped = false;
6067 this._parent = _parent;
6068 this._parents = _parents;
6072 }(Subscription_1.Subscription));
6073 exports.Subscriber = Subscriber;
6075 * We need this JSDoc comment for affecting ESDoc.
6077 * @extends {Ignored}
6079 var SafeSubscriber = (function (_super) {
6080 __extends(SafeSubscriber, _super);
6081 function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {
6083 this._parentSubscriber = _parentSubscriber;
6086 if (isFunction_1.isFunction(observerOrNext)) {
6087 next = observerOrNext;
6089 else if (observerOrNext) {
6090 context = observerOrNext;
6091 next = observerOrNext.next;
6092 error = observerOrNext.error;
6093 complete = observerOrNext.complete;
6094 if (isFunction_1.isFunction(context.unsubscribe)) {
6095 this.add(context.unsubscribe.bind(context));
6097 context.unsubscribe = this.unsubscribe.bind(this);
6099 this._context = context;
6101 this._error = error;
6102 this._complete = complete;
6104 SafeSubscriber.prototype.next = function (value) {
6105 if (!this.isStopped && this._next) {
6106 var _parentSubscriber = this._parentSubscriber;
6107 if (!_parentSubscriber.syncErrorThrowable) {
6108 this.__tryOrUnsub(this._next, value);
6110 else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
6115 SafeSubscriber.prototype.error = function (err) {
6116 if (!this.isStopped) {
6117 var _parentSubscriber = this._parentSubscriber;
6119 if (!_parentSubscriber.syncErrorThrowable) {
6120 this.__tryOrUnsub(this._error, err);
6124 this.__tryOrSetError(_parentSubscriber, this._error, err);
6128 else if (!_parentSubscriber.syncErrorThrowable) {
6133 _parentSubscriber.syncErrorValue = err;
6134 _parentSubscriber.syncErrorThrown = true;
6139 SafeSubscriber.prototype.complete = function () {
6140 if (!this.isStopped) {
6141 var _parentSubscriber = this._parentSubscriber;
6142 if (this._complete) {
6143 if (!_parentSubscriber.syncErrorThrowable) {
6144 this.__tryOrUnsub(this._complete);
6148 this.__tryOrSetError(_parentSubscriber, this._complete);
6157 SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {
6159 fn.call(this._context, value);
6166 SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {
6168 fn.call(this._context, value);
6171 parent.syncErrorValue = err;
6172 parent.syncErrorThrown = true;
6177 SafeSubscriber.prototype._unsubscribe = function () {
6178 var _parentSubscriber = this._parentSubscriber;
6179 this._context = null;
6180 this._parentSubscriber = null;
6181 _parentSubscriber.unsubscribe();
6183 return SafeSubscriber;
6186 },{"./Observer":29,"./Subscription":36,"./symbol/rxSubscriber":154,"./util/isFunction":165}],36:[function(require,module,exports){
6188 var isArray_1 = require('./util/isArray');
6189 var isObject_1 = require('./util/isObject');
6190 var isFunction_1 = require('./util/isFunction');
6191 var tryCatch_1 = require('./util/tryCatch');
6192 var errorObject_1 = require('./util/errorObject');
6193 var UnsubscriptionError_1 = require('./util/UnsubscriptionError');
6195 * Represents a disposable resource, such as the execution of an Observable. A
6196 * Subscription has one important method, `unsubscribe`, that takes no argument
6197 * and just disposes the resource held by the subscription.
6199 * Additionally, subscriptions may be grouped together through the `add()`
6200 * method, which will attach a child Subscription to the current Subscription.
6201 * When a Subscription is unsubscribed, all its children (and its grandchildren)
6202 * will be unsubscribed as well.
6204 * @class Subscription
6206 var Subscription = (function () {
6208 * @param {function(): void} [unsubscribe] A function describing how to
6209 * perform the disposal of resources when the `unsubscribe` method is called.
6211 function Subscription(unsubscribe) {
6213 * A flag to indicate whether this Subscription has already been unsubscribed.
6216 this.closed = false;
6217 this._parent = null;
6218 this._parents = null;
6219 this._subscriptions = null;
6221 this._unsubscribe = unsubscribe;
6225 * Disposes the resources held by the subscription. May, for instance, cancel
6226 * an ongoing Observable execution or cancel any other type of work that
6227 * started when the Subscription was created.
6230 Subscription.prototype.unsubscribe = function () {
6231 var hasErrors = false;
6236 var _a = this, _parent = _a._parent, _parents = _a._parents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;
6238 this._parent = null;
6239 this._parents = null;
6240 // null out _subscriptions first so any child subscriptions that attempt
6241 // to remove themselves from this subscription will noop
6242 this._subscriptions = null;
6244 var len = _parents ? _parents.length : 0;
6245 // if this._parent is null, then so is this._parents, and we
6246 // don't have to remove ourselves from any parent subscriptions.
6248 _parent.remove(this);
6249 // if this._parents is null or index >= len,
6250 // then _parent is set to null, and the loop exits
6251 _parent = ++index < len && _parents[index] || null;
6253 if (isFunction_1.isFunction(_unsubscribe)) {
6254 var trial = tryCatch_1.tryCatch(_unsubscribe).call(this);
6255 if (trial === errorObject_1.errorObject) {
6257 errors = errors || (errorObject_1.errorObject.e instanceof UnsubscriptionError_1.UnsubscriptionError ?
6258 flattenUnsubscriptionErrors(errorObject_1.errorObject.e.errors) : [errorObject_1.errorObject.e]);
6261 if (isArray_1.isArray(_subscriptions)) {
6263 len = _subscriptions.length;
6264 while (++index < len) {
6265 var sub = _subscriptions[index];
6266 if (isObject_1.isObject(sub)) {
6267 var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub);
6268 if (trial === errorObject_1.errorObject) {
6270 errors = errors || [];
6271 var err = errorObject_1.errorObject.e;
6272 if (err instanceof UnsubscriptionError_1.UnsubscriptionError) {
6273 errors = errors.concat(flattenUnsubscriptionErrors(err.errors));
6283 throw new UnsubscriptionError_1.UnsubscriptionError(errors);
6287 * Adds a tear down to be called during the unsubscribe() of this
6290 * If the tear down being added is a subscription that is already
6291 * unsubscribed, is the same reference `add` is being called on, or is
6292 * `Subscription.EMPTY`, it will not be added.
6294 * If this subscription is already in an `closed` state, the passed
6295 * tear down logic will be executed immediately.
6297 * @param {TeardownLogic} teardown The additional logic to execute on
6299 * @return {Subscription} Returns the Subscription used or created to be
6300 * added to the inner subscriptions list. This Subscription can be used with
6301 * `remove()` to remove the passed teardown logic from the inner subscriptions
6304 Subscription.prototype.add = function (teardown) {
6305 if (!teardown || (teardown === Subscription.EMPTY)) {
6306 return Subscription.EMPTY;
6308 if (teardown === this) {
6311 var subscription = teardown;
6312 switch (typeof teardown) {
6314 subscription = new Subscription(teardown);
6316 if (subscription.closed || typeof subscription.unsubscribe !== 'function') {
6317 return subscription;
6319 else if (this.closed) {
6320 subscription.unsubscribe();
6321 return subscription;
6323 else if (typeof subscription._addParent !== 'function' /* quack quack */) {
6324 var tmp = subscription;
6325 subscription = new Subscription();
6326 subscription._subscriptions = [tmp];
6330 throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
6332 var subscriptions = this._subscriptions || (this._subscriptions = []);
6333 subscriptions.push(subscription);
6334 subscription._addParent(this);
6335 return subscription;
6338 * Removes a Subscription from the internal list of subscriptions that will
6339 * unsubscribe during the unsubscribe process of this Subscription.
6340 * @param {Subscription} subscription The subscription to remove.
6343 Subscription.prototype.remove = function (subscription) {
6344 var subscriptions = this._subscriptions;
6345 if (subscriptions) {
6346 var subscriptionIndex = subscriptions.indexOf(subscription);
6347 if (subscriptionIndex !== -1) {
6348 subscriptions.splice(subscriptionIndex, 1);
6352 Subscription.prototype._addParent = function (parent) {
6353 var _a = this, _parent = _a._parent, _parents = _a._parents;
6354 if (!_parent || _parent === parent) {
6355 // If we don't have a parent, or the new parent is the same as the
6356 // current parent, then set this._parent to the new parent.
6357 this._parent = parent;
6359 else if (!_parents) {
6360 // If there's already one parent, but not multiple, allocate an Array to
6361 // store the rest of the parent Subscriptions.
6362 this._parents = [parent];
6364 else if (_parents.indexOf(parent) === -1) {
6365 // Only add the new parent to the _parents list if it's not already there.
6366 _parents.push(parent);
6369 Subscription.EMPTY = (function (empty) {
6370 empty.closed = true;
6372 }(new Subscription()));
6373 return Subscription;
6375 exports.Subscription = Subscription;
6376 function flattenUnsubscriptionErrors(errors) {
6377 return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError_1.UnsubscriptionError) ? err.errors : err); }, []);
6380 },{"./util/UnsubscriptionError":160,"./util/errorObject":161,"./util/isArray":162,"./util/isFunction":165,"./util/isObject":167,"./util/tryCatch":173}],37:[function(require,module,exports){
6382 var Observable_1 = require('../../Observable');
6383 var combineLatest_1 = require('../../observable/combineLatest');
6384 Observable_1.Observable.combineLatest = combineLatest_1.combineLatest;
6386 },{"../../Observable":28,"../../observable/combineLatest":96}],38:[function(require,module,exports){
6388 var Observable_1 = require('../../Observable');
6389 var defer_1 = require('../../observable/defer');
6390 Observable_1.Observable.defer = defer_1.defer;
6392 },{"../../Observable":28,"../../observable/defer":97}],39:[function(require,module,exports){
6394 var Observable_1 = require('../../Observable');
6395 var empty_1 = require('../../observable/empty');
6396 Observable_1.Observable.empty = empty_1.empty;
6398 },{"../../Observable":28,"../../observable/empty":98}],40:[function(require,module,exports){
6400 var Observable_1 = require('../../Observable');
6401 var from_1 = require('../../observable/from');
6402 Observable_1.Observable.from = from_1.from;
6404 },{"../../Observable":28,"../../observable/from":99}],41:[function(require,module,exports){
6406 var Observable_1 = require('../../Observable');
6407 var fromEvent_1 = require('../../observable/fromEvent');
6408 Observable_1.Observable.fromEvent = fromEvent_1.fromEvent;
6410 },{"../../Observable":28,"../../observable/fromEvent":100}],42:[function(require,module,exports){
6412 var Observable_1 = require('../../Observable');
6413 var fromPromise_1 = require('../../observable/fromPromise');
6414 Observable_1.Observable.fromPromise = fromPromise_1.fromPromise;
6416 },{"../../Observable":28,"../../observable/fromPromise":101}],43:[function(require,module,exports){
6418 var Observable_1 = require('../../Observable');
6419 var merge_1 = require('../../observable/merge');
6420 Observable_1.Observable.merge = merge_1.merge;
6422 },{"../../Observable":28,"../../observable/merge":102}],44:[function(require,module,exports){
6424 var Observable_1 = require('../../Observable');
6425 var of_1 = require('../../observable/of');
6426 Observable_1.Observable.of = of_1.of;
6428 },{"../../Observable":28,"../../observable/of":103}],45:[function(require,module,exports){
6430 var Observable_1 = require('../../Observable');
6431 var throw_1 = require('../../observable/throw');
6432 Observable_1.Observable.throw = throw_1._throw;
6434 },{"../../Observable":28,"../../observable/throw":104}],46:[function(require,module,exports){
6436 var Observable_1 = require('../../Observable');
6437 var timer_1 = require('../../observable/timer');
6438 Observable_1.Observable.timer = timer_1.timer;
6440 },{"../../Observable":28,"../../observable/timer":105}],47:[function(require,module,exports){
6442 var Observable_1 = require('../../Observable');
6443 var zip_1 = require('../../observable/zip');
6444 Observable_1.Observable.zip = zip_1.zip;
6446 },{"../../Observable":28,"../../observable/zip":106}],48:[function(require,module,exports){
6448 var Observable_1 = require('../../Observable');
6449 var buffer_1 = require('../../operator/buffer');
6450 Observable_1.Observable.prototype.buffer = buffer_1.buffer;
6452 },{"../../Observable":28,"../../operator/buffer":107}],49:[function(require,module,exports){
6454 var Observable_1 = require('../../Observable');
6455 var bufferCount_1 = require('../../operator/bufferCount');
6456 Observable_1.Observable.prototype.bufferCount = bufferCount_1.bufferCount;
6458 },{"../../Observable":28,"../../operator/bufferCount":108}],50:[function(require,module,exports){
6460 var Observable_1 = require('../../Observable');
6461 var bufferWhen_1 = require('../../operator/bufferWhen');
6462 Observable_1.Observable.prototype.bufferWhen = bufferWhen_1.bufferWhen;
6464 },{"../../Observable":28,"../../operator/bufferWhen":109}],51:[function(require,module,exports){
6466 var Observable_1 = require('../../Observable');
6467 var catch_1 = require('../../operator/catch');
6468 Observable_1.Observable.prototype.catch = catch_1._catch;
6469 Observable_1.Observable.prototype._catch = catch_1._catch;
6471 },{"../../Observable":28,"../../operator/catch":110}],52:[function(require,module,exports){
6473 var Observable_1 = require('../../Observable');
6474 var combineLatest_1 = require('../../operator/combineLatest');
6475 Observable_1.Observable.prototype.combineLatest = combineLatest_1.combineLatest;
6477 },{"../../Observable":28,"../../operator/combineLatest":111}],53:[function(require,module,exports){
6479 var Observable_1 = require('../../Observable');
6480 var concat_1 = require('../../operator/concat');
6481 Observable_1.Observable.prototype.concat = concat_1.concat;
6483 },{"../../Observable":28,"../../operator/concat":112}],54:[function(require,module,exports){
6485 var Observable_1 = require('../../Observable');
6486 var debounceTime_1 = require('../../operator/debounceTime');
6487 Observable_1.Observable.prototype.debounceTime = debounceTime_1.debounceTime;
6489 },{"../../Observable":28,"../../operator/debounceTime":113}],55:[function(require,module,exports){
6491 var Observable_1 = require('../../Observable');
6492 var delay_1 = require('../../operator/delay');
6493 Observable_1.Observable.prototype.delay = delay_1.delay;
6495 },{"../../Observable":28,"../../operator/delay":114}],56:[function(require,module,exports){
6497 var Observable_1 = require('../../Observable');
6498 var distinct_1 = require('../../operator/distinct');
6499 Observable_1.Observable.prototype.distinct = distinct_1.distinct;
6501 },{"../../Observable":28,"../../operator/distinct":115}],57:[function(require,module,exports){
6503 var Observable_1 = require('../../Observable');
6504 var distinctUntilChanged_1 = require('../../operator/distinctUntilChanged');
6505 Observable_1.Observable.prototype.distinctUntilChanged = distinctUntilChanged_1.distinctUntilChanged;
6507 },{"../../Observable":28,"../../operator/distinctUntilChanged":116}],58:[function(require,module,exports){
6509 var Observable_1 = require('../../Observable');
6510 var do_1 = require('../../operator/do');
6511 Observable_1.Observable.prototype.do = do_1._do;
6512 Observable_1.Observable.prototype._do = do_1._do;
6514 },{"../../Observable":28,"../../operator/do":117}],59:[function(require,module,exports){
6516 var Observable_1 = require('../../Observable');
6517 var expand_1 = require('../../operator/expand');
6518 Observable_1.Observable.prototype.expand = expand_1.expand;
6520 },{"../../Observable":28,"../../operator/expand":118}],60:[function(require,module,exports){
6522 var Observable_1 = require('../../Observable');
6523 var filter_1 = require('../../operator/filter');
6524 Observable_1.Observable.prototype.filter = filter_1.filter;
6526 },{"../../Observable":28,"../../operator/filter":119}],61:[function(require,module,exports){
6528 var Observable_1 = require('../../Observable');
6529 var finally_1 = require('../../operator/finally');
6530 Observable_1.Observable.prototype.finally = finally_1._finally;
6531 Observable_1.Observable.prototype._finally = finally_1._finally;
6533 },{"../../Observable":28,"../../operator/finally":120}],62:[function(require,module,exports){
6535 var Observable_1 = require('../../Observable');
6536 var first_1 = require('../../operator/first');
6537 Observable_1.Observable.prototype.first = first_1.first;
6539 },{"../../Observable":28,"../../operator/first":121}],63:[function(require,module,exports){
6541 var Observable_1 = require('../../Observable');
6542 var last_1 = require('../../operator/last');
6543 Observable_1.Observable.prototype.last = last_1.last;
6545 },{"../../Observable":28,"../../operator/last":122}],64:[function(require,module,exports){
6547 var Observable_1 = require('../../Observable');
6548 var map_1 = require('../../operator/map');
6549 Observable_1.Observable.prototype.map = map_1.map;
6551 },{"../../Observable":28,"../../operator/map":123}],65:[function(require,module,exports){
6553 var Observable_1 = require('../../Observable');
6554 var merge_1 = require('../../operator/merge');
6555 Observable_1.Observable.prototype.merge = merge_1.merge;
6557 },{"../../Observable":28,"../../operator/merge":124}],66:[function(require,module,exports){
6559 var Observable_1 = require('../../Observable');
6560 var mergeAll_1 = require('../../operator/mergeAll');
6561 Observable_1.Observable.prototype.mergeAll = mergeAll_1.mergeAll;
6563 },{"../../Observable":28,"../../operator/mergeAll":125}],67:[function(require,module,exports){
6565 var Observable_1 = require('../../Observable');
6566 var mergeMap_1 = require('../../operator/mergeMap');
6567 Observable_1.Observable.prototype.mergeMap = mergeMap_1.mergeMap;
6568 Observable_1.Observable.prototype.flatMap = mergeMap_1.mergeMap;
6570 },{"../../Observable":28,"../../operator/mergeMap":126}],68:[function(require,module,exports){
6572 var Observable_1 = require('../../Observable');
6573 var pairwise_1 = require('../../operator/pairwise');
6574 Observable_1.Observable.prototype.pairwise = pairwise_1.pairwise;
6576 },{"../../Observable":28,"../../operator/pairwise":129}],69:[function(require,module,exports){
6578 var Observable_1 = require('../../Observable');
6579 var pluck_1 = require('../../operator/pluck');
6580 Observable_1.Observable.prototype.pluck = pluck_1.pluck;
6582 },{"../../Observable":28,"../../operator/pluck":130}],70:[function(require,module,exports){
6584 var Observable_1 = require('../../Observable');
6585 var publish_1 = require('../../operator/publish');
6586 Observable_1.Observable.prototype.publish = publish_1.publish;
6588 },{"../../Observable":28,"../../operator/publish":131}],71:[function(require,module,exports){
6590 var Observable_1 = require('../../Observable');
6591 var publishReplay_1 = require('../../operator/publishReplay');
6592 Observable_1.Observable.prototype.publishReplay = publishReplay_1.publishReplay;
6594 },{"../../Observable":28,"../../operator/publishReplay":132}],72:[function(require,module,exports){
6596 var Observable_1 = require('../../Observable');
6597 var scan_1 = require('../../operator/scan');
6598 Observable_1.Observable.prototype.scan = scan_1.scan;
6600 },{"../../Observable":28,"../../operator/scan":133}],73:[function(require,module,exports){
6602 var Observable_1 = require('../../Observable');
6603 var share_1 = require('../../operator/share');
6604 Observable_1.Observable.prototype.share = share_1.share;
6606 },{"../../Observable":28,"../../operator/share":134}],74:[function(require,module,exports){
6608 var Observable_1 = require('../../Observable');
6609 var skip_1 = require('../../operator/skip');
6610 Observable_1.Observable.prototype.skip = skip_1.skip;
6612 },{"../../Observable":28,"../../operator/skip":135}],75:[function(require,module,exports){
6614 var Observable_1 = require('../../Observable');
6615 var skipUntil_1 = require('../../operator/skipUntil');
6616 Observable_1.Observable.prototype.skipUntil = skipUntil_1.skipUntil;
6618 },{"../../Observable":28,"../../operator/skipUntil":136}],76:[function(require,module,exports){
6620 var Observable_1 = require('../../Observable');
6621 var skipWhile_1 = require('../../operator/skipWhile');
6622 Observable_1.Observable.prototype.skipWhile = skipWhile_1.skipWhile;
6624 },{"../../Observable":28,"../../operator/skipWhile":137}],77:[function(require,module,exports){
6626 var Observable_1 = require('../../Observable');
6627 var startWith_1 = require('../../operator/startWith');
6628 Observable_1.Observable.prototype.startWith = startWith_1.startWith;
6630 },{"../../Observable":28,"../../operator/startWith":138}],78:[function(require,module,exports){
6632 var Observable_1 = require('../../Observable');
6633 var switchMap_1 = require('../../operator/switchMap');
6634 Observable_1.Observable.prototype.switchMap = switchMap_1.switchMap;
6636 },{"../../Observable":28,"../../operator/switchMap":139}],79:[function(require,module,exports){
6638 var Observable_1 = require('../../Observable');
6639 var take_1 = require('../../operator/take');
6640 Observable_1.Observable.prototype.take = take_1.take;
6642 },{"../../Observable":28,"../../operator/take":140}],80:[function(require,module,exports){
6644 var Observable_1 = require('../../Observable');
6645 var takeUntil_1 = require('../../operator/takeUntil');
6646 Observable_1.Observable.prototype.takeUntil = takeUntil_1.takeUntil;
6648 },{"../../Observable":28,"../../operator/takeUntil":141}],81:[function(require,module,exports){
6650 var Observable_1 = require('../../Observable');
6651 var throttleTime_1 = require('../../operator/throttleTime');
6652 Observable_1.Observable.prototype.throttleTime = throttleTime_1.throttleTime;
6654 },{"../../Observable":28,"../../operator/throttleTime":142}],82:[function(require,module,exports){
6656 var Observable_1 = require('../../Observable');
6657 var withLatestFrom_1 = require('../../operator/withLatestFrom');
6658 Observable_1.Observable.prototype.withLatestFrom = withLatestFrom_1.withLatestFrom;
6660 },{"../../Observable":28,"../../operator/withLatestFrom":143}],83:[function(require,module,exports){
6662 var Observable_1 = require('../../Observable');
6663 var zip_1 = require('../../operator/zip');
6664 Observable_1.Observable.prototype.zip = zip_1.zipProto;
6666 },{"../../Observable":28,"../../operator/zip":144}],84:[function(require,module,exports){
6668 var __extends = (this && this.__extends) || function (d, b) {
6669 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
6670 function __() { this.constructor = d; }
6671 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
6673 var Observable_1 = require('../Observable');
6674 var ScalarObservable_1 = require('./ScalarObservable');
6675 var EmptyObservable_1 = require('./EmptyObservable');
6677 * We need this JSDoc comment for affecting ESDoc.
6678 * @extends {Ignored}
6681 var ArrayLikeObservable = (function (_super) {
6682 __extends(ArrayLikeObservable, _super);
6683 function ArrayLikeObservable(arrayLike, scheduler) {
6685 this.arrayLike = arrayLike;
6686 this.scheduler = scheduler;
6687 if (!scheduler && arrayLike.length === 1) {
6688 this._isScalar = true;
6689 this.value = arrayLike[0];
6692 ArrayLikeObservable.create = function (arrayLike, scheduler) {
6693 var length = arrayLike.length;
6695 return new EmptyObservable_1.EmptyObservable();
6697 else if (length === 1) {
6698 return new ScalarObservable_1.ScalarObservable(arrayLike[0], scheduler);
6701 return new ArrayLikeObservable(arrayLike, scheduler);
6704 ArrayLikeObservable.dispatch = function (state) {
6705 var arrayLike = state.arrayLike, index = state.index, length = state.length, subscriber = state.subscriber;
6706 if (subscriber.closed) {
6709 if (index >= length) {
6710 subscriber.complete();
6713 subscriber.next(arrayLike[index]);
6714 state.index = index + 1;
6715 this.schedule(state);
6717 ArrayLikeObservable.prototype._subscribe = function (subscriber) {
6719 var _a = this, arrayLike = _a.arrayLike, scheduler = _a.scheduler;
6720 var length = arrayLike.length;
6722 return scheduler.schedule(ArrayLikeObservable.dispatch, 0, {
6723 arrayLike: arrayLike, index: index, length: length, subscriber: subscriber
6727 for (var i = 0; i < length && !subscriber.closed; i++) {
6728 subscriber.next(arrayLike[i]);
6730 subscriber.complete();
6733 return ArrayLikeObservable;
6734 }(Observable_1.Observable));
6735 exports.ArrayLikeObservable = ArrayLikeObservable;
6737 },{"../Observable":28,"./EmptyObservable":88,"./ScalarObservable":94}],85:[function(require,module,exports){
6739 var __extends = (this && this.__extends) || function (d, b) {
6740 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
6741 function __() { this.constructor = d; }
6742 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
6744 var Observable_1 = require('../Observable');
6745 var ScalarObservable_1 = require('./ScalarObservable');
6746 var EmptyObservable_1 = require('./EmptyObservable');
6747 var isScheduler_1 = require('../util/isScheduler');
6749 * We need this JSDoc comment for affecting ESDoc.
6750 * @extends {Ignored}
6753 var ArrayObservable = (function (_super) {
6754 __extends(ArrayObservable, _super);
6755 function ArrayObservable(array, scheduler) {
6758 this.scheduler = scheduler;
6759 if (!scheduler && array.length === 1) {
6760 this._isScalar = true;
6761 this.value = array[0];
6764 ArrayObservable.create = function (array, scheduler) {
6765 return new ArrayObservable(array, scheduler);
6768 * Creates an Observable that emits some values you specify as arguments,
6769 * immediately one after the other, and then emits a complete notification.
6771 * <span class="informal">Emits the arguments you provide, then completes.
6774 * <img src="./img/of.png" width="100%">
6776 * This static operator is useful for creating a simple Observable that only
6777 * emits the arguments given, and the complete notification thereafter. It can
6778 * be used for composing with other Observables, such as with {@link concat}.
6779 * By default, it uses a `null` IScheduler, which means the `next`
6780 * notifications are sent synchronously, although with a different IScheduler
6781 * it is possible to determine when those notifications will be delivered.
6783 * @example <caption>Emit 10, 20, 30, then 'a', 'b', 'c', then start ticking every second.</caption>
6784 * var numbers = Rx.Observable.of(10, 20, 30);
6785 * var letters = Rx.Observable.of('a', 'b', 'c');
6786 * var interval = Rx.Observable.interval(1000);
6787 * var result = numbers.concat(letters).concat(interval);
6788 * result.subscribe(x => console.log(x));
6790 * @see {@link create}
6791 * @see {@link empty}
6792 * @see {@link never}
6793 * @see {@link throw}
6795 * @param {...T} values Arguments that represent `next` values to be emitted.
6796 * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling
6797 * the emissions of the `next` notifications.
6798 * @return {Observable<T>} An Observable that emits each given input value.
6803 ArrayObservable.of = function () {
6805 for (var _i = 0; _i < arguments.length; _i++) {
6806 array[_i - 0] = arguments[_i];
6808 var scheduler = array[array.length - 1];
6809 if (isScheduler_1.isScheduler(scheduler)) {
6815 var len = array.length;
6817 return new ArrayObservable(array, scheduler);
6819 else if (len === 1) {
6820 return new ScalarObservable_1.ScalarObservable(array[0], scheduler);
6823 return new EmptyObservable_1.EmptyObservable(scheduler);
6826 ArrayObservable.dispatch = function (state) {
6827 var array = state.array, index = state.index, count = state.count, subscriber = state.subscriber;
6828 if (index >= count) {
6829 subscriber.complete();
6832 subscriber.next(array[index]);
6833 if (subscriber.closed) {
6836 state.index = index + 1;
6837 this.schedule(state);
6839 ArrayObservable.prototype._subscribe = function (subscriber) {
6841 var array = this.array;
6842 var count = array.length;
6843 var scheduler = this.scheduler;
6845 return scheduler.schedule(ArrayObservable.dispatch, 0, {
6846 array: array, index: index, count: count, subscriber: subscriber
6850 for (var i = 0; i < count && !subscriber.closed; i++) {
6851 subscriber.next(array[i]);
6853 subscriber.complete();
6856 return ArrayObservable;
6857 }(Observable_1.Observable));
6858 exports.ArrayObservable = ArrayObservable;
6860 },{"../Observable":28,"../util/isScheduler":169,"./EmptyObservable":88,"./ScalarObservable":94}],86:[function(require,module,exports){
6862 var __extends = (this && this.__extends) || function (d, b) {
6863 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
6864 function __() { this.constructor = d; }
6865 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
6867 var Subject_1 = require('../Subject');
6868 var Observable_1 = require('../Observable');
6869 var Subscriber_1 = require('../Subscriber');
6870 var Subscription_1 = require('../Subscription');
6872 * @class ConnectableObservable<T>
6874 var ConnectableObservable = (function (_super) {
6875 __extends(ConnectableObservable, _super);
6876 function ConnectableObservable(source, subjectFactory) {
6878 this.source = source;
6879 this.subjectFactory = subjectFactory;
6882 ConnectableObservable.prototype._subscribe = function (subscriber) {
6883 return this.getSubject().subscribe(subscriber);
6885 ConnectableObservable.prototype.getSubject = function () {
6886 var subject = this._subject;
6887 if (!subject || subject.isStopped) {
6888 this._subject = this.subjectFactory();
6890 return this._subject;
6892 ConnectableObservable.prototype.connect = function () {
6893 var connection = this._connection;
6895 connection = this._connection = new Subscription_1.Subscription();
6896 connection.add(this.source
6897 .subscribe(new ConnectableSubscriber(this.getSubject(), this)));
6898 if (connection.closed) {
6899 this._connection = null;
6900 connection = Subscription_1.Subscription.EMPTY;
6903 this._connection = connection;
6908 ConnectableObservable.prototype.refCount = function () {
6909 return this.lift(new RefCountOperator(this));
6911 return ConnectableObservable;
6912 }(Observable_1.Observable));
6913 exports.ConnectableObservable = ConnectableObservable;
6914 exports.connectableObservableDescriptor = {
6915 operator: { value: null },
6916 _refCount: { value: 0, writable: true },
6917 _subscribe: { value: ConnectableObservable.prototype._subscribe },
6918 getSubject: { value: ConnectableObservable.prototype.getSubject },
6919 connect: { value: ConnectableObservable.prototype.connect },
6920 refCount: { value: ConnectableObservable.prototype.refCount }
6922 var ConnectableSubscriber = (function (_super) {
6923 __extends(ConnectableSubscriber, _super);
6924 function ConnectableSubscriber(destination, connectable) {
6925 _super.call(this, destination);
6926 this.connectable = connectable;
6928 ConnectableSubscriber.prototype._error = function (err) {
6929 this._unsubscribe();
6930 _super.prototype._error.call(this, err);
6932 ConnectableSubscriber.prototype._complete = function () {
6933 this._unsubscribe();
6934 _super.prototype._complete.call(this);
6936 ConnectableSubscriber.prototype._unsubscribe = function () {
6937 var connectable = this.connectable;
6939 this.connectable = null;
6940 var connection = connectable._connection;
6941 connectable._refCount = 0;
6942 connectable._subject = null;
6943 connectable._connection = null;
6945 connection.unsubscribe();
6949 return ConnectableSubscriber;
6950 }(Subject_1.SubjectSubscriber));
6951 var RefCountOperator = (function () {
6952 function RefCountOperator(connectable) {
6953 this.connectable = connectable;
6955 RefCountOperator.prototype.call = function (subscriber, source) {
6956 var connectable = this.connectable;
6957 connectable._refCount++;
6958 var refCounter = new RefCountSubscriber(subscriber, connectable);
6959 var subscription = source.subscribe(refCounter);
6960 if (!refCounter.closed) {
6961 refCounter.connection = connectable.connect();
6963 return subscription;
6965 return RefCountOperator;
6967 var RefCountSubscriber = (function (_super) {
6968 __extends(RefCountSubscriber, _super);
6969 function RefCountSubscriber(destination, connectable) {
6970 _super.call(this, destination);
6971 this.connectable = connectable;
6973 RefCountSubscriber.prototype._unsubscribe = function () {
6974 var connectable = this.connectable;
6976 this.connection = null;
6979 this.connectable = null;
6980 var refCount = connectable._refCount;
6981 if (refCount <= 0) {
6982 this.connection = null;
6985 connectable._refCount = refCount - 1;
6987 this.connection = null;
6991 // Compare the local RefCountSubscriber's connection Subscription to the
6992 // connection Subscription on the shared ConnectableObservable. In cases
6993 // where the ConnectableObservable source synchronously emits values, and
6994 // the RefCountSubscriber's downstream Observers synchronously unsubscribe,
6995 // execution continues to here before the RefCountOperator has a chance to
6996 // supply the RefCountSubscriber with the shared connection Subscription.
6999 // Observable.range(0, 10)
7005 // In order to account for this case, RefCountSubscriber should only dispose
7006 // the ConnectableObservable's shared connection Subscription if the
7007 // connection Subscription exists, *and* either:
7008 // a. RefCountSubscriber doesn't have a reference to the shared connection
7009 // Subscription yet, or,
7010 // b. RefCountSubscriber's connection Subscription reference is identical
7011 // to the shared connection Subscription
7013 var connection = this.connection;
7014 var sharedConnection = connectable._connection;
7015 this.connection = null;
7016 if (sharedConnection && (!connection || sharedConnection === connection)) {
7017 sharedConnection.unsubscribe();
7020 return RefCountSubscriber;
7021 }(Subscriber_1.Subscriber));
7023 },{"../Observable":28,"../Subject":33,"../Subscriber":35,"../Subscription":36}],87:[function(require,module,exports){
7025 var __extends = (this && this.__extends) || function (d, b) {
7026 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
7027 function __() { this.constructor = d; }
7028 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
7030 var Observable_1 = require('../Observable');
7031 var subscribeToResult_1 = require('../util/subscribeToResult');
7032 var OuterSubscriber_1 = require('../OuterSubscriber');
7034 * We need this JSDoc comment for affecting ESDoc.
7035 * @extends {Ignored}
7038 var DeferObservable = (function (_super) {
7039 __extends(DeferObservable, _super);
7040 function DeferObservable(observableFactory) {
7042 this.observableFactory = observableFactory;
7045 * Creates an Observable that, on subscribe, calls an Observable factory to
7046 * make an Observable for each new Observer.
7048 * <span class="informal">Creates the Observable lazily, that is, only when it
7052 * <img src="./img/defer.png" width="100%">
7054 * `defer` allows you to create the Observable only when the Observer
7055 * subscribes, and create a fresh Observable for each Observer. It waits until
7056 * an Observer subscribes to it, and then it generates an Observable,
7057 * typically with an Observable factory function. It does this afresh for each
7058 * subscriber, so although each subscriber may think it is subscribing to the
7059 * same Observable, in fact each subscriber gets its own individual
7062 * @example <caption>Subscribe to either an Observable of clicks or an Observable of interval, at random</caption>
7063 * var clicksOrInterval = Rx.Observable.defer(function () {
7064 * if (Math.random() > 0.5) {
7065 * return Rx.Observable.fromEvent(document, 'click');
7067 * return Rx.Observable.interval(1000);
7070 * clicksOrInterval.subscribe(x => console.log(x));
7072 * // Results in the following behavior:
7073 * // If the result of Math.random() is greater than 0.5 it will listen
7074 * // for clicks anywhere on the "document"; when document is clicked it
7075 * // will log a MouseEvent object to the console. If the result is less
7076 * // than 0.5 it will emit ascending numbers, one every second(1000ms).
7078 * @see {@link create}
7080 * @param {function(): SubscribableOrPromise} observableFactory The Observable
7081 * factory function to invoke for each Observer that subscribes to the output
7082 * Observable. May also return a Promise, which will be converted on the fly
7084 * @return {Observable} An Observable whose Observers' subscriptions trigger
7085 * an invocation of the given Observable factory function.
7090 DeferObservable.create = function (observableFactory) {
7091 return new DeferObservable(observableFactory);
7093 DeferObservable.prototype._subscribe = function (subscriber) {
7094 return new DeferSubscriber(subscriber, this.observableFactory);
7096 return DeferObservable;
7097 }(Observable_1.Observable));
7098 exports.DeferObservable = DeferObservable;
7099 var DeferSubscriber = (function (_super) {
7100 __extends(DeferSubscriber, _super);
7101 function DeferSubscriber(destination, factory) {
7102 _super.call(this, destination);
7103 this.factory = factory;
7106 DeferSubscriber.prototype.tryDefer = function () {
7108 this._callFactory();
7114 DeferSubscriber.prototype._callFactory = function () {
7115 var result = this.factory();
7117 this.add(subscribeToResult_1.subscribeToResult(this, result));
7120 return DeferSubscriber;
7121 }(OuterSubscriber_1.OuterSubscriber));
7123 },{"../Observable":28,"../OuterSubscriber":30,"../util/subscribeToResult":171}],88:[function(require,module,exports){
7125 var __extends = (this && this.__extends) || function (d, b) {
7126 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
7127 function __() { this.constructor = d; }
7128 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
7130 var Observable_1 = require('../Observable');
7132 * We need this JSDoc comment for affecting ESDoc.
7133 * @extends {Ignored}
7136 var EmptyObservable = (function (_super) {
7137 __extends(EmptyObservable, _super);
7138 function EmptyObservable(scheduler) {
7140 this.scheduler = scheduler;
7143 * Creates an Observable that emits no items to the Observer and immediately
7144 * emits a complete notification.
7146 * <span class="informal">Just emits 'complete', and nothing else.
7149 * <img src="./img/empty.png" width="100%">
7151 * This static operator is useful for creating a simple Observable that only
7152 * emits the complete notification. It can be used for composing with other
7153 * Observables, such as in a {@link mergeMap}.
7155 * @example <caption>Emit the number 7, then complete.</caption>
7156 * var result = Rx.Observable.empty().startWith(7);
7157 * result.subscribe(x => console.log(x));
7159 * @example <caption>Map and flatten only odd numbers to the sequence 'a', 'b', 'c'</caption>
7160 * var interval = Rx.Observable.interval(1000);
7161 * var result = interval.mergeMap(x =>
7162 * x % 2 === 1 ? Rx.Observable.of('a', 'b', 'c') : Rx.Observable.empty()
7164 * result.subscribe(x => console.log(x));
7166 * // Results in the following to the console:
7167 * // x is equal to the count on the interval eg(0,1,2,3,...)
7168 * // x will occur every 1000ms
7169 * // if x % 2 is equal to 1 print abc
7170 * // if x % 2 is not equal to 1 nothing will be output
7172 * @see {@link create}
7173 * @see {@link never}
7175 * @see {@link throw}
7177 * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling
7178 * the emission of the complete notification.
7179 * @return {Observable} An "empty" Observable: emits only the complete
7185 EmptyObservable.create = function (scheduler) {
7186 return new EmptyObservable(scheduler);
7188 EmptyObservable.dispatch = function (arg) {
7189 var subscriber = arg.subscriber;
7190 subscriber.complete();
7192 EmptyObservable.prototype._subscribe = function (subscriber) {
7193 var scheduler = this.scheduler;
7195 return scheduler.schedule(EmptyObservable.dispatch, 0, { subscriber: subscriber });
7198 subscriber.complete();
7201 return EmptyObservable;
7202 }(Observable_1.Observable));
7203 exports.EmptyObservable = EmptyObservable;
7205 },{"../Observable":28}],89:[function(require,module,exports){
7207 var __extends = (this && this.__extends) || function (d, b) {
7208 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
7209 function __() { this.constructor = d; }
7210 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
7212 var Observable_1 = require('../Observable');
7214 * We need this JSDoc comment for affecting ESDoc.
7215 * @extends {Ignored}
7218 var ErrorObservable = (function (_super) {
7219 __extends(ErrorObservable, _super);
7220 function ErrorObservable(error, scheduler) {
7223 this.scheduler = scheduler;
7226 * Creates an Observable that emits no items to the Observer and immediately
7227 * emits an error notification.
7229 * <span class="informal">Just emits 'error', and nothing else.
7232 * <img src="./img/throw.png" width="100%">
7234 * This static operator is useful for creating a simple Observable that only
7235 * emits the error notification. It can be used for composing with other
7236 * Observables, such as in a {@link mergeMap}.
7238 * @example <caption>Emit the number 7, then emit an error.</caption>
7239 * var result = Rx.Observable.throw(new Error('oops!')).startWith(7);
7240 * result.subscribe(x => console.log(x), e => console.error(e));
7242 * @example <caption>Map and flatten numbers to the sequence 'a', 'b', 'c', but throw an error for 13</caption>
7243 * var interval = Rx.Observable.interval(1000);
7244 * var result = interval.mergeMap(x =>
7246 * Rx.Observable.throw('Thirteens are bad') :
7247 * Rx.Observable.of('a', 'b', 'c')
7249 * result.subscribe(x => console.log(x), e => console.error(e));
7251 * @see {@link create}
7252 * @see {@link empty}
7253 * @see {@link never}
7256 * @param {any} error The particular Error to pass to the error notification.
7257 * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling
7258 * the emission of the error notification.
7259 * @return {Observable} An error Observable: emits only the error notification
7260 * using the given error argument.
7265 ErrorObservable.create = function (error, scheduler) {
7266 return new ErrorObservable(error, scheduler);
7268 ErrorObservable.dispatch = function (arg) {
7269 var error = arg.error, subscriber = arg.subscriber;
7270 subscriber.error(error);
7272 ErrorObservable.prototype._subscribe = function (subscriber) {
7273 var error = this.error;
7274 var scheduler = this.scheduler;
7276 return scheduler.schedule(ErrorObservable.dispatch, 0, {
7277 error: error, subscriber: subscriber
7281 subscriber.error(error);
7284 return ErrorObservable;
7285 }(Observable_1.Observable));
7286 exports.ErrorObservable = ErrorObservable;
7288 },{"../Observable":28}],90:[function(require,module,exports){
7290 var __extends = (this && this.__extends) || function (d, b) {
7291 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
7292 function __() { this.constructor = d; }
7293 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
7295 var Observable_1 = require('../Observable');
7296 var tryCatch_1 = require('../util/tryCatch');
7297 var isFunction_1 = require('../util/isFunction');
7298 var errorObject_1 = require('../util/errorObject');
7299 var Subscription_1 = require('../Subscription');
7300 var toString = Object.prototype.toString;
7301 function isNodeStyleEventEmitter(sourceObj) {
7302 return !!sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
7304 function isJQueryStyleEventEmitter(sourceObj) {
7305 return !!sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
7307 function isNodeList(sourceObj) {
7308 return !!sourceObj && toString.call(sourceObj) === '[object NodeList]';
7310 function isHTMLCollection(sourceObj) {
7311 return !!sourceObj && toString.call(sourceObj) === '[object HTMLCollection]';
7313 function isEventTarget(sourceObj) {
7314 return !!sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
7317 * We need this JSDoc comment for affecting ESDoc.
7318 * @extends {Ignored}
7321 var FromEventObservable = (function (_super) {
7322 __extends(FromEventObservable, _super);
7323 function FromEventObservable(sourceObj, eventName, selector, options) {
7325 this.sourceObj = sourceObj;
7326 this.eventName = eventName;
7327 this.selector = selector;
7328 this.options = options;
7330 /* tslint:enable:max-line-length */
7332 * Creates an Observable that emits events of a specific type coming from the
7333 * given event target.
7335 * <span class="informal">Creates an Observable from DOM events, or Node
7336 * EventEmitter events or others.</span>
7338 * <img src="./img/fromEvent.png" width="100%">
7340 * Creates an Observable by attaching an event listener to an "event target",
7341 * which may be an object with `addEventListener` and `removeEventListener`,
7342 * a Node.js EventEmitter, a jQuery style EventEmitter, a NodeList from the
7343 * DOM, or an HTMLCollection from the DOM. The event handler is attached when
7344 * the output Observable is subscribed, and removed when the Subscription is
7347 * @example <caption>Emits clicks happening on the DOM document</caption>
7348 * var clicks = Rx.Observable.fromEvent(document, 'click');
7349 * clicks.subscribe(x => console.log(x));
7352 * // MouseEvent object logged to console everytime a click
7353 * // occurs on the document.
7356 * @see {@link fromEventPattern}
7358 * @param {EventTargetLike} target The DOMElement, event target, Node.js
7359 * EventEmitter, NodeList or HTMLCollection to attach the event handler to.
7360 * @param {string} eventName The event name of interest, being emitted by the
7362 * @param {EventListenerOptions} [options] Options to pass through to addEventListener
7363 * @param {SelectorMethodSignature<T>} [selector] An optional function to
7364 * post-process results. It takes the arguments from the event handler and
7365 * should return a single value.
7366 * @return {Observable<T>}
7371 FromEventObservable.create = function (target, eventName, options, selector) {
7372 if (isFunction_1.isFunction(options)) {
7374 options = undefined;
7376 return new FromEventObservable(target, eventName, selector, options);
7378 FromEventObservable.setupSubscription = function (sourceObj, eventName, handler, subscriber, options) {
7380 if (isNodeList(sourceObj) || isHTMLCollection(sourceObj)) {
7381 for (var i = 0, len = sourceObj.length; i < len; i++) {
7382 FromEventObservable.setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
7385 else if (isEventTarget(sourceObj)) {
7386 var source_1 = sourceObj;
7387 sourceObj.addEventListener(eventName, handler, options);
7388 unsubscribe = function () { return source_1.removeEventListener(eventName, handler); };
7390 else if (isJQueryStyleEventEmitter(sourceObj)) {
7391 var source_2 = sourceObj;
7392 sourceObj.on(eventName, handler);
7393 unsubscribe = function () { return source_2.off(eventName, handler); };
7395 else if (isNodeStyleEventEmitter(sourceObj)) {
7396 var source_3 = sourceObj;
7397 sourceObj.addListener(eventName, handler);
7398 unsubscribe = function () { return source_3.removeListener(eventName, handler); };
7401 throw new TypeError('Invalid event target');
7403 subscriber.add(new Subscription_1.Subscription(unsubscribe));
7405 FromEventObservable.prototype._subscribe = function (subscriber) {
7406 var sourceObj = this.sourceObj;
7407 var eventName = this.eventName;
7408 var options = this.options;
7409 var selector = this.selector;
7410 var handler = selector ? function () {
7412 for (var _i = 0; _i < arguments.length; _i++) {
7413 args[_i - 0] = arguments[_i];
7415 var result = tryCatch_1.tryCatch(selector).apply(void 0, args);
7416 if (result === errorObject_1.errorObject) {
7417 subscriber.error(errorObject_1.errorObject.e);
7420 subscriber.next(result);
7422 } : function (e) { return subscriber.next(e); };
7423 FromEventObservable.setupSubscription(sourceObj, eventName, handler, subscriber, options);
7425 return FromEventObservable;
7426 }(Observable_1.Observable));
7427 exports.FromEventObservable = FromEventObservable;
7429 },{"../Observable":28,"../Subscription":36,"../util/errorObject":161,"../util/isFunction":165,"../util/tryCatch":173}],91:[function(require,module,exports){
7431 var __extends = (this && this.__extends) || function (d, b) {
7432 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
7433 function __() { this.constructor = d; }
7434 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
7436 var isArray_1 = require('../util/isArray');
7437 var isArrayLike_1 = require('../util/isArrayLike');
7438 var isPromise_1 = require('../util/isPromise');
7439 var PromiseObservable_1 = require('./PromiseObservable');
7440 var IteratorObservable_1 = require('./IteratorObservable');
7441 var ArrayObservable_1 = require('./ArrayObservable');
7442 var ArrayLikeObservable_1 = require('./ArrayLikeObservable');
7443 var iterator_1 = require('../symbol/iterator');
7444 var Observable_1 = require('../Observable');
7445 var observeOn_1 = require('../operator/observeOn');
7446 var observable_1 = require('../symbol/observable');
7448 * We need this JSDoc comment for affecting ESDoc.
7449 * @extends {Ignored}
7452 var FromObservable = (function (_super) {
7453 __extends(FromObservable, _super);
7454 function FromObservable(ish, scheduler) {
7455 _super.call(this, null);
7457 this.scheduler = scheduler;
7460 * Creates an Observable from an Array, an array-like object, a Promise, an
7461 * iterable object, or an Observable-like object.
7463 * <span class="informal">Converts almost anything to an Observable.</span>
7465 * <img src="./img/from.png" width="100%">
7467 * Convert various other objects and data types into Observables. `from`
7468 * converts a Promise or an array-like or an
7469 * [iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable)
7470 * object into an Observable that emits the items in that promise or array or
7471 * iterable. A String, in this context, is treated as an array of characters.
7472 * Observable-like objects (contains a function named with the ES2015 Symbol
7473 * for Observable) can also be converted through this operator.
7475 * @example <caption>Converts an array to an Observable</caption>
7476 * var array = [10, 20, 30];
7477 * var result = Rx.Observable.from(array);
7478 * result.subscribe(x => console.log(x));
7480 * // Results in the following:
7483 * @example <caption>Convert an infinite iterable (from a generator) to an Observable</caption>
7484 * function* generateDoubles(seed) {
7488 * i = 2 * i; // double it
7492 * var iterator = generateDoubles(3);
7493 * var result = Rx.Observable.from(iterator).take(10);
7494 * result.subscribe(x => console.log(x));
7496 * // Results in the following:
7497 * // 3 6 12 24 48 96 192 384 768 1536
7499 * @see {@link create}
7500 * @see {@link fromEvent}
7501 * @see {@link fromEventPattern}
7502 * @see {@link fromPromise}
7504 * @param {ObservableInput<T>} ish A subscribable object, a Promise, an
7505 * Observable-like, an Array, an iterable or an array-like object to be
7507 * @param {Scheduler} [scheduler] The scheduler on which to schedule the
7508 * emissions of values.
7509 * @return {Observable<T>} The Observable whose values are originally from the
7510 * input object that was converted.
7515 FromObservable.create = function (ish, scheduler) {
7517 if (typeof ish[observable_1.$$observable] === 'function') {
7518 if (ish instanceof Observable_1.Observable && !scheduler) {
7521 return new FromObservable(ish, scheduler);
7523 else if (isArray_1.isArray(ish)) {
7524 return new ArrayObservable_1.ArrayObservable(ish, scheduler);
7526 else if (isPromise_1.isPromise(ish)) {
7527 return new PromiseObservable_1.PromiseObservable(ish, scheduler);
7529 else if (typeof ish[iterator_1.$$iterator] === 'function' || typeof ish === 'string') {
7530 return new IteratorObservable_1.IteratorObservable(ish, scheduler);
7532 else if (isArrayLike_1.isArrayLike(ish)) {
7533 return new ArrayLikeObservable_1.ArrayLikeObservable(ish, scheduler);
7536 throw new TypeError((ish !== null && typeof ish || ish) + ' is not observable');
7538 FromObservable.prototype._subscribe = function (subscriber) {
7540 var scheduler = this.scheduler;
7541 if (scheduler == null) {
7542 return ish[observable_1.$$observable]().subscribe(subscriber);
7545 return ish[observable_1.$$observable]().subscribe(new observeOn_1.ObserveOnSubscriber(subscriber, scheduler, 0));
7548 return FromObservable;
7549 }(Observable_1.Observable));
7550 exports.FromObservable = FromObservable;
7552 },{"../Observable":28,"../operator/observeOn":128,"../symbol/iterator":152,"../symbol/observable":153,"../util/isArray":162,"../util/isArrayLike":163,"../util/isPromise":168,"./ArrayLikeObservable":84,"./ArrayObservable":85,"./IteratorObservable":92,"./PromiseObservable":93}],92:[function(require,module,exports){
7554 var __extends = (this && this.__extends) || function (d, b) {
7555 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
7556 function __() { this.constructor = d; }
7557 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
7559 var root_1 = require('../util/root');
7560 var Observable_1 = require('../Observable');
7561 var iterator_1 = require('../symbol/iterator');
7563 * We need this JSDoc comment for affecting ESDoc.
7564 * @extends {Ignored}
7567 var IteratorObservable = (function (_super) {
7568 __extends(IteratorObservable, _super);
7569 function IteratorObservable(iterator, scheduler) {
7571 this.scheduler = scheduler;
7572 if (iterator == null) {
7573 throw new Error('iterator cannot be null.');
7575 this.iterator = getIterator(iterator);
7577 IteratorObservable.create = function (iterator, scheduler) {
7578 return new IteratorObservable(iterator, scheduler);
7580 IteratorObservable.dispatch = function (state) {
7581 var index = state.index, hasError = state.hasError, iterator = state.iterator, subscriber = state.subscriber;
7583 subscriber.error(state.error);
7586 var result = iterator.next();
7588 subscriber.complete();
7591 subscriber.next(result.value);
7592 state.index = index + 1;
7593 if (subscriber.closed) {
7594 if (typeof iterator.return === 'function') {
7599 this.schedule(state);
7601 IteratorObservable.prototype._subscribe = function (subscriber) {
7603 var _a = this, iterator = _a.iterator, scheduler = _a.scheduler;
7605 return scheduler.schedule(IteratorObservable.dispatch, 0, {
7606 index: index, iterator: iterator, subscriber: subscriber
7611 var result = iterator.next();
7613 subscriber.complete();
7617 subscriber.next(result.value);
7619 if (subscriber.closed) {
7620 if (typeof iterator.return === 'function') {
7628 return IteratorObservable;
7629 }(Observable_1.Observable));
7630 exports.IteratorObservable = IteratorObservable;
7631 var StringIterator = (function () {
7632 function StringIterator(str, idx, len) {
7633 if (idx === void 0) { idx = 0; }
7634 if (len === void 0) { len = str.length; }
7639 StringIterator.prototype[iterator_1.$$iterator] = function () { return (this); };
7640 StringIterator.prototype.next = function () {
7641 return this.idx < this.len ? {
7643 value: this.str.charAt(this.idx++)
7649 return StringIterator;
7651 var ArrayIterator = (function () {
7652 function ArrayIterator(arr, idx, len) {
7653 if (idx === void 0) { idx = 0; }
7654 if (len === void 0) { len = toLength(arr); }
7659 ArrayIterator.prototype[iterator_1.$$iterator] = function () { return this; };
7660 ArrayIterator.prototype.next = function () {
7661 return this.idx < this.len ? {
7663 value: this.arr[this.idx++]
7669 return ArrayIterator;
7671 function getIterator(obj) {
7672 var i = obj[iterator_1.$$iterator];
7673 if (!i && typeof obj === 'string') {
7674 return new StringIterator(obj);
7676 if (!i && obj.length !== undefined) {
7677 return new ArrayIterator(obj);
7680 throw new TypeError('object is not iterable');
7682 return obj[iterator_1.$$iterator]();
7684 var maxSafeInteger = Math.pow(2, 53) - 1;
7685 function toLength(o) {
7686 var len = +o.length;
7690 if (len === 0 || !numberIsFinite(len)) {
7693 len = sign(len) * Math.floor(Math.abs(len));
7697 if (len > maxSafeInteger) {
7698 return maxSafeInteger;
7702 function numberIsFinite(value) {
7703 return typeof value === 'number' && root_1.root.isFinite(value);
7705 function sign(value) {
7706 var valueAsNumber = +value;
7707 if (valueAsNumber === 0) {
7708 return valueAsNumber;
7710 if (isNaN(valueAsNumber)) {
7711 return valueAsNumber;
7713 return valueAsNumber < 0 ? -1 : 1;
7716 },{"../Observable":28,"../symbol/iterator":152,"../util/root":170}],93:[function(require,module,exports){
7718 var __extends = (this && this.__extends) || function (d, b) {
7719 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
7720 function __() { this.constructor = d; }
7721 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
7723 var root_1 = require('../util/root');
7724 var Observable_1 = require('../Observable');
7726 * We need this JSDoc comment for affecting ESDoc.
7727 * @extends {Ignored}
7730 var PromiseObservable = (function (_super) {
7731 __extends(PromiseObservable, _super);
7732 function PromiseObservable(promise, scheduler) {
7734 this.promise = promise;
7735 this.scheduler = scheduler;
7738 * Converts a Promise to an Observable.
7740 * <span class="informal">Returns an Observable that just emits the Promise's
7741 * resolved value, then completes.</span>
7743 * Converts an ES2015 Promise or a Promises/A+ spec compliant Promise to an
7744 * Observable. If the Promise resolves with a value, the output Observable
7745 * emits that resolved value as a `next`, and then completes. If the Promise
7746 * is rejected, then the output Observable emits the corresponding Error.
7748 * @example <caption>Convert the Promise returned by Fetch to an Observable</caption>
7749 * var result = Rx.Observable.fromPromise(fetch('http://myserver.com/'));
7750 * result.subscribe(x => console.log(x), e => console.error(e));
7752 * @see {@link bindCallback}
7755 * @param {Promise<T>} promise The promise to be converted.
7756 * @param {Scheduler} [scheduler] An optional IScheduler to use for scheduling
7757 * the delivery of the resolved value (or the rejection).
7758 * @return {Observable<T>} An Observable which wraps the Promise.
7763 PromiseObservable.create = function (promise, scheduler) {
7764 return new PromiseObservable(promise, scheduler);
7766 PromiseObservable.prototype._subscribe = function (subscriber) {
7768 var promise = this.promise;
7769 var scheduler = this.scheduler;
7770 if (scheduler == null) {
7771 if (this._isScalar) {
7772 if (!subscriber.closed) {
7773 subscriber.next(this.value);
7774 subscriber.complete();
7778 promise.then(function (value) {
7779 _this.value = value;
7780 _this._isScalar = true;
7781 if (!subscriber.closed) {
7782 subscriber.next(value);
7783 subscriber.complete();
7786 if (!subscriber.closed) {
7787 subscriber.error(err);
7790 .then(null, function (err) {
7791 // escape the promise trap, throw unhandled errors
7792 root_1.root.setTimeout(function () { throw err; });
7797 if (this._isScalar) {
7798 if (!subscriber.closed) {
7799 return scheduler.schedule(dispatchNext, 0, { value: this.value, subscriber: subscriber });
7803 promise.then(function (value) {
7804 _this.value = value;
7805 _this._isScalar = true;
7806 if (!subscriber.closed) {
7807 subscriber.add(scheduler.schedule(dispatchNext, 0, { value: value, subscriber: subscriber }));
7810 if (!subscriber.closed) {
7811 subscriber.add(scheduler.schedule(dispatchError, 0, { err: err, subscriber: subscriber }));
7814 .then(null, function (err) {
7815 // escape the promise trap, throw unhandled errors
7816 root_1.root.setTimeout(function () { throw err; });
7821 return PromiseObservable;
7822 }(Observable_1.Observable));
7823 exports.PromiseObservable = PromiseObservable;
7824 function dispatchNext(arg) {
7825 var value = arg.value, subscriber = arg.subscriber;
7826 if (!subscriber.closed) {
7827 subscriber.next(value);
7828 subscriber.complete();
7831 function dispatchError(arg) {
7832 var err = arg.err, subscriber = arg.subscriber;
7833 if (!subscriber.closed) {
7834 subscriber.error(err);
7838 },{"../Observable":28,"../util/root":170}],94:[function(require,module,exports){
7840 var __extends = (this && this.__extends) || function (d, b) {
7841 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
7842 function __() { this.constructor = d; }
7843 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
7845 var Observable_1 = require('../Observable');
7847 * We need this JSDoc comment for affecting ESDoc.
7848 * @extends {Ignored}
7851 var ScalarObservable = (function (_super) {
7852 __extends(ScalarObservable, _super);
7853 function ScalarObservable(value, scheduler) {
7856 this.scheduler = scheduler;
7857 this._isScalar = true;
7859 this._isScalar = false;
7862 ScalarObservable.create = function (value, scheduler) {
7863 return new ScalarObservable(value, scheduler);
7865 ScalarObservable.dispatch = function (state) {
7866 var done = state.done, value = state.value, subscriber = state.subscriber;
7868 subscriber.complete();
7871 subscriber.next(value);
7872 if (subscriber.closed) {
7876 this.schedule(state);
7878 ScalarObservable.prototype._subscribe = function (subscriber) {
7879 var value = this.value;
7880 var scheduler = this.scheduler;
7882 return scheduler.schedule(ScalarObservable.dispatch, 0, {
7883 done: false, value: value, subscriber: subscriber
7887 subscriber.next(value);
7888 if (!subscriber.closed) {
7889 subscriber.complete();
7893 return ScalarObservable;
7894 }(Observable_1.Observable));
7895 exports.ScalarObservable = ScalarObservable;
7897 },{"../Observable":28}],95:[function(require,module,exports){
7899 var __extends = (this && this.__extends) || function (d, b) {
7900 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
7901 function __() { this.constructor = d; }
7902 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
7904 var isNumeric_1 = require('../util/isNumeric');
7905 var Observable_1 = require('../Observable');
7906 var async_1 = require('../scheduler/async');
7907 var isScheduler_1 = require('../util/isScheduler');
7908 var isDate_1 = require('../util/isDate');
7910 * We need this JSDoc comment for affecting ESDoc.
7911 * @extends {Ignored}
7914 var TimerObservable = (function (_super) {
7915 __extends(TimerObservable, _super);
7916 function TimerObservable(dueTime, period, scheduler) {
7917 if (dueTime === void 0) { dueTime = 0; }
7921 if (isNumeric_1.isNumeric(period)) {
7922 this.period = Number(period) < 1 && 1 || Number(period);
7924 else if (isScheduler_1.isScheduler(period)) {
7927 if (!isScheduler_1.isScheduler(scheduler)) {
7928 scheduler = async_1.async;
7930 this.scheduler = scheduler;
7931 this.dueTime = isDate_1.isDate(dueTime) ?
7932 (+dueTime - this.scheduler.now()) :
7936 * Creates an Observable that starts emitting after an `initialDelay` and
7937 * emits ever increasing numbers after each `period` of time thereafter.
7939 * <span class="informal">Its like {@link interval}, but you can specify when
7940 * should the emissions start.</span>
7942 * <img src="./img/timer.png" width="100%">
7944 * `timer` returns an Observable that emits an infinite sequence of ascending
7945 * integers, with a constant interval of time, `period` of your choosing
7946 * between those emissions. The first emission happens after the specified
7947 * `initialDelay`. The initial delay may be a {@link Date}. By default, this
7948 * operator uses the `async` IScheduler to provide a notion of time, but you
7949 * may pass any IScheduler to it. If `period` is not specified, the output
7950 * Observable emits only one value, `0`. Otherwise, it emits an infinite
7953 * @example <caption>Emits ascending numbers, one every second (1000ms), starting after 3 seconds</caption>
7954 * var numbers = Rx.Observable.timer(3000, 1000);
7955 * numbers.subscribe(x => console.log(x));
7957 * @example <caption>Emits one number after five seconds</caption>
7958 * var numbers = Rx.Observable.timer(5000);
7959 * numbers.subscribe(x => console.log(x));
7961 * @see {@link interval}
7962 * @see {@link delay}
7964 * @param {number|Date} initialDelay The initial delay time to wait before
7965 * emitting the first value of `0`.
7966 * @param {number} [period] The period of time between emissions of the
7967 * subsequent numbers.
7968 * @param {Scheduler} [scheduler=async] The IScheduler to use for scheduling
7969 * the emission of values, and providing a notion of "time".
7970 * @return {Observable} An Observable that emits a `0` after the
7971 * `initialDelay` and ever increasing numbers after each `period` of time
7977 TimerObservable.create = function (initialDelay, period, scheduler) {
7978 if (initialDelay === void 0) { initialDelay = 0; }
7979 return new TimerObservable(initialDelay, period, scheduler);
7981 TimerObservable.dispatch = function (state) {
7982 var index = state.index, period = state.period, subscriber = state.subscriber;
7984 subscriber.next(index);
7985 if (subscriber.closed) {
7988 else if (period === -1) {
7989 return subscriber.complete();
7991 state.index = index + 1;
7992 action.schedule(state, period);
7994 TimerObservable.prototype._subscribe = function (subscriber) {
7996 var _a = this, period = _a.period, dueTime = _a.dueTime, scheduler = _a.scheduler;
7997 return scheduler.schedule(TimerObservable.dispatch, dueTime, {
7998 index: index, period: period, subscriber: subscriber
8001 return TimerObservable;
8002 }(Observable_1.Observable));
8003 exports.TimerObservable = TimerObservable;
8005 },{"../Observable":28,"../scheduler/async":150,"../util/isDate":164,"../util/isNumeric":166,"../util/isScheduler":169}],96:[function(require,module,exports){
8007 var isScheduler_1 = require('../util/isScheduler');
8008 var isArray_1 = require('../util/isArray');
8009 var ArrayObservable_1 = require('./ArrayObservable');
8010 var combineLatest_1 = require('../operator/combineLatest');
8011 /* tslint:enable:max-line-length */
8013 * Combines multiple Observables to create an Observable whose values are
8014 * calculated from the latest values of each of its input Observables.
8016 * <span class="informal">Whenever any input Observable emits a value, it
8017 * computes a formula using the latest values from all the inputs, then emits
8018 * the output of that formula.</span>
8020 * <img src="./img/combineLatest.png" width="100%">
8022 * `combineLatest` combines the values from all the Observables passed as
8023 * arguments. This is done by subscribing to each Observable in order and,
8024 * whenever any Observable emits, collecting an array of the most recent
8025 * values from each Observable. So if you pass `n` Observables to operator,
8026 * returned Observable will always emit an array of `n` values, in order
8027 * corresponding to order of passed Observables (value from the first Observable
8028 * on the first place and so on).
8030 * Static version of `combineLatest` accepts either an array of Observables
8031 * or each Observable can be put directly as an argument. Note that array of
8032 * Observables is good choice, if you don't know beforehand how many Observables
8033 * you will combine. Passing empty array will result in Observable that
8034 * completes immediately.
8036 * To ensure output array has always the same length, `combineLatest` will
8037 * actually wait for all input Observables to emit at least once,
8038 * before it starts emitting results. This means if some Observable emits
8039 * values before other Observables started emitting, all that values but last
8040 * will be lost. On the other hand, is some Observable does not emit value but
8041 * completes, resulting Observable will complete at the same moment without
8042 * emitting anything, since it will be now impossible to include value from
8043 * completed Observable in resulting array. Also, if some input Observable does
8044 * not emit any value and never completes, `combineLatest` will also never emit
8045 * and never complete, since, again, it will wait for all streams to emit some
8048 * If at least one Observable was passed to `combineLatest` and all passed Observables
8049 * emitted something, resulting Observable will complete when all combined
8050 * streams complete. So even if some Observable completes, result of
8051 * `combineLatest` will still emit values when other Observables do. In case
8052 * of completed Observable, its value from now on will always be the last
8053 * emitted value. On the other hand, if any Observable errors, `combineLatest`
8054 * will error immediately as well, and all other Observables will be unsubscribed.
8056 * `combineLatest` accepts as optional parameter `project` function, which takes
8057 * as arguments all values that would normally be emitted by resulting Observable.
8058 * `project` can return any kind of value, which will be then emitted by Observable
8059 * instead of default array. Note that `project` does not take as argument that array
8060 * of values, but values themselves. That means default `project` can be imagined
8061 * as function that takes all its arguments and puts them into an array.
8064 * @example <caption>Combine two timer Observables</caption>
8065 * const firstTimer = Rx.Observable.timer(0, 1000); // emit 0, 1, 2... after every second, starting from now
8066 * const secondTimer = Rx.Observable.timer(500, 1000); // emit 0, 1, 2... after every second, starting 0,5s from now
8067 * const combinedTimers = Rx.Observable.combineLatest(firstTimer, secondTimer);
8068 * combinedTimers.subscribe(value => console.log(value));
8070 * // [0, 0] after 0.5s
8071 * // [1, 0] after 1s
8072 * // [1, 1] after 1.5s
8073 * // [2, 1] after 2s
8076 * @example <caption>Combine an array of Observables</caption>
8077 * const observables = [1, 5, 10].map(
8078 * n => Rx.Observable.of(n).delay(n * 1000).startWith(0) // emit 0 and then emit n after n seconds
8080 * const combined = Rx.Observable.combineLatest(observables);
8081 * combined.subscribe(value => console.log(value));
8083 * // [0, 0, 0] immediately
8084 * // [1, 0, 0] after 1s
8085 * // [1, 5, 0] after 5s
8086 * // [1, 5, 10] after 10s
8089 * @example <caption>Use project function to dynamically calculate the Body-Mass Index</caption>
8090 * var weight = Rx.Observable.of(70, 72, 76, 79, 75);
8091 * var height = Rx.Observable.of(1.76, 1.77, 1.78);
8092 * var bmi = Rx.Observable.combineLatest(weight, height, (w, h) => w / (h * h));
8093 * bmi.subscribe(x => console.log('BMI is ' + x));
8095 * // With output to console:
8096 * // BMI is 24.212293388429753
8097 * // BMI is 23.93948099205209
8098 * // BMI is 23.671253629592222
8101 * @see {@link combineAll}
8102 * @see {@link merge}
8103 * @see {@link withLatestFrom}
8105 * @param {ObservableInput} observable1 An input Observable to combine with other Observables.
8106 * @param {ObservableInput} observable2 An input Observable to combine with other Observables.
8107 * More than one input Observables may be given as arguments
8108 * or an array of Observables may be given as the first argument.
8109 * @param {function} [project] An optional function to project the values from
8110 * the combined latest values into a new value on the output Observable.
8111 * @param {Scheduler} [scheduler=null] The IScheduler to use for subscribing to
8112 * each input Observable.
8113 * @return {Observable} An Observable of projected values from the most recent
8114 * values from each input Observable, or an array of the most recent values from
8115 * each input Observable.
8117 * @name combineLatest
8120 function combineLatest() {
8121 var observables = [];
8122 for (var _i = 0; _i < arguments.length; _i++) {
8123 observables[_i - 0] = arguments[_i];
8126 var scheduler = null;
8127 if (isScheduler_1.isScheduler(observables[observables.length - 1])) {
8128 scheduler = observables.pop();
8130 if (typeof observables[observables.length - 1] === 'function') {
8131 project = observables.pop();
8133 // if the first and only other argument besides the resultSelector is an array
8134 // assume it's been called with `combineLatest([obs1, obs2, obs3], project)`
8135 if (observables.length === 1 && isArray_1.isArray(observables[0])) {
8136 observables = observables[0];
8138 return new ArrayObservable_1.ArrayObservable(observables, scheduler).lift(new combineLatest_1.CombineLatestOperator(project));
8140 exports.combineLatest = combineLatest;
8142 },{"../operator/combineLatest":111,"../util/isArray":162,"../util/isScheduler":169,"./ArrayObservable":85}],97:[function(require,module,exports){
8144 var DeferObservable_1 = require('./DeferObservable');
8145 exports.defer = DeferObservable_1.DeferObservable.create;
8147 },{"./DeferObservable":87}],98:[function(require,module,exports){
8149 var EmptyObservable_1 = require('./EmptyObservable');
8150 exports.empty = EmptyObservable_1.EmptyObservable.create;
8152 },{"./EmptyObservable":88}],99:[function(require,module,exports){
8154 var FromObservable_1 = require('./FromObservable');
8155 exports.from = FromObservable_1.FromObservable.create;
8157 },{"./FromObservable":91}],100:[function(require,module,exports){
8159 var FromEventObservable_1 = require('./FromEventObservable');
8160 exports.fromEvent = FromEventObservable_1.FromEventObservable.create;
8162 },{"./FromEventObservable":90}],101:[function(require,module,exports){
8164 var PromiseObservable_1 = require('./PromiseObservable');
8165 exports.fromPromise = PromiseObservable_1.PromiseObservable.create;
8167 },{"./PromiseObservable":93}],102:[function(require,module,exports){
8169 var merge_1 = require('../operator/merge');
8170 exports.merge = merge_1.mergeStatic;
8172 },{"../operator/merge":124}],103:[function(require,module,exports){
8174 var ArrayObservable_1 = require('./ArrayObservable');
8175 exports.of = ArrayObservable_1.ArrayObservable.of;
8177 },{"./ArrayObservable":85}],104:[function(require,module,exports){
8179 var ErrorObservable_1 = require('./ErrorObservable');
8180 exports._throw = ErrorObservable_1.ErrorObservable.create;
8182 },{"./ErrorObservable":89}],105:[function(require,module,exports){
8184 var TimerObservable_1 = require('./TimerObservable');
8185 exports.timer = TimerObservable_1.TimerObservable.create;
8187 },{"./TimerObservable":95}],106:[function(require,module,exports){
8189 var zip_1 = require('../operator/zip');
8190 exports.zip = zip_1.zipStatic;
8192 },{"../operator/zip":144}],107:[function(require,module,exports){
8194 var __extends = (this && this.__extends) || function (d, b) {
8195 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
8196 function __() { this.constructor = d; }
8197 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
8199 var OuterSubscriber_1 = require('../OuterSubscriber');
8200 var subscribeToResult_1 = require('../util/subscribeToResult');
8202 * Buffers the source Observable values until `closingNotifier` emits.
8204 * <span class="informal">Collects values from the past as an array, and emits
8205 * that array only when another Observable emits.</span>
8207 * <img src="./img/buffer.png" width="100%">
8209 * Buffers the incoming Observable values until the given `closingNotifier`
8210 * Observable emits a value, at which point it emits the buffer on the output
8211 * Observable and starts a new buffer internally, awaiting the next time
8212 * `closingNotifier` emits.
8214 * @example <caption>On every click, emit array of most recent interval events</caption>
8215 * var clicks = Rx.Observable.fromEvent(document, 'click');
8216 * var interval = Rx.Observable.interval(1000);
8217 * var buffered = interval.buffer(clicks);
8218 * buffered.subscribe(x => console.log(x));
8220 * @see {@link bufferCount}
8221 * @see {@link bufferTime}
8222 * @see {@link bufferToggle}
8223 * @see {@link bufferWhen}
8224 * @see {@link window}
8226 * @param {Observable<any>} closingNotifier An Observable that signals the
8227 * buffer to be emitted on the output Observable.
8228 * @return {Observable<T[]>} An Observable of buffers, which are arrays of
8233 function buffer(closingNotifier) {
8234 return this.lift(new BufferOperator(closingNotifier));
8236 exports.buffer = buffer;
8237 var BufferOperator = (function () {
8238 function BufferOperator(closingNotifier) {
8239 this.closingNotifier = closingNotifier;
8241 BufferOperator.prototype.call = function (subscriber, source) {
8242 return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));
8244 return BufferOperator;
8247 * We need this JSDoc comment for affecting ESDoc.
8249 * @extends {Ignored}
8251 var BufferSubscriber = (function (_super) {
8252 __extends(BufferSubscriber, _super);
8253 function BufferSubscriber(destination, closingNotifier) {
8254 _super.call(this, destination);
8256 this.add(subscribeToResult_1.subscribeToResult(this, closingNotifier));
8258 BufferSubscriber.prototype._next = function (value) {
8259 this.buffer.push(value);
8261 BufferSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
8262 var buffer = this.buffer;
8264 this.destination.next(buffer);
8266 return BufferSubscriber;
8267 }(OuterSubscriber_1.OuterSubscriber));
8269 },{"../OuterSubscriber":30,"../util/subscribeToResult":171}],108:[function(require,module,exports){
8271 var __extends = (this && this.__extends) || function (d, b) {
8272 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
8273 function __() { this.constructor = d; }
8274 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
8276 var Subscriber_1 = require('../Subscriber');
8278 * Buffers the source Observable values until the size hits the maximum
8279 * `bufferSize` given.
8281 * <span class="informal">Collects values from the past as an array, and emits
8282 * that array only when its size reaches `bufferSize`.</span>
8284 * <img src="./img/bufferCount.png" width="100%">
8286 * Buffers a number of values from the source Observable by `bufferSize` then
8287 * emits the buffer and clears it, and starts a new buffer each
8288 * `startBufferEvery` values. If `startBufferEvery` is not provided or is
8289 * `null`, then new buffers are started immediately at the start of the source
8290 * and when each buffer closes and is emitted.
8292 * @example <caption>Emit the last two click events as an array</caption>
8293 * var clicks = Rx.Observable.fromEvent(document, 'click');
8294 * var buffered = clicks.bufferCount(2);
8295 * buffered.subscribe(x => console.log(x));
8297 * @example <caption>On every click, emit the last two click events as an array</caption>
8298 * var clicks = Rx.Observable.fromEvent(document, 'click');
8299 * var buffered = clicks.bufferCount(2, 1);
8300 * buffered.subscribe(x => console.log(x));
8302 * @see {@link buffer}
8303 * @see {@link bufferTime}
8304 * @see {@link bufferToggle}
8305 * @see {@link bufferWhen}
8306 * @see {@link pairwise}
8307 * @see {@link windowCount}
8309 * @param {number} bufferSize The maximum size of the buffer emitted.
8310 * @param {number} [startBufferEvery] Interval at which to start a new buffer.
8311 * For example if `startBufferEvery` is `2`, then a new buffer will be started
8312 * on every other value from the source. A new buffer is started at the
8313 * beginning of the source by default.
8314 * @return {Observable<T[]>} An Observable of arrays of buffered values.
8315 * @method bufferCount
8318 function bufferCount(bufferSize, startBufferEvery) {
8319 if (startBufferEvery === void 0) { startBufferEvery = null; }
8320 return this.lift(new BufferCountOperator(bufferSize, startBufferEvery));
8322 exports.bufferCount = bufferCount;
8323 var BufferCountOperator = (function () {
8324 function BufferCountOperator(bufferSize, startBufferEvery) {
8325 this.bufferSize = bufferSize;
8326 this.startBufferEvery = startBufferEvery;
8328 BufferCountOperator.prototype.call = function (subscriber, source) {
8329 return source.subscribe(new BufferCountSubscriber(subscriber, this.bufferSize, this.startBufferEvery));
8331 return BufferCountOperator;
8334 * We need this JSDoc comment for affecting ESDoc.
8336 * @extends {Ignored}
8338 var BufferCountSubscriber = (function (_super) {
8339 __extends(BufferCountSubscriber, _super);
8340 function BufferCountSubscriber(destination, bufferSize, startBufferEvery) {
8341 _super.call(this, destination);
8342 this.bufferSize = bufferSize;
8343 this.startBufferEvery = startBufferEvery;
8347 BufferCountSubscriber.prototype._next = function (value) {
8348 var count = this.count++;
8349 var _a = this, destination = _a.destination, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers;
8350 var startOn = (startBufferEvery == null) ? bufferSize : startBufferEvery;
8351 if (count % startOn === 0) {
8354 for (var i = buffers.length; i--;) {
8355 var buffer = buffers[i];
8357 if (buffer.length === bufferSize) {
8358 buffers.splice(i, 1);
8359 destination.next(buffer);
8363 BufferCountSubscriber.prototype._complete = function () {
8364 var destination = this.destination;
8365 var buffers = this.buffers;
8366 while (buffers.length > 0) {
8367 var buffer = buffers.shift();
8368 if (buffer.length > 0) {
8369 destination.next(buffer);
8372 _super.prototype._complete.call(this);
8374 return BufferCountSubscriber;
8375 }(Subscriber_1.Subscriber));
8377 },{"../Subscriber":35}],109:[function(require,module,exports){
8379 var __extends = (this && this.__extends) || function (d, b) {
8380 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
8381 function __() { this.constructor = d; }
8382 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
8384 var Subscription_1 = require('../Subscription');
8385 var tryCatch_1 = require('../util/tryCatch');
8386 var errorObject_1 = require('../util/errorObject');
8387 var OuterSubscriber_1 = require('../OuterSubscriber');
8388 var subscribeToResult_1 = require('../util/subscribeToResult');
8390 * Buffers the source Observable values, using a factory function of closing
8391 * Observables to determine when to close, emit, and reset the buffer.
8393 * <span class="informal">Collects values from the past as an array. When it
8394 * starts collecting values, it calls a function that returns an Observable that
8395 * tells when to close the buffer and restart collecting.</span>
8397 * <img src="./img/bufferWhen.png" width="100%">
8399 * Opens a buffer immediately, then closes the buffer when the observable
8400 * returned by calling `closingSelector` function emits a value. When it closes
8401 * the buffer, it immediately opens a new buffer and repeats the process.
8403 * @example <caption>Emit an array of the last clicks every [1-5] random seconds</caption>
8404 * var clicks = Rx.Observable.fromEvent(document, 'click');
8405 * var buffered = clicks.bufferWhen(() =>
8406 * Rx.Observable.interval(1000 + Math.random() * 4000)
8408 * buffered.subscribe(x => console.log(x));
8410 * @see {@link buffer}
8411 * @see {@link bufferCount}
8412 * @see {@link bufferTime}
8413 * @see {@link bufferToggle}
8414 * @see {@link windowWhen}
8416 * @param {function(): Observable} closingSelector A function that takes no
8417 * arguments and returns an Observable that signals buffer closure.
8418 * @return {Observable<T[]>} An observable of arrays of buffered values.
8419 * @method bufferWhen
8422 function bufferWhen(closingSelector) {
8423 return this.lift(new BufferWhenOperator(closingSelector));
8425 exports.bufferWhen = bufferWhen;
8426 var BufferWhenOperator = (function () {
8427 function BufferWhenOperator(closingSelector) {
8428 this.closingSelector = closingSelector;
8430 BufferWhenOperator.prototype.call = function (subscriber, source) {
8431 return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));
8433 return BufferWhenOperator;
8436 * We need this JSDoc comment for affecting ESDoc.
8438 * @extends {Ignored}
8440 var BufferWhenSubscriber = (function (_super) {
8441 __extends(BufferWhenSubscriber, _super);
8442 function BufferWhenSubscriber(destination, closingSelector) {
8443 _super.call(this, destination);
8444 this.closingSelector = closingSelector;
8445 this.subscribing = false;
8448 BufferWhenSubscriber.prototype._next = function (value) {
8449 this.buffer.push(value);
8451 BufferWhenSubscriber.prototype._complete = function () {
8452 var buffer = this.buffer;
8454 this.destination.next(buffer);
8456 _super.prototype._complete.call(this);
8458 BufferWhenSubscriber.prototype._unsubscribe = function () {
8460 this.subscribing = false;
8462 BufferWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
8465 BufferWhenSubscriber.prototype.notifyComplete = function () {
8466 if (this.subscribing) {
8473 BufferWhenSubscriber.prototype.openBuffer = function () {
8474 var closingSubscription = this.closingSubscription;
8475 if (closingSubscription) {
8476 this.remove(closingSubscription);
8477 closingSubscription.unsubscribe();
8479 var buffer = this.buffer;
8481 this.destination.next(buffer);
8484 var closingNotifier = tryCatch_1.tryCatch(this.closingSelector)();
8485 if (closingNotifier === errorObject_1.errorObject) {
8486 this.error(errorObject_1.errorObject.e);
8489 closingSubscription = new Subscription_1.Subscription();
8490 this.closingSubscription = closingSubscription;
8491 this.add(closingSubscription);
8492 this.subscribing = true;
8493 closingSubscription.add(subscribeToResult_1.subscribeToResult(this, closingNotifier));
8494 this.subscribing = false;
8497 return BufferWhenSubscriber;
8498 }(OuterSubscriber_1.OuterSubscriber));
8500 },{"../OuterSubscriber":30,"../Subscription":36,"../util/errorObject":161,"../util/subscribeToResult":171,"../util/tryCatch":173}],110:[function(require,module,exports){
8502 var __extends = (this && this.__extends) || function (d, b) {
8503 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
8504 function __() { this.constructor = d; }
8505 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
8507 var OuterSubscriber_1 = require('../OuterSubscriber');
8508 var subscribeToResult_1 = require('../util/subscribeToResult');
8510 * Catches errors on the observable to be handled by returning a new observable or throwing an error.
8512 * <img src="./img/catch.png" width="100%">
8514 * @example <caption>Continues with a different Observable when there's an error</caption>
8516 * Observable.of(1, 2, 3, 4, 5)
8523 * .catch(err => Observable.of('I', 'II', 'III', 'IV', 'V'))
8524 * .subscribe(x => console.log(x));
8525 * // 1, 2, 3, I, II, III, IV, V
8527 * @example <caption>Retries the caught source Observable again in case of error, similar to retry() operator</caption>
8529 * Observable.of(1, 2, 3, 4, 5)
8536 * .catch((err, caught) => caught)
8538 * .subscribe(x => console.log(x));
8539 * // 1, 2, 3, 1, 2, 3, ...
8541 * @example <caption>Throws a new error when the source Observable throws an error</caption>
8543 * Observable.of(1, 2, 3, 4, 5)
8551 * throw 'error in source. Details: ' + err;
8554 * x => console.log(x),
8555 * err => console.log(err)
8557 * // 1, 2, 3, error in source. Details: four!
8559 * @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which
8560 * is the source observable, in case you'd like to "retry" that observable by returning it again. Whatever observable
8561 * is returned by the `selector` will be used to continue the observable chain.
8562 * @return {Observable} An observable that originates from either the source or the observable returned by the
8563 * catch `selector` function.
8568 function _catch(selector) {
8569 var operator = new CatchOperator(selector);
8570 var caught = this.lift(operator);
8571 return (operator.caught = caught);
8573 exports._catch = _catch;
8574 var CatchOperator = (function () {
8575 function CatchOperator(selector) {
8576 this.selector = selector;
8578 CatchOperator.prototype.call = function (subscriber, source) {
8579 return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
8581 return CatchOperator;
8584 * We need this JSDoc comment for affecting ESDoc.
8586 * @extends {Ignored}
8588 var CatchSubscriber = (function (_super) {
8589 __extends(CatchSubscriber, _super);
8590 function CatchSubscriber(destination, selector, caught) {
8591 _super.call(this, destination);
8592 this.selector = selector;
8593 this.caught = caught;
8595 // NOTE: overriding `error` instead of `_error` because we don't want
8596 // to have this flag this subscriber as `isStopped`. We can mimic the
8597 // behavior of the RetrySubscriber (from the `retry` operator), where
8598 // we unsubscribe from our source chain, reset our Subscriber flags,
8599 // then subscribe to the selector result.
8600 CatchSubscriber.prototype.error = function (err) {
8601 if (!this.isStopped) {
8602 var result = void 0;
8604 result = this.selector(err, this.caught);
8607 _super.prototype.error.call(this, err2);
8610 this._unsubscribeAndRecycle();
8611 this.add(subscribeToResult_1.subscribeToResult(this, result));
8614 return CatchSubscriber;
8615 }(OuterSubscriber_1.OuterSubscriber));
8617 },{"../OuterSubscriber":30,"../util/subscribeToResult":171}],111:[function(require,module,exports){
8619 var __extends = (this && this.__extends) || function (d, b) {
8620 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
8621 function __() { this.constructor = d; }
8622 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
8624 var ArrayObservable_1 = require('../observable/ArrayObservable');
8625 var isArray_1 = require('../util/isArray');
8626 var OuterSubscriber_1 = require('../OuterSubscriber');
8627 var subscribeToResult_1 = require('../util/subscribeToResult');
8629 /* tslint:enable:max-line-length */
8631 * Combines multiple Observables to create an Observable whose values are
8632 * calculated from the latest values of each of its input Observables.
8634 * <span class="informal">Whenever any input Observable emits a value, it
8635 * computes a formula using the latest values from all the inputs, then emits
8636 * the output of that formula.</span>
8638 * <img src="./img/combineLatest.png" width="100%">
8640 * `combineLatest` combines the values from this Observable with values from
8641 * Observables passed as arguments. This is done by subscribing to each
8642 * Observable, in order, and collecting an array of each of the most recent
8643 * values any time any of the input Observables emits, then either taking that
8644 * array and passing it as arguments to an optional `project` function and
8645 * emitting the return value of that, or just emitting the array of recent
8646 * values directly if there is no `project` function.
8648 * @example <caption>Dynamically calculate the Body-Mass Index from an Observable of weight and one for height</caption>
8649 * var weight = Rx.Observable.of(70, 72, 76, 79, 75);
8650 * var height = Rx.Observable.of(1.76, 1.77, 1.78);
8651 * var bmi = weight.combineLatest(height, (w, h) => w / (h * h));
8652 * bmi.subscribe(x => console.log('BMI is ' + x));
8654 * // With output to console:
8655 * // BMI is 24.212293388429753
8656 * // BMI is 23.93948099205209
8657 * // BMI is 23.671253629592222
8659 * @see {@link combineAll}
8660 * @see {@link merge}
8661 * @see {@link withLatestFrom}
8663 * @param {ObservableInput} other An input Observable to combine with the source
8664 * Observable. More than one input Observables may be given as argument.
8665 * @param {function} [project] An optional function to project the values from
8666 * the combined latest values into a new value on the output Observable.
8667 * @return {Observable} An Observable of projected values from the most recent
8668 * values from each input Observable, or an array of the most recent values from
8669 * each input Observable.
8670 * @method combineLatest
8673 function combineLatest() {
8674 var observables = [];
8675 for (var _i = 0; _i < arguments.length; _i++) {
8676 observables[_i - 0] = arguments[_i];
8679 if (typeof observables[observables.length - 1] === 'function') {
8680 project = observables.pop();
8682 // if the first and only other argument besides the resultSelector is an array
8683 // assume it's been called with `combineLatest([obs1, obs2, obs3], project)`
8684 if (observables.length === 1 && isArray_1.isArray(observables[0])) {
8685 observables = observables[0].slice();
8687 observables.unshift(this);
8688 return this.lift.call(new ArrayObservable_1.ArrayObservable(observables), new CombineLatestOperator(project));
8690 exports.combineLatest = combineLatest;
8691 var CombineLatestOperator = (function () {
8692 function CombineLatestOperator(project) {
8693 this.project = project;
8695 CombineLatestOperator.prototype.call = function (subscriber, source) {
8696 return source.subscribe(new CombineLatestSubscriber(subscriber, this.project));
8698 return CombineLatestOperator;
8700 exports.CombineLatestOperator = CombineLatestOperator;
8702 * We need this JSDoc comment for affecting ESDoc.
8704 * @extends {Ignored}
8706 var CombineLatestSubscriber = (function (_super) {
8707 __extends(CombineLatestSubscriber, _super);
8708 function CombineLatestSubscriber(destination, project) {
8709 _super.call(this, destination);
8710 this.project = project;
8713 this.observables = [];
8715 CombineLatestSubscriber.prototype._next = function (observable) {
8716 this.values.push(none);
8717 this.observables.push(observable);
8719 CombineLatestSubscriber.prototype._complete = function () {
8720 var observables = this.observables;
8721 var len = observables.length;
8723 this.destination.complete();
8727 this.toRespond = len;
8728 for (var i = 0; i < len; i++) {
8729 var observable = observables[i];
8730 this.add(subscribeToResult_1.subscribeToResult(this, observable, observable, i));
8734 CombineLatestSubscriber.prototype.notifyComplete = function (unused) {
8735 if ((this.active -= 1) === 0) {
8736 this.destination.complete();
8739 CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
8740 var values = this.values;
8741 var oldVal = values[outerIndex];
8742 var toRespond = !this.toRespond
8744 : oldVal === none ? --this.toRespond : this.toRespond;
8745 values[outerIndex] = innerValue;
8746 if (toRespond === 0) {
8748 this._tryProject(values);
8751 this.destination.next(values.slice());
8755 CombineLatestSubscriber.prototype._tryProject = function (values) {
8758 result = this.project.apply(this, values);
8761 this.destination.error(err);
8764 this.destination.next(result);
8766 return CombineLatestSubscriber;
8767 }(OuterSubscriber_1.OuterSubscriber));
8768 exports.CombineLatestSubscriber = CombineLatestSubscriber;
8770 },{"../OuterSubscriber":30,"../observable/ArrayObservable":85,"../util/isArray":162,"../util/subscribeToResult":171}],112:[function(require,module,exports){
8772 var Observable_1 = require('../Observable');
8773 var isScheduler_1 = require('../util/isScheduler');
8774 var ArrayObservable_1 = require('../observable/ArrayObservable');
8775 var mergeAll_1 = require('./mergeAll');
8776 /* tslint:enable:max-line-length */
8778 * Creates an output Observable which sequentially emits all values from every
8779 * given input Observable after the current Observable.
8781 * <span class="informal">Concatenates multiple Observables together by
8782 * sequentially emitting their values, one Observable after the other.</span>
8784 * <img src="./img/concat.png" width="100%">
8786 * Joins this Observable with multiple other Observables by subscribing to them
8787 * one at a time, starting with the source, and merging their results into the
8788 * output Observable. Will wait for each Observable to complete before moving
8791 * @example <caption>Concatenate a timer counting from 0 to 3 with a synchronous sequence from 1 to 10</caption>
8792 * var timer = Rx.Observable.interval(1000).take(4);
8793 * var sequence = Rx.Observable.range(1, 10);
8794 * var result = timer.concat(sequence);
8795 * result.subscribe(x => console.log(x));
8798 * // 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 -immediate-> 1 ... 10
8800 * @example <caption>Concatenate 3 Observables</caption>
8801 * var timer1 = Rx.Observable.interval(1000).take(10);
8802 * var timer2 = Rx.Observable.interval(2000).take(6);
8803 * var timer3 = Rx.Observable.interval(500).take(10);
8804 * var result = timer1.concat(timer2, timer3);
8805 * result.subscribe(x => console.log(x));
8807 * // results in the following:
8808 * // (Prints to console sequentially)
8809 * // -1000ms-> 0 -1000ms-> 1 -1000ms-> ... 9
8810 * // -2000ms-> 0 -2000ms-> 1 -2000ms-> ... 5
8811 * // -500ms-> 0 -500ms-> 1 -500ms-> ... 9
8813 * @see {@link concatAll}
8814 * @see {@link concatMap}
8815 * @see {@link concatMapTo}
8817 * @param {ObservableInput} other An input Observable to concatenate after the source
8818 * Observable. More than one input Observables may be given as argument.
8819 * @param {Scheduler} [scheduler=null] An optional IScheduler to schedule each
8820 * Observable subscription on.
8821 * @return {Observable} All values of each passed Observable merged into a
8822 * single Observable, in order, in serial fashion.
8827 var observables = [];
8828 for (var _i = 0; _i < arguments.length; _i++) {
8829 observables[_i - 0] = arguments[_i];
8831 return this.lift.call(concatStatic.apply(void 0, [this].concat(observables)));
8833 exports.concat = concat;
8834 /* tslint:enable:max-line-length */
8836 * Creates an output Observable which sequentially emits all values from given
8837 * Observable and then moves on to the next.
8839 * <span class="informal">Concatenates multiple Observables together by
8840 * sequentially emitting their values, one Observable after the other.</span>
8842 * <img src="./img/concat.png" width="100%">
8844 * `concat` joins multiple Observables together, by subscribing to them one at a time and
8845 * merging their results into the output Observable. You can pass either an array of
8846 * Observables, or put them directly as arguments. Passing an empty array will result
8847 * in Observable that completes immediately.
8849 * `concat` will subscribe to first input Observable and emit all its values, without
8850 * changing or affecting them in any way. When that Observable completes, it will
8851 * subscribe to then next Observable passed and, again, emit its values. This will be
8852 * repeated, until the operator runs out of Observables. When last input Observable completes,
8853 * `concat` will complete as well. At any given moment only one Observable passed to operator
8854 * emits values. If you would like to emit values from passed Observables concurrently, check out
8855 * {@link merge} instead, especially with optional `concurrent` parameter. As a matter of fact,
8856 * `concat` is an equivalent of `merge` operator with `concurrent` parameter set to `1`.
8858 * Note that if some input Observable never completes, `concat` will also never complete
8859 * and Observables following the one that did not complete will never be subscribed. On the other
8860 * hand, if some Observable simply completes immediately after it is subscribed, it will be
8861 * invisible for `concat`, which will just move on to the next Observable.
8863 * If any Observable in chain errors, instead of passing control to the next Observable,
8864 * `concat` will error immediately as well. Observables that would be subscribed after
8865 * the one that emitted error, never will.
8867 * If you pass to `concat` the same Observable many times, its stream of values
8868 * will be "replayed" on every subscription, which means you can repeat given Observable
8869 * as many times as you like. If passing the same Observable to `concat` 1000 times becomes tedious,
8870 * you can always use {@link repeat}.
8872 * @example <caption>Concatenate a timer counting from 0 to 3 with a synchronous sequence from 1 to 10</caption>
8873 * var timer = Rx.Observable.interval(1000).take(4);
8874 * var sequence = Rx.Observable.range(1, 10);
8875 * var result = Rx.Observable.concat(timer, sequence);
8876 * result.subscribe(x => console.log(x));
8879 * // 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 -immediate-> 1 ... 10
8882 * @example <caption>Concatenate an array of 3 Observables</caption>
8883 * var timer1 = Rx.Observable.interval(1000).take(10);
8884 * var timer2 = Rx.Observable.interval(2000).take(6);
8885 * var timer3 = Rx.Observable.interval(500).take(10);
8886 * var result = Rx.Observable.concat([timer1, timer2, timer3]); // note that array is passed
8887 * result.subscribe(x => console.log(x));
8889 * // results in the following:
8890 * // (Prints to console sequentially)
8891 * // -1000ms-> 0 -1000ms-> 1 -1000ms-> ... 9
8892 * // -2000ms-> 0 -2000ms-> 1 -2000ms-> ... 5
8893 * // -500ms-> 0 -500ms-> 1 -500ms-> ... 9
8896 * @example <caption>Concatenate the same Observable to repeat it</caption>
8897 * const timer = Rx.Observable.interval(1000).take(2);
8899 * Rx.Observable.concat(timer, timer) // concating the same Observable!
8901 * value => console.log(value),
8903 * () => console.log('...and it is done!')
8911 * // "...and it is done!" also after 4s
8913 * @see {@link concatAll}
8914 * @see {@link concatMap}
8915 * @see {@link concatMapTo}
8917 * @param {ObservableInput} input1 An input Observable to concatenate with others.
8918 * @param {ObservableInput} input2 An input Observable to concatenate with others.
8919 * More than one input Observables may be given as argument.
8920 * @param {Scheduler} [scheduler=null] An optional IScheduler to schedule each
8921 * Observable subscription on.
8922 * @return {Observable} All values of each passed Observable merged into a
8923 * single Observable, in order, in serial fashion.
8928 function concatStatic() {
8929 var observables = [];
8930 for (var _i = 0; _i < arguments.length; _i++) {
8931 observables[_i - 0] = arguments[_i];
8933 var scheduler = null;
8934 var args = observables;
8935 if (isScheduler_1.isScheduler(args[observables.length - 1])) {
8936 scheduler = args.pop();
8938 if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable_1.Observable) {
8939 return observables[0];
8941 return new ArrayObservable_1.ArrayObservable(observables, scheduler).lift(new mergeAll_1.MergeAllOperator(1));
8943 exports.concatStatic = concatStatic;
8945 },{"../Observable":28,"../observable/ArrayObservable":85,"../util/isScheduler":169,"./mergeAll":125}],113:[function(require,module,exports){
8947 var __extends = (this && this.__extends) || function (d, b) {
8948 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
8949 function __() { this.constructor = d; }
8950 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
8952 var Subscriber_1 = require('../Subscriber');
8953 var async_1 = require('../scheduler/async');
8955 * Emits a value from the source Observable only after a particular time span
8956 * has passed without another source emission.
8958 * <span class="informal">It's like {@link delay}, but passes only the most
8959 * recent value from each burst of emissions.</span>
8961 * <img src="./img/debounceTime.png" width="100%">
8963 * `debounceTime` delays values emitted by the source Observable, but drops
8964 * previous pending delayed emissions if a new value arrives on the source
8965 * Observable. This operator keeps track of the most recent value from the
8966 * source Observable, and emits that only when `dueTime` enough time has passed
8967 * without any other value appearing on the source Observable. If a new value
8968 * appears before `dueTime` silence occurs, the previous value will be dropped
8969 * and will not be emitted on the output Observable.
8971 * This is a rate-limiting operator, because it is impossible for more than one
8972 * value to be emitted in any time window of duration `dueTime`, but it is also
8973 * a delay-like operator since output emissions do not occur at the same time as
8974 * they did on the source Observable. Optionally takes a {@link IScheduler} for
8977 * @example <caption>Emit the most recent click after a burst of clicks</caption>
8978 * var clicks = Rx.Observable.fromEvent(document, 'click');
8979 * var result = clicks.debounceTime(1000);
8980 * result.subscribe(x => console.log(x));
8982 * @see {@link auditTime}
8983 * @see {@link debounce}
8984 * @see {@link delay}
8985 * @see {@link sampleTime}
8986 * @see {@link throttleTime}
8988 * @param {number} dueTime The timeout duration in milliseconds (or the time
8989 * unit determined internally by the optional `scheduler`) for the window of
8990 * time required to wait for emission silence before emitting the most recent
8992 * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for
8993 * managing the timers that handle the timeout for each value.
8994 * @return {Observable} An Observable that delays the emissions of the source
8995 * Observable by the specified `dueTime`, and may drop some values if they occur
8997 * @method debounceTime
9000 function debounceTime(dueTime, scheduler) {
9001 if (scheduler === void 0) { scheduler = async_1.async; }
9002 return this.lift(new DebounceTimeOperator(dueTime, scheduler));
9004 exports.debounceTime = debounceTime;
9005 var DebounceTimeOperator = (function () {
9006 function DebounceTimeOperator(dueTime, scheduler) {
9007 this.dueTime = dueTime;
9008 this.scheduler = scheduler;
9010 DebounceTimeOperator.prototype.call = function (subscriber, source) {
9011 return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));
9013 return DebounceTimeOperator;
9016 * We need this JSDoc comment for affecting ESDoc.
9018 * @extends {Ignored}
9020 var DebounceTimeSubscriber = (function (_super) {
9021 __extends(DebounceTimeSubscriber, _super);
9022 function DebounceTimeSubscriber(destination, dueTime, scheduler) {
9023 _super.call(this, destination);
9024 this.dueTime = dueTime;
9025 this.scheduler = scheduler;
9026 this.debouncedSubscription = null;
9027 this.lastValue = null;
9028 this.hasValue = false;
9030 DebounceTimeSubscriber.prototype._next = function (value) {
9031 this.clearDebounce();
9032 this.lastValue = value;
9033 this.hasValue = true;
9034 this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));
9036 DebounceTimeSubscriber.prototype._complete = function () {
9037 this.debouncedNext();
9038 this.destination.complete();
9040 DebounceTimeSubscriber.prototype.debouncedNext = function () {
9041 this.clearDebounce();
9042 if (this.hasValue) {
9043 this.destination.next(this.lastValue);
9044 this.lastValue = null;
9045 this.hasValue = false;
9048 DebounceTimeSubscriber.prototype.clearDebounce = function () {
9049 var debouncedSubscription = this.debouncedSubscription;
9050 if (debouncedSubscription !== null) {
9051 this.remove(debouncedSubscription);
9052 debouncedSubscription.unsubscribe();
9053 this.debouncedSubscription = null;
9056 return DebounceTimeSubscriber;
9057 }(Subscriber_1.Subscriber));
9058 function dispatchNext(subscriber) {
9059 subscriber.debouncedNext();
9062 },{"../Subscriber":35,"../scheduler/async":150}],114:[function(require,module,exports){
9064 var __extends = (this && this.__extends) || function (d, b) {
9065 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
9066 function __() { this.constructor = d; }
9067 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
9069 var async_1 = require('../scheduler/async');
9070 var isDate_1 = require('../util/isDate');
9071 var Subscriber_1 = require('../Subscriber');
9072 var Notification_1 = require('../Notification');
9074 * Delays the emission of items from the source Observable by a given timeout or
9075 * until a given Date.
9077 * <span class="informal">Time shifts each item by some specified amount of
9078 * milliseconds.</span>
9080 * <img src="./img/delay.png" width="100%">
9082 * If the delay argument is a Number, this operator time shifts the source
9083 * Observable by that amount of time expressed in milliseconds. The relative
9084 * time intervals between the values are preserved.
9086 * If the delay argument is a Date, this operator time shifts the start of the
9087 * Observable execution until the given date occurs.
9089 * @example <caption>Delay each click by one second</caption>
9090 * var clicks = Rx.Observable.fromEvent(document, 'click');
9091 * var delayedClicks = clicks.delay(1000); // each click emitted after 1 second
9092 * delayedClicks.subscribe(x => console.log(x));
9094 * @example <caption>Delay all clicks until a future date happens</caption>
9095 * var clicks = Rx.Observable.fromEvent(document, 'click');
9096 * var date = new Date('March 15, 2050 12:00:00'); // in the future
9097 * var delayedClicks = clicks.delay(date); // click emitted only after that date
9098 * delayedClicks.subscribe(x => console.log(x));
9100 * @see {@link debounceTime}
9101 * @see {@link delayWhen}
9103 * @param {number|Date} delay The delay duration in milliseconds (a `number`) or
9104 * a `Date` until which the emission of the source items is delayed.
9105 * @param {Scheduler} [scheduler=async] The IScheduler to use for
9106 * managing the timers that handle the time-shift for each item.
9107 * @return {Observable} An Observable that delays the emissions of the source
9108 * Observable by the specified timeout or Date.
9112 function delay(delay, scheduler) {
9113 if (scheduler === void 0) { scheduler = async_1.async; }
9114 var absoluteDelay = isDate_1.isDate(delay);
9115 var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);
9116 return this.lift(new DelayOperator(delayFor, scheduler));
9118 exports.delay = delay;
9119 var DelayOperator = (function () {
9120 function DelayOperator(delay, scheduler) {
9122 this.scheduler = scheduler;
9124 DelayOperator.prototype.call = function (subscriber, source) {
9125 return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));
9127 return DelayOperator;
9130 * We need this JSDoc comment for affecting ESDoc.
9132 * @extends {Ignored}
9134 var DelaySubscriber = (function (_super) {
9135 __extends(DelaySubscriber, _super);
9136 function DelaySubscriber(destination, delay, scheduler) {
9137 _super.call(this, destination);
9139 this.scheduler = scheduler;
9141 this.active = false;
9142 this.errored = false;
9144 DelaySubscriber.dispatch = function (state) {
9145 var source = state.source;
9146 var queue = source.queue;
9147 var scheduler = state.scheduler;
9148 var destination = state.destination;
9149 while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {
9150 queue.shift().notification.observe(destination);
9152 if (queue.length > 0) {
9153 var delay_1 = Math.max(0, queue[0].time - scheduler.now());
9154 this.schedule(state, delay_1);
9157 source.active = false;
9160 DelaySubscriber.prototype._schedule = function (scheduler) {
9162 this.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {
9163 source: this, destination: this.destination, scheduler: scheduler
9166 DelaySubscriber.prototype.scheduleNotification = function (notification) {
9167 if (this.errored === true) {
9170 var scheduler = this.scheduler;
9171 var message = new DelayMessage(scheduler.now() + this.delay, notification);
9172 this.queue.push(message);
9173 if (this.active === false) {
9174 this._schedule(scheduler);
9177 DelaySubscriber.prototype._next = function (value) {
9178 this.scheduleNotification(Notification_1.Notification.createNext(value));
9180 DelaySubscriber.prototype._error = function (err) {
9181 this.errored = true;
9183 this.destination.error(err);
9185 DelaySubscriber.prototype._complete = function () {
9186 this.scheduleNotification(Notification_1.Notification.createComplete());
9188 return DelaySubscriber;
9189 }(Subscriber_1.Subscriber));
9190 var DelayMessage = (function () {
9191 function DelayMessage(time, notification) {
9193 this.notification = notification;
9195 return DelayMessage;
9198 },{"../Notification":27,"../Subscriber":35,"../scheduler/async":150,"../util/isDate":164}],115:[function(require,module,exports){
9200 var __extends = (this && this.__extends) || function (d, b) {
9201 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
9202 function __() { this.constructor = d; }
9203 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
9205 var OuterSubscriber_1 = require('../OuterSubscriber');
9206 var subscribeToResult_1 = require('../util/subscribeToResult');
9207 var Set_1 = require('../util/Set');
9209 * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from previous items.
9211 * If a keySelector function is provided, then it will project each value from the source observable into a new value that it will
9212 * check for equality with previously projected values. If a keySelector function is not provided, it will use each value from the
9213 * source observable directly with an equality check against previous values.
9215 * In JavaScript runtimes that support `Set`, this operator will use a `Set` to improve performance of the distinct value checking.
9217 * In other runtimes, this operator will use a minimal implementation of `Set` that relies on an `Array` and `indexOf` under the
9218 * hood, so performance will degrade as more values are checked for distinction. Even in newer browsers, a long-running `distinct`
9219 * use might result in memory leaks. To help alleviate this in some scenarios, an optional `flushes` parameter is also provided so
9220 * that the internal `Set` can be "flushed", basically clearing it of values.
9222 * @example <caption>A simple example with numbers</caption>
9223 * Observable.of(1, 1, 2, 2, 2, 1, 2, 3, 4, 3, 2, 1)
9225 * .subscribe(x => console.log(x)); // 1, 2, 3, 4
9227 * @example <caption>An example using a keySelector function</caption>
9228 * interface Person {
9233 * Observable.of<Person>(
9234 * { age: 4, name: 'Foo'},
9235 * { age: 7, name: 'Bar'},
9236 * { age: 5, name: 'Foo'})
9237 * .distinct((p: Person) => p.name)
9238 * .subscribe(x => console.log(x));
9241 * // { age: 4, name: 'Foo' }
9242 * // { age: 7, name: 'Bar' }
9244 * @see {@link distinctUntilChanged}
9245 * @see {@link distinctUntilKeyChanged}
9247 * @param {function} [keySelector] Optional function to select which value you want to check as distinct.
9248 * @param {Observable} [flushes] Optional Observable for flushing the internal HashSet of the operator.
9249 * @return {Observable} An Observable that emits items from the source Observable with distinct values.
9253 function distinct(keySelector, flushes) {
9254 return this.lift(new DistinctOperator(keySelector, flushes));
9256 exports.distinct = distinct;
9257 var DistinctOperator = (function () {
9258 function DistinctOperator(keySelector, flushes) {
9259 this.keySelector = keySelector;
9260 this.flushes = flushes;
9262 DistinctOperator.prototype.call = function (subscriber, source) {
9263 return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
9265 return DistinctOperator;
9268 * We need this JSDoc comment for affecting ESDoc.
9270 * @extends {Ignored}
9272 var DistinctSubscriber = (function (_super) {
9273 __extends(DistinctSubscriber, _super);
9274 function DistinctSubscriber(destination, keySelector, flushes) {
9275 _super.call(this, destination);
9276 this.keySelector = keySelector;
9277 this.values = new Set_1.Set();
9279 this.add(subscribeToResult_1.subscribeToResult(this, flushes));
9282 DistinctSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
9283 this.values.clear();
9285 DistinctSubscriber.prototype.notifyError = function (error, innerSub) {
9288 DistinctSubscriber.prototype._next = function (value) {
9289 if (this.keySelector) {
9290 this._useKeySelector(value);
9293 this._finalizeNext(value, value);
9296 DistinctSubscriber.prototype._useKeySelector = function (value) {
9298 var destination = this.destination;
9300 key = this.keySelector(value);
9303 destination.error(err);
9306 this._finalizeNext(key, value);
9308 DistinctSubscriber.prototype._finalizeNext = function (key, value) {
9309 var values = this.values;
9310 if (!values.has(key)) {
9312 this.destination.next(value);
9315 return DistinctSubscriber;
9316 }(OuterSubscriber_1.OuterSubscriber));
9317 exports.DistinctSubscriber = DistinctSubscriber;
9319 },{"../OuterSubscriber":30,"../util/Set":159,"../util/subscribeToResult":171}],116:[function(require,module,exports){
9321 var __extends = (this && this.__extends) || function (d, b) {
9322 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
9323 function __() { this.constructor = d; }
9324 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
9326 var Subscriber_1 = require('../Subscriber');
9327 var tryCatch_1 = require('../util/tryCatch');
9328 var errorObject_1 = require('../util/errorObject');
9329 /* tslint:enable:max-line-length */
9331 * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item.
9333 * If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.
9335 * If a comparator function is not provided, an equality check is used by default.
9337 * @example <caption>A simple example with numbers</caption>
9338 * Observable.of(1, 1, 2, 2, 2, 1, 1, 2, 3, 3, 4)
9339 * .distinctUntilChanged()
9340 * .subscribe(x => console.log(x)); // 1, 2, 1, 2, 3, 4
9342 * @example <caption>An example using a compare function</caption>
9343 * interface Person {
9348 * Observable.of<Person>(
9349 * { age: 4, name: 'Foo'},
9350 * { age: 7, name: 'Bar'},
9351 * { age: 5, name: 'Foo'})
9352 * { age: 6, name: 'Foo'})
9353 * .distinctUntilChanged((p: Person, q: Person) => p.name === q.name)
9354 * .subscribe(x => console.log(x));
9357 * // { age: 4, name: 'Foo' }
9358 * // { age: 7, name: 'Bar' }
9359 * // { age: 5, name: 'Foo' }
9361 * @see {@link distinct}
9362 * @see {@link distinctUntilKeyChanged}
9364 * @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.
9365 * @return {Observable} An Observable that emits items from the source Observable with distinct values.
9366 * @method distinctUntilChanged
9369 function distinctUntilChanged(compare, keySelector) {
9370 return this.lift(new DistinctUntilChangedOperator(compare, keySelector));
9372 exports.distinctUntilChanged = distinctUntilChanged;
9373 var DistinctUntilChangedOperator = (function () {
9374 function DistinctUntilChangedOperator(compare, keySelector) {
9375 this.compare = compare;
9376 this.keySelector = keySelector;
9378 DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {
9379 return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
9381 return DistinctUntilChangedOperator;
9384 * We need this JSDoc comment for affecting ESDoc.
9386 * @extends {Ignored}
9388 var DistinctUntilChangedSubscriber = (function (_super) {
9389 __extends(DistinctUntilChangedSubscriber, _super);
9390 function DistinctUntilChangedSubscriber(destination, compare, keySelector) {
9391 _super.call(this, destination);
9392 this.keySelector = keySelector;
9393 this.hasKey = false;
9394 if (typeof compare === 'function') {
9395 this.compare = compare;
9398 DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {
9401 DistinctUntilChangedSubscriber.prototype._next = function (value) {
9402 var keySelector = this.keySelector;
9405 key = tryCatch_1.tryCatch(this.keySelector)(value);
9406 if (key === errorObject_1.errorObject) {
9407 return this.destination.error(errorObject_1.errorObject.e);
9412 result = tryCatch_1.tryCatch(this.compare)(this.key, key);
9413 if (result === errorObject_1.errorObject) {
9414 return this.destination.error(errorObject_1.errorObject.e);
9420 if (Boolean(result) === false) {
9422 this.destination.next(value);
9425 return DistinctUntilChangedSubscriber;
9426 }(Subscriber_1.Subscriber));
9428 },{"../Subscriber":35,"../util/errorObject":161,"../util/tryCatch":173}],117:[function(require,module,exports){
9430 var __extends = (this && this.__extends) || function (d, b) {
9431 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
9432 function __() { this.constructor = d; }
9433 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
9435 var Subscriber_1 = require('../Subscriber');
9436 /* tslint:enable:max-line-length */
9438 * Perform a side effect for every emission on the source Observable, but return
9439 * an Observable that is identical to the source.
9441 * <span class="informal">Intercepts each emission on the source and runs a
9442 * function, but returns an output which is identical to the source.</span>
9444 * <img src="./img/do.png" width="100%">
9446 * Returns a mirrored Observable of the source Observable, but modified so that
9447 * the provided Observer is called to perform a side effect for every value,
9448 * error, and completion emitted by the source. Any errors that are thrown in
9449 * the aforementioned Observer or handlers are safely sent down the error path
9450 * of the output Observable.
9452 * This operator is useful for debugging your Observables for the correct values
9453 * or performing other side effects.
9455 * Note: this is different to a `subscribe` on the Observable. If the Observable
9456 * returned by `do` is not subscribed, the side effects specified by the
9457 * Observer will never happen. `do` therefore simply spies on existing
9458 * execution, it does not trigger an execution to happen like `subscribe` does.
9460 * @example <caption>Map every every click to the clientX position of that click, while also logging the click event</caption>
9461 * var clicks = Rx.Observable.fromEvent(document, 'click');
9462 * var positions = clicks
9463 * .do(ev => console.log(ev))
9464 * .map(ev => ev.clientX);
9465 * positions.subscribe(x => console.log(x));
9468 * @see {@link subscribe}
9470 * @param {Observer|function} [nextOrObserver] A normal Observer object or a
9471 * callback for `next`.
9472 * @param {function} [error] Callback for errors in the source.
9473 * @param {function} [complete] Callback for the completion of the source.
9474 * @return {Observable} An Observable identical to the source, but runs the
9475 * specified Observer or callback(s) for each item.
9480 function _do(nextOrObserver, error, complete) {
9481 return this.lift(new DoOperator(nextOrObserver, error, complete));
9484 var DoOperator = (function () {
9485 function DoOperator(nextOrObserver, error, complete) {
9486 this.nextOrObserver = nextOrObserver;
9488 this.complete = complete;
9490 DoOperator.prototype.call = function (subscriber, source) {
9491 return source.subscribe(new DoSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));
9496 * We need this JSDoc comment for affecting ESDoc.
9498 * @extends {Ignored}
9500 var DoSubscriber = (function (_super) {
9501 __extends(DoSubscriber, _super);
9502 function DoSubscriber(destination, nextOrObserver, error, complete) {
9503 _super.call(this, destination);
9504 var safeSubscriber = new Subscriber_1.Subscriber(nextOrObserver, error, complete);
9505 safeSubscriber.syncErrorThrowable = true;
9506 this.add(safeSubscriber);
9507 this.safeSubscriber = safeSubscriber;
9509 DoSubscriber.prototype._next = function (value) {
9510 var safeSubscriber = this.safeSubscriber;
9511 safeSubscriber.next(value);
9512 if (safeSubscriber.syncErrorThrown) {
9513 this.destination.error(safeSubscriber.syncErrorValue);
9516 this.destination.next(value);
9519 DoSubscriber.prototype._error = function (err) {
9520 var safeSubscriber = this.safeSubscriber;
9521 safeSubscriber.error(err);
9522 if (safeSubscriber.syncErrorThrown) {
9523 this.destination.error(safeSubscriber.syncErrorValue);
9526 this.destination.error(err);
9529 DoSubscriber.prototype._complete = function () {
9530 var safeSubscriber = this.safeSubscriber;
9531 safeSubscriber.complete();
9532 if (safeSubscriber.syncErrorThrown) {
9533 this.destination.error(safeSubscriber.syncErrorValue);
9536 this.destination.complete();
9539 return DoSubscriber;
9540 }(Subscriber_1.Subscriber));
9542 },{"../Subscriber":35}],118:[function(require,module,exports){
9544 var __extends = (this && this.__extends) || function (d, b) {
9545 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
9546 function __() { this.constructor = d; }
9547 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
9549 var tryCatch_1 = require('../util/tryCatch');
9550 var errorObject_1 = require('../util/errorObject');
9551 var OuterSubscriber_1 = require('../OuterSubscriber');
9552 var subscribeToResult_1 = require('../util/subscribeToResult');
9553 /* tslint:enable:max-line-length */
9555 * Recursively projects each source value to an Observable which is merged in
9556 * the output Observable.
9558 * <span class="informal">It's similar to {@link mergeMap}, but applies the
9559 * projection function to every source value as well as every output value.
9560 * It's recursive.</span>
9562 * <img src="./img/expand.png" width="100%">
9564 * Returns an Observable that emits items based on applying a function that you
9565 * supply to each item emitted by the source Observable, where that function
9566 * returns an Observable, and then merging those resulting Observables and
9567 * emitting the results of this merger. *Expand* will re-emit on the output
9568 * Observable every source value. Then, each output value is given to the
9569 * `project` function which returns an inner Observable to be merged on the
9570 * output Observable. Those output values resulting from the projection are also
9571 * given to the `project` function to produce new output values. This is how
9572 * *expand* behaves recursively.
9574 * @example <caption>Start emitting the powers of two on every click, at most 10 of them</caption>
9575 * var clicks = Rx.Observable.fromEvent(document, 'click');
9576 * var powersOfTwo = clicks
9578 * .expand(x => Rx.Observable.of(2 * x).delay(1000))
9580 * powersOfTwo.subscribe(x => console.log(x));
9582 * @see {@link mergeMap}
9583 * @see {@link mergeScan}
9585 * @param {function(value: T, index: number) => Observable} project A function
9586 * that, when applied to an item emitted by the source or the output Observable,
9587 * returns an Observable.
9588 * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
9589 * Observables being subscribed to concurrently.
9590 * @param {Scheduler} [scheduler=null] The IScheduler to use for subscribing to
9591 * each projected inner Observable.
9592 * @return {Observable} An Observable that emits the source values and also
9593 * result of applying the projection function to each value emitted on the
9594 * output Observable and and merging the results of the Observables obtained
9595 * from this transformation.
9599 function expand(project, concurrent, scheduler) {
9600 if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
9601 if (scheduler === void 0) { scheduler = undefined; }
9602 concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;
9603 return this.lift(new ExpandOperator(project, concurrent, scheduler));
9605 exports.expand = expand;
9606 var ExpandOperator = (function () {
9607 function ExpandOperator(project, concurrent, scheduler) {
9608 this.project = project;
9609 this.concurrent = concurrent;
9610 this.scheduler = scheduler;
9612 ExpandOperator.prototype.call = function (subscriber, source) {
9613 return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));
9615 return ExpandOperator;
9617 exports.ExpandOperator = ExpandOperator;
9619 * We need this JSDoc comment for affecting ESDoc.
9621 * @extends {Ignored}
9623 var ExpandSubscriber = (function (_super) {
9624 __extends(ExpandSubscriber, _super);
9625 function ExpandSubscriber(destination, project, concurrent, scheduler) {
9626 _super.call(this, destination);
9627 this.project = project;
9628 this.concurrent = concurrent;
9629 this.scheduler = scheduler;
9632 this.hasCompleted = false;
9633 if (concurrent < Number.POSITIVE_INFINITY) {
9637 ExpandSubscriber.dispatch = function (arg) {
9638 var subscriber = arg.subscriber, result = arg.result, value = arg.value, index = arg.index;
9639 subscriber.subscribeToProjection(result, value, index);
9641 ExpandSubscriber.prototype._next = function (value) {
9642 var destination = this.destination;
9643 if (destination.closed) {
9647 var index = this.index++;
9648 if (this.active < this.concurrent) {
9649 destination.next(value);
9650 var result = tryCatch_1.tryCatch(this.project)(value, index);
9651 if (result === errorObject_1.errorObject) {
9652 destination.error(errorObject_1.errorObject.e);
9654 else if (!this.scheduler) {
9655 this.subscribeToProjection(result, value, index);
9658 var state = { subscriber: this, result: result, value: value, index: index };
9659 this.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));
9663 this.buffer.push(value);
9666 ExpandSubscriber.prototype.subscribeToProjection = function (result, value, index) {
9668 this.add(subscribeToResult_1.subscribeToResult(this, result, value, index));
9670 ExpandSubscriber.prototype._complete = function () {
9671 this.hasCompleted = true;
9672 if (this.hasCompleted && this.active === 0) {
9673 this.destination.complete();
9676 ExpandSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
9677 this._next(innerValue);
9679 ExpandSubscriber.prototype.notifyComplete = function (innerSub) {
9680 var buffer = this.buffer;
9681 this.remove(innerSub);
9683 if (buffer && buffer.length > 0) {
9684 this._next(buffer.shift());
9686 if (this.hasCompleted && this.active === 0) {
9687 this.destination.complete();
9690 return ExpandSubscriber;
9691 }(OuterSubscriber_1.OuterSubscriber));
9692 exports.ExpandSubscriber = ExpandSubscriber;
9694 },{"../OuterSubscriber":30,"../util/errorObject":161,"../util/subscribeToResult":171,"../util/tryCatch":173}],119:[function(require,module,exports){
9696 var __extends = (this && this.__extends) || function (d, b) {
9697 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
9698 function __() { this.constructor = d; }
9699 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
9701 var Subscriber_1 = require('../Subscriber');
9702 /* tslint:enable:max-line-length */
9704 * Filter items emitted by the source Observable by only emitting those that
9705 * satisfy a specified predicate.
9707 * <span class="informal">Like
9708 * [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),
9709 * it only emits a value from the source if it passes a criterion function.</span>
9711 * <img src="./img/filter.png" width="100%">
9713 * Similar to the well-known `Array.prototype.filter` method, this operator
9714 * takes values from the source Observable, passes them through a `predicate`
9715 * function and only emits those values that yielded `true`.
9717 * @example <caption>Emit only click events whose target was a DIV element</caption>
9718 * var clicks = Rx.Observable.fromEvent(document, 'click');
9719 * var clicksOnDivs = clicks.filter(ev => ev.target.tagName === 'DIV');
9720 * clicksOnDivs.subscribe(x => console.log(x));
9722 * @see {@link distinct}
9723 * @see {@link distinctUntilChanged}
9724 * @see {@link distinctUntilKeyChanged}
9725 * @see {@link ignoreElements}
9726 * @see {@link partition}
9729 * @param {function(value: T, index: number): boolean} predicate A function that
9730 * evaluates each value emitted by the source Observable. If it returns `true`,
9731 * the value is emitted, if `false` the value is not passed to the output
9732 * Observable. The `index` parameter is the number `i` for the i-th source
9733 * emission that has happened since the subscription, starting from the number
9735 * @param {any} [thisArg] An optional argument to determine the value of `this`
9736 * in the `predicate` function.
9737 * @return {Observable} An Observable of values from the source that were
9738 * allowed by the `predicate` function.
9742 function filter(predicate, thisArg) {
9743 return this.lift(new FilterOperator(predicate, thisArg));
9745 exports.filter = filter;
9746 var FilterOperator = (function () {
9747 function FilterOperator(predicate, thisArg) {
9748 this.predicate = predicate;
9749 this.thisArg = thisArg;
9751 FilterOperator.prototype.call = function (subscriber, source) {
9752 return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));
9754 return FilterOperator;
9757 * We need this JSDoc comment for affecting ESDoc.
9759 * @extends {Ignored}
9761 var FilterSubscriber = (function (_super) {
9762 __extends(FilterSubscriber, _super);
9763 function FilterSubscriber(destination, predicate, thisArg) {
9764 _super.call(this, destination);
9765 this.predicate = predicate;
9766 this.thisArg = thisArg;
9768 this.predicate = predicate;
9770 // the try catch block below is left specifically for
9771 // optimization and perf reasons. a tryCatcher is not necessary here.
9772 FilterSubscriber.prototype._next = function (value) {
9775 result = this.predicate.call(this.thisArg, value, this.count++);
9778 this.destination.error(err);
9782 this.destination.next(value);
9785 return FilterSubscriber;
9786 }(Subscriber_1.Subscriber));
9788 },{"../Subscriber":35}],120:[function(require,module,exports){
9790 var __extends = (this && this.__extends) || function (d, b) {
9791 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
9792 function __() { this.constructor = d; }
9793 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
9795 var Subscriber_1 = require('../Subscriber');
9796 var Subscription_1 = require('../Subscription');
9798 * Returns an Observable that mirrors the source Observable, but will call a specified function when
9799 * the source terminates on complete or error.
9800 * @param {function} callback Function to be called when source terminates.
9801 * @return {Observable} An Observable that mirrors the source, but will call the specified function on termination.
9805 function _finally(callback) {
9806 return this.lift(new FinallyOperator(callback));
9808 exports._finally = _finally;
9809 var FinallyOperator = (function () {
9810 function FinallyOperator(callback) {
9811 this.callback = callback;
9813 FinallyOperator.prototype.call = function (subscriber, source) {
9814 return source.subscribe(new FinallySubscriber(subscriber, this.callback));
9816 return FinallyOperator;
9819 * We need this JSDoc comment for affecting ESDoc.
9821 * @extends {Ignored}
9823 var FinallySubscriber = (function (_super) {
9824 __extends(FinallySubscriber, _super);
9825 function FinallySubscriber(destination, callback) {
9826 _super.call(this, destination);
9827 this.add(new Subscription_1.Subscription(callback));
9829 return FinallySubscriber;
9830 }(Subscriber_1.Subscriber));
9832 },{"../Subscriber":35,"../Subscription":36}],121:[function(require,module,exports){
9834 var __extends = (this && this.__extends) || function (d, b) {
9835 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
9836 function __() { this.constructor = d; }
9837 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
9839 var Subscriber_1 = require('../Subscriber');
9840 var EmptyError_1 = require('../util/EmptyError');
9842 * Emits only the first value (or the first value that meets some condition)
9843 * emitted by the source Observable.
9845 * <span class="informal">Emits only the first value. Or emits only the first
9846 * value that passes some test.</span>
9848 * <img src="./img/first.png" width="100%">
9850 * If called with no arguments, `first` emits the first value of the source
9851 * Observable, then completes. If called with a `predicate` function, `first`
9852 * emits the first value of the source that matches the specified condition. It
9853 * may also take a `resultSelector` function to produce the output value from
9854 * the input value, and a `defaultValue` to emit in case the source completes
9855 * before it is able to emit a valid value. Throws an error if `defaultValue`
9856 * was not provided and a matching element is not found.
9858 * @example <caption>Emit only the first click that happens on the DOM</caption>
9859 * var clicks = Rx.Observable.fromEvent(document, 'click');
9860 * var result = clicks.first();
9861 * result.subscribe(x => console.log(x));
9863 * @example <caption>Emits the first click that happens on a DIV</caption>
9864 * var clicks = Rx.Observable.fromEvent(document, 'click');
9865 * var result = clicks.first(ev => ev.target.tagName === 'DIV');
9866 * result.subscribe(x => console.log(x));
9868 * @see {@link filter}
9872 * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`
9873 * callback if the Observable completes before any `next` notification was sent.
9875 * @param {function(value: T, index: number, source: Observable<T>): boolean} [predicate]
9876 * An optional function called with each item to test for condition matching.
9877 * @param {function(value: T, index: number): R} [resultSelector] A function to
9878 * produce the value on the output Observable based on the values
9879 * and the indices of the source Observable. The arguments passed to this
9881 * - `value`: the value that was emitted on the source.
9882 * - `index`: the "index" of the value from the source.
9883 * @param {R} [defaultValue] The default value emitted in case no valid value
9884 * was found on the source.
9885 * @return {Observable<T|R>} An Observable of the first item that matches the
9890 function first(predicate, resultSelector, defaultValue) {
9891 return this.lift(new FirstOperator(predicate, resultSelector, defaultValue, this));
9893 exports.first = first;
9894 var FirstOperator = (function () {
9895 function FirstOperator(predicate, resultSelector, defaultValue, source) {
9896 this.predicate = predicate;
9897 this.resultSelector = resultSelector;
9898 this.defaultValue = defaultValue;
9899 this.source = source;
9901 FirstOperator.prototype.call = function (observer, source) {
9902 return source.subscribe(new FirstSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source));
9904 return FirstOperator;
9907 * We need this JSDoc comment for affecting ESDoc.
9909 * @extends {Ignored}
9911 var FirstSubscriber = (function (_super) {
9912 __extends(FirstSubscriber, _super);
9913 function FirstSubscriber(destination, predicate, resultSelector, defaultValue, source) {
9914 _super.call(this, destination);
9915 this.predicate = predicate;
9916 this.resultSelector = resultSelector;
9917 this.defaultValue = defaultValue;
9918 this.source = source;
9920 this.hasCompleted = false;
9921 this._emitted = false;
9923 FirstSubscriber.prototype._next = function (value) {
9924 var index = this.index++;
9925 if (this.predicate) {
9926 this._tryPredicate(value, index);
9929 this._emit(value, index);
9932 FirstSubscriber.prototype._tryPredicate = function (value, index) {
9935 result = this.predicate(value, index, this.source);
9938 this.destination.error(err);
9942 this._emit(value, index);
9945 FirstSubscriber.prototype._emit = function (value, index) {
9946 if (this.resultSelector) {
9947 this._tryResultSelector(value, index);
9950 this._emitFinal(value);
9952 FirstSubscriber.prototype._tryResultSelector = function (value, index) {
9955 result = this.resultSelector(value, index);
9958 this.destination.error(err);
9961 this._emitFinal(result);
9963 FirstSubscriber.prototype._emitFinal = function (value) {
9964 var destination = this.destination;
9965 if (!this._emitted) {
9966 this._emitted = true;
9967 destination.next(value);
9968 destination.complete();
9969 this.hasCompleted = true;
9972 FirstSubscriber.prototype._complete = function () {
9973 var destination = this.destination;
9974 if (!this.hasCompleted && typeof this.defaultValue !== 'undefined') {
9975 destination.next(this.defaultValue);
9976 destination.complete();
9978 else if (!this.hasCompleted) {
9979 destination.error(new EmptyError_1.EmptyError);
9982 return FirstSubscriber;
9983 }(Subscriber_1.Subscriber));
9985 },{"../Subscriber":35,"../util/EmptyError":157}],122:[function(require,module,exports){
9987 var __extends = (this && this.__extends) || function (d, b) {
9988 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
9989 function __() { this.constructor = d; }
9990 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
9992 var Subscriber_1 = require('../Subscriber');
9993 var EmptyError_1 = require('../util/EmptyError');
9994 /* tslint:enable:max-line-length */
9996 * Returns an Observable that emits only the last item emitted by the source Observable.
9997 * It optionally takes a predicate function as a parameter, in which case, rather than emitting
9998 * the last item from the source Observable, the resulting Observable will emit the last item
9999 * from the source Observable that satisfies the predicate.
10001 * <img src="./img/last.png" width="100%">
10003 * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`
10004 * callback if the Observable completes before any `next` notification was sent.
10005 * @param {function} predicate - The condition any source emitted item has to satisfy.
10006 * @return {Observable} An Observable that emits only the last item satisfying the given condition
10007 * from the source, or an NoSuchElementException if no such items are emitted.
10008 * @throws - Throws if no items that match the predicate are emitted by the source Observable.
10010 * @owner Observable
10012 function last(predicate, resultSelector, defaultValue) {
10013 return this.lift(new LastOperator(predicate, resultSelector, defaultValue, this));
10015 exports.last = last;
10016 var LastOperator = (function () {
10017 function LastOperator(predicate, resultSelector, defaultValue, source) {
10018 this.predicate = predicate;
10019 this.resultSelector = resultSelector;
10020 this.defaultValue = defaultValue;
10021 this.source = source;
10023 LastOperator.prototype.call = function (observer, source) {
10024 return source.subscribe(new LastSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source));
10026 return LastOperator;
10029 * We need this JSDoc comment for affecting ESDoc.
10031 * @extends {Ignored}
10033 var LastSubscriber = (function (_super) {
10034 __extends(LastSubscriber, _super);
10035 function LastSubscriber(destination, predicate, resultSelector, defaultValue, source) {
10036 _super.call(this, destination);
10037 this.predicate = predicate;
10038 this.resultSelector = resultSelector;
10039 this.defaultValue = defaultValue;
10040 this.source = source;
10041 this.hasValue = false;
10043 if (typeof defaultValue !== 'undefined') {
10044 this.lastValue = defaultValue;
10045 this.hasValue = true;
10048 LastSubscriber.prototype._next = function (value) {
10049 var index = this.index++;
10050 if (this.predicate) {
10051 this._tryPredicate(value, index);
10054 if (this.resultSelector) {
10055 this._tryResultSelector(value, index);
10058 this.lastValue = value;
10059 this.hasValue = true;
10062 LastSubscriber.prototype._tryPredicate = function (value, index) {
10065 result = this.predicate(value, index, this.source);
10068 this.destination.error(err);
10072 if (this.resultSelector) {
10073 this._tryResultSelector(value, index);
10076 this.lastValue = value;
10077 this.hasValue = true;
10080 LastSubscriber.prototype._tryResultSelector = function (value, index) {
10083 result = this.resultSelector(value, index);
10086 this.destination.error(err);
10089 this.lastValue = result;
10090 this.hasValue = true;
10092 LastSubscriber.prototype._complete = function () {
10093 var destination = this.destination;
10094 if (this.hasValue) {
10095 destination.next(this.lastValue);
10096 destination.complete();
10099 destination.error(new EmptyError_1.EmptyError);
10102 return LastSubscriber;
10103 }(Subscriber_1.Subscriber));
10105 },{"../Subscriber":35,"../util/EmptyError":157}],123:[function(require,module,exports){
10107 var __extends = (this && this.__extends) || function (d, b) {
10108 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
10109 function __() { this.constructor = d; }
10110 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10112 var Subscriber_1 = require('../Subscriber');
10114 * Applies a given `project` function to each value emitted by the source
10115 * Observable, and emits the resulting values as an Observable.
10117 * <span class="informal">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),
10118 * it passes each source value through a transformation function to get
10119 * corresponding output values.</span>
10121 * <img src="./img/map.png" width="100%">
10123 * Similar to the well known `Array.prototype.map` function, this operator
10124 * applies a projection to each value and emits that projection in the output
10127 * @example <caption>Map every every click to the clientX position of that click</caption>
10128 * var clicks = Rx.Observable.fromEvent(document, 'click');
10129 * var positions = clicks.map(ev => ev.clientX);
10130 * positions.subscribe(x => console.log(x));
10132 * @see {@link mapTo}
10133 * @see {@link pluck}
10135 * @param {function(value: T, index: number): R} project The function to apply
10136 * to each `value` emitted by the source Observable. The `index` parameter is
10137 * the number `i` for the i-th emission that has happened since the
10138 * subscription, starting from the number `0`.
10139 * @param {any} [thisArg] An optional argument to define what `this` is in the
10140 * `project` function.
10141 * @return {Observable<R>} An Observable that emits the values from the source
10142 * Observable transformed by the given `project` function.
10144 * @owner Observable
10146 function map(project, thisArg) {
10147 if (typeof project !== 'function') {
10148 throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
10150 return this.lift(new MapOperator(project, thisArg));
10153 var MapOperator = (function () {
10154 function MapOperator(project, thisArg) {
10155 this.project = project;
10156 this.thisArg = thisArg;
10158 MapOperator.prototype.call = function (subscriber, source) {
10159 return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
10161 return MapOperator;
10163 exports.MapOperator = MapOperator;
10165 * We need this JSDoc comment for affecting ESDoc.
10167 * @extends {Ignored}
10169 var MapSubscriber = (function (_super) {
10170 __extends(MapSubscriber, _super);
10171 function MapSubscriber(destination, project, thisArg) {
10172 _super.call(this, destination);
10173 this.project = project;
10175 this.thisArg = thisArg || this;
10177 // NOTE: This looks unoptimized, but it's actually purposefully NOT
10178 // using try/catch optimizations.
10179 MapSubscriber.prototype._next = function (value) {
10182 result = this.project.call(this.thisArg, value, this.count++);
10185 this.destination.error(err);
10188 this.destination.next(result);
10190 return MapSubscriber;
10191 }(Subscriber_1.Subscriber));
10193 },{"../Subscriber":35}],124:[function(require,module,exports){
10195 var Observable_1 = require('../Observable');
10196 var ArrayObservable_1 = require('../observable/ArrayObservable');
10197 var mergeAll_1 = require('./mergeAll');
10198 var isScheduler_1 = require('../util/isScheduler');
10199 /* tslint:enable:max-line-length */
10201 * Creates an output Observable which concurrently emits all values from every
10202 * given input Observable.
10204 * <span class="informal">Flattens multiple Observables together by blending
10205 * their values into one Observable.</span>
10207 * <img src="./img/merge.png" width="100%">
10209 * `merge` subscribes to each given input Observable (either the source or an
10210 * Observable given as argument), and simply forwards (without doing any
10211 * transformation) all the values from all the input Observables to the output
10212 * Observable. The output Observable only completes once all input Observables
10213 * have completed. Any error delivered by an input Observable will be immediately
10214 * emitted on the output Observable.
10216 * @example <caption>Merge together two Observables: 1s interval and clicks</caption>
10217 * var clicks = Rx.Observable.fromEvent(document, 'click');
10218 * var timer = Rx.Observable.interval(1000);
10219 * var clicksOrTimer = clicks.merge(timer);
10220 * clicksOrTimer.subscribe(x => console.log(x));
10222 * @example <caption>Merge together 3 Observables, but only 2 run concurrently</caption>
10223 * var timer1 = Rx.Observable.interval(1000).take(10);
10224 * var timer2 = Rx.Observable.interval(2000).take(6);
10225 * var timer3 = Rx.Observable.interval(500).take(10);
10226 * var concurrent = 2; // the argument
10227 * var merged = timer1.merge(timer2, timer3, concurrent);
10228 * merged.subscribe(x => console.log(x));
10230 * @see {@link mergeAll}
10231 * @see {@link mergeMap}
10232 * @see {@link mergeMapTo}
10233 * @see {@link mergeScan}
10235 * @param {ObservableInput} other An input Observable to merge with the source
10236 * Observable. More than one input Observables may be given as argument.
10237 * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
10238 * Observables being subscribed to concurrently.
10239 * @param {Scheduler} [scheduler=null] The IScheduler to use for managing
10240 * concurrency of input Observables.
10241 * @return {Observable} An Observable that emits items that are the result of
10242 * every input Observable.
10244 * @owner Observable
10247 var observables = [];
10248 for (var _i = 0; _i < arguments.length; _i++) {
10249 observables[_i - 0] = arguments[_i];
10251 return this.lift.call(mergeStatic.apply(void 0, [this].concat(observables)));
10253 exports.merge = merge;
10254 /* tslint:enable:max-line-length */
10256 * Creates an output Observable which concurrently emits all values from every
10257 * given input Observable.
10259 * <span class="informal">Flattens multiple Observables together by blending
10260 * their values into one Observable.</span>
10262 * <img src="./img/merge.png" width="100%">
10264 * `merge` subscribes to each given input Observable (as arguments), and simply
10265 * forwards (without doing any transformation) all the values from all the input
10266 * Observables to the output Observable. The output Observable only completes
10267 * once all input Observables have completed. Any error delivered by an input
10268 * Observable will be immediately emitted on the output Observable.
10270 * @example <caption>Merge together two Observables: 1s interval and clicks</caption>
10271 * var clicks = Rx.Observable.fromEvent(document, 'click');
10272 * var timer = Rx.Observable.interval(1000);
10273 * var clicksOrTimer = Rx.Observable.merge(clicks, timer);
10274 * clicksOrTimer.subscribe(x => console.log(x));
10276 * // Results in the following:
10277 * // timer will emit ascending values, one every second(1000ms) to console
10278 * // clicks logs MouseEvents to console everytime the "document" is clicked
10279 * // Since the two streams are merged you see these happening
10280 * // as they occur.
10282 * @example <caption>Merge together 3 Observables, but only 2 run concurrently</caption>
10283 * var timer1 = Rx.Observable.interval(1000).take(10);
10284 * var timer2 = Rx.Observable.interval(2000).take(6);
10285 * var timer3 = Rx.Observable.interval(500).take(10);
10286 * var concurrent = 2; // the argument
10287 * var merged = Rx.Observable.merge(timer1, timer2, timer3, concurrent);
10288 * merged.subscribe(x => console.log(x));
10290 * // Results in the following:
10291 * // - First timer1 and timer2 will run concurrently
10292 * // - timer1 will emit a value every 1000ms for 10 iterations
10293 * // - timer2 will emit a value every 2000ms for 6 iterations
10294 * // - after timer1 hits it's max iteration, timer2 will
10295 * // continue, and timer3 will start to run concurrently with timer2
10296 * // - when timer2 hits it's max iteration it terminates, and
10297 * // timer3 will continue to emit a value every 500ms until it is complete
10299 * @see {@link mergeAll}
10300 * @see {@link mergeMap}
10301 * @see {@link mergeMapTo}
10302 * @see {@link mergeScan}
10304 * @param {...ObservableInput} observables Input Observables to merge together.
10305 * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
10306 * Observables being subscribed to concurrently.
10307 * @param {Scheduler} [scheduler=null] The IScheduler to use for managing
10308 * concurrency of input Observables.
10309 * @return {Observable} an Observable that emits items that are the result of
10310 * every input Observable.
10313 * @owner Observable
10315 function mergeStatic() {
10316 var observables = [];
10317 for (var _i = 0; _i < arguments.length; _i++) {
10318 observables[_i - 0] = arguments[_i];
10320 var concurrent = Number.POSITIVE_INFINITY;
10321 var scheduler = null;
10322 var last = observables[observables.length - 1];
10323 if (isScheduler_1.isScheduler(last)) {
10324 scheduler = observables.pop();
10325 if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
10326 concurrent = observables.pop();
10329 else if (typeof last === 'number') {
10330 concurrent = observables.pop();
10332 if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable_1.Observable) {
10333 return observables[0];
10335 return new ArrayObservable_1.ArrayObservable(observables, scheduler).lift(new mergeAll_1.MergeAllOperator(concurrent));
10337 exports.mergeStatic = mergeStatic;
10339 },{"../Observable":28,"../observable/ArrayObservable":85,"../util/isScheduler":169,"./mergeAll":125}],125:[function(require,module,exports){
10341 var __extends = (this && this.__extends) || function (d, b) {
10342 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
10343 function __() { this.constructor = d; }
10344 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10346 var OuterSubscriber_1 = require('../OuterSubscriber');
10347 var subscribeToResult_1 = require('../util/subscribeToResult');
10349 * Converts a higher-order Observable into a first-order Observable which
10350 * concurrently delivers all values that are emitted on the inner Observables.
10352 * <span class="informal">Flattens an Observable-of-Observables.</span>
10354 * <img src="./img/mergeAll.png" width="100%">
10356 * `mergeAll` subscribes to an Observable that emits Observables, also known as
10357 * a higher-order Observable. Each time it observes one of these emitted inner
10358 * Observables, it subscribes to that and delivers all the values from the
10359 * inner Observable on the output Observable. The output Observable only
10360 * completes once all inner Observables have completed. Any error delivered by
10361 * a inner Observable will be immediately emitted on the output Observable.
10363 * @example <caption>Spawn a new interval Observable for each click event, and blend their outputs as one Observable</caption>
10364 * var clicks = Rx.Observable.fromEvent(document, 'click');
10365 * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000));
10366 * var firstOrder = higherOrder.mergeAll();
10367 * firstOrder.subscribe(x => console.log(x));
10369 * @example <caption>Count from 0 to 9 every second for each click, but only allow 2 concurrent timers</caption>
10370 * var clicks = Rx.Observable.fromEvent(document, 'click');
10371 * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000).take(10));
10372 * var firstOrder = higherOrder.mergeAll(2);
10373 * firstOrder.subscribe(x => console.log(x));
10375 * @see {@link combineAll}
10376 * @see {@link concatAll}
10377 * @see {@link exhaust}
10378 * @see {@link merge}
10379 * @see {@link mergeMap}
10380 * @see {@link mergeMapTo}
10381 * @see {@link mergeScan}
10382 * @see {@link switch}
10383 * @see {@link zipAll}
10385 * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of inner
10386 * Observables being subscribed to concurrently.
10387 * @return {Observable} An Observable that emits values coming from all the
10388 * inner Observables emitted by the source Observable.
10390 * @owner Observable
10392 function mergeAll(concurrent) {
10393 if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
10394 return this.lift(new MergeAllOperator(concurrent));
10396 exports.mergeAll = mergeAll;
10397 var MergeAllOperator = (function () {
10398 function MergeAllOperator(concurrent) {
10399 this.concurrent = concurrent;
10401 MergeAllOperator.prototype.call = function (observer, source) {
10402 return source.subscribe(new MergeAllSubscriber(observer, this.concurrent));
10404 return MergeAllOperator;
10406 exports.MergeAllOperator = MergeAllOperator;
10408 * We need this JSDoc comment for affecting ESDoc.
10410 * @extends {Ignored}
10412 var MergeAllSubscriber = (function (_super) {
10413 __extends(MergeAllSubscriber, _super);
10414 function MergeAllSubscriber(destination, concurrent) {
10415 _super.call(this, destination);
10416 this.concurrent = concurrent;
10417 this.hasCompleted = false;
10421 MergeAllSubscriber.prototype._next = function (observable) {
10422 if (this.active < this.concurrent) {
10424 this.add(subscribeToResult_1.subscribeToResult(this, observable));
10427 this.buffer.push(observable);
10430 MergeAllSubscriber.prototype._complete = function () {
10431 this.hasCompleted = true;
10432 if (this.active === 0 && this.buffer.length === 0) {
10433 this.destination.complete();
10436 MergeAllSubscriber.prototype.notifyComplete = function (innerSub) {
10437 var buffer = this.buffer;
10438 this.remove(innerSub);
10440 if (buffer.length > 0) {
10441 this._next(buffer.shift());
10443 else if (this.active === 0 && this.hasCompleted) {
10444 this.destination.complete();
10447 return MergeAllSubscriber;
10448 }(OuterSubscriber_1.OuterSubscriber));
10449 exports.MergeAllSubscriber = MergeAllSubscriber;
10451 },{"../OuterSubscriber":30,"../util/subscribeToResult":171}],126:[function(require,module,exports){
10453 var __extends = (this && this.__extends) || function (d, b) {
10454 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
10455 function __() { this.constructor = d; }
10456 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10458 var subscribeToResult_1 = require('../util/subscribeToResult');
10459 var OuterSubscriber_1 = require('../OuterSubscriber');
10460 /* tslint:enable:max-line-length */
10462 * Projects each source value to an Observable which is merged in the output
10465 * <span class="informal">Maps each value to an Observable, then flattens all of
10466 * these inner Observables using {@link mergeAll}.</span>
10468 * <img src="./img/mergeMap.png" width="100%">
10470 * Returns an Observable that emits items based on applying a function that you
10471 * supply to each item emitted by the source Observable, where that function
10472 * returns an Observable, and then merging those resulting Observables and
10473 * emitting the results of this merger.
10475 * @example <caption>Map and flatten each letter to an Observable ticking every 1 second</caption>
10476 * var letters = Rx.Observable.of('a', 'b', 'c');
10477 * var result = letters.mergeMap(x =>
10478 * Rx.Observable.interval(1000).map(i => x+i)
10480 * result.subscribe(x => console.log(x));
10482 * // Results in the following:
10489 * // continues to list a,b,c with respective ascending integers
10491 * @see {@link concatMap}
10492 * @see {@link exhaustMap}
10493 * @see {@link merge}
10494 * @see {@link mergeAll}
10495 * @see {@link mergeMapTo}
10496 * @see {@link mergeScan}
10497 * @see {@link switchMap}
10499 * @param {function(value: T, ?index: number): ObservableInput} project A function
10500 * that, when applied to an item emitted by the source Observable, returns an
10502 * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
10503 * A function to produce the value on the output Observable based on the values
10504 * and the indices of the source (outer) emission and the inner Observable
10505 * emission. The arguments passed to this function are:
10506 * - `outerValue`: the value that came from the source
10507 * - `innerValue`: the value that came from the projected Observable
10508 * - `outerIndex`: the "index" of the value that came from the source
10509 * - `innerIndex`: the "index" of the value from the projected Observable
10510 * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
10511 * Observables being subscribed to concurrently.
10512 * @return {Observable} An Observable that emits the result of applying the
10513 * projection function (and the optional `resultSelector`) to each item emitted
10514 * by the source Observable and merging the results of the Observables obtained
10515 * from this transformation.
10517 * @owner Observable
10519 function mergeMap(project, resultSelector, concurrent) {
10520 if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
10521 if (typeof resultSelector === 'number') {
10522 concurrent = resultSelector;
10523 resultSelector = null;
10525 return this.lift(new MergeMapOperator(project, resultSelector, concurrent));
10527 exports.mergeMap = mergeMap;
10528 var MergeMapOperator = (function () {
10529 function MergeMapOperator(project, resultSelector, concurrent) {
10530 if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
10531 this.project = project;
10532 this.resultSelector = resultSelector;
10533 this.concurrent = concurrent;
10535 MergeMapOperator.prototype.call = function (observer, source) {
10536 return source.subscribe(new MergeMapSubscriber(observer, this.project, this.resultSelector, this.concurrent));
10538 return MergeMapOperator;
10540 exports.MergeMapOperator = MergeMapOperator;
10542 * We need this JSDoc comment for affecting ESDoc.
10544 * @extends {Ignored}
10546 var MergeMapSubscriber = (function (_super) {
10547 __extends(MergeMapSubscriber, _super);
10548 function MergeMapSubscriber(destination, project, resultSelector, concurrent) {
10549 if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
10550 _super.call(this, destination);
10551 this.project = project;
10552 this.resultSelector = resultSelector;
10553 this.concurrent = concurrent;
10554 this.hasCompleted = false;
10559 MergeMapSubscriber.prototype._next = function (value) {
10560 if (this.active < this.concurrent) {
10561 this._tryNext(value);
10564 this.buffer.push(value);
10567 MergeMapSubscriber.prototype._tryNext = function (value) {
10569 var index = this.index++;
10571 result = this.project(value, index);
10574 this.destination.error(err);
10578 this._innerSub(result, value, index);
10580 MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {
10581 this.add(subscribeToResult_1.subscribeToResult(this, ish, value, index));
10583 MergeMapSubscriber.prototype._complete = function () {
10584 this.hasCompleted = true;
10585 if (this.active === 0 && this.buffer.length === 0) {
10586 this.destination.complete();
10589 MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
10590 if (this.resultSelector) {
10591 this._notifyResultSelector(outerValue, innerValue, outerIndex, innerIndex);
10594 this.destination.next(innerValue);
10597 MergeMapSubscriber.prototype._notifyResultSelector = function (outerValue, innerValue, outerIndex, innerIndex) {
10600 result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);
10603 this.destination.error(err);
10606 this.destination.next(result);
10608 MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {
10609 var buffer = this.buffer;
10610 this.remove(innerSub);
10612 if (buffer.length > 0) {
10613 this._next(buffer.shift());
10615 else if (this.active === 0 && this.hasCompleted) {
10616 this.destination.complete();
10619 return MergeMapSubscriber;
10620 }(OuterSubscriber_1.OuterSubscriber));
10621 exports.MergeMapSubscriber = MergeMapSubscriber;
10623 },{"../OuterSubscriber":30,"../util/subscribeToResult":171}],127:[function(require,module,exports){
10625 var ConnectableObservable_1 = require('../observable/ConnectableObservable');
10626 /* tslint:enable:max-line-length */
10628 * Returns an Observable that emits the results of invoking a specified selector on items
10629 * emitted by a ConnectableObservable that shares a single subscription to the underlying stream.
10631 * <img src="./img/multicast.png" width="100%">
10633 * @param {Function|Subject} subjectOrSubjectFactory - Factory function to create an intermediate subject through
10634 * which the source sequence's elements will be multicast to the selector function
10635 * or Subject to push source elements into.
10636 * @param {Function} [selector] - Optional selector function that can use the multicasted source stream
10637 * as many times as needed, without causing multiple subscriptions to the source stream.
10638 * Subscribers to the given source will receive all notifications of the source from the
10639 * time of the subscription forward.
10640 * @return {Observable} An Observable that emits the results of invoking the selector
10641 * on the items emitted by a `ConnectableObservable` that shares a single subscription to
10642 * the underlying stream.
10643 * @method multicast
10644 * @owner Observable
10646 function multicast(subjectOrSubjectFactory, selector) {
10647 var subjectFactory;
10648 if (typeof subjectOrSubjectFactory === 'function') {
10649 subjectFactory = subjectOrSubjectFactory;
10652 subjectFactory = function subjectFactory() {
10653 return subjectOrSubjectFactory;
10656 if (typeof selector === 'function') {
10657 return this.lift(new MulticastOperator(subjectFactory, selector));
10659 var connectable = Object.create(this, ConnectableObservable_1.connectableObservableDescriptor);
10660 connectable.source = this;
10661 connectable.subjectFactory = subjectFactory;
10662 return connectable;
10664 exports.multicast = multicast;
10665 var MulticastOperator = (function () {
10666 function MulticastOperator(subjectFactory, selector) {
10667 this.subjectFactory = subjectFactory;
10668 this.selector = selector;
10670 MulticastOperator.prototype.call = function (subscriber, source) {
10671 var selector = this.selector;
10672 var subject = this.subjectFactory();
10673 var subscription = selector(subject).subscribe(subscriber);
10674 subscription.add(source.subscribe(subject));
10675 return subscription;
10677 return MulticastOperator;
10679 exports.MulticastOperator = MulticastOperator;
10681 },{"../observable/ConnectableObservable":86}],128:[function(require,module,exports){
10683 var __extends = (this && this.__extends) || function (d, b) {
10684 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
10685 function __() { this.constructor = d; }
10686 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10688 var Subscriber_1 = require('../Subscriber');
10689 var Notification_1 = require('../Notification');
10691 * @see {@link Notification}
10695 * @return {Observable<R>|WebSocketSubject<T>|Observable<T>}
10696 * @method observeOn
10697 * @owner Observable
10699 function observeOn(scheduler, delay) {
10700 if (delay === void 0) { delay = 0; }
10701 return this.lift(new ObserveOnOperator(scheduler, delay));
10703 exports.observeOn = observeOn;
10704 var ObserveOnOperator = (function () {
10705 function ObserveOnOperator(scheduler, delay) {
10706 if (delay === void 0) { delay = 0; }
10707 this.scheduler = scheduler;
10708 this.delay = delay;
10710 ObserveOnOperator.prototype.call = function (subscriber, source) {
10711 return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
10713 return ObserveOnOperator;
10715 exports.ObserveOnOperator = ObserveOnOperator;
10717 * We need this JSDoc comment for affecting ESDoc.
10719 * @extends {Ignored}
10721 var ObserveOnSubscriber = (function (_super) {
10722 __extends(ObserveOnSubscriber, _super);
10723 function ObserveOnSubscriber(destination, scheduler, delay) {
10724 if (delay === void 0) { delay = 0; }
10725 _super.call(this, destination);
10726 this.scheduler = scheduler;
10727 this.delay = delay;
10729 ObserveOnSubscriber.dispatch = function (arg) {
10730 var notification = arg.notification, destination = arg.destination;
10731 notification.observe(destination);
10732 this.unsubscribe();
10734 ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {
10735 this.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
10737 ObserveOnSubscriber.prototype._next = function (value) {
10738 this.scheduleMessage(Notification_1.Notification.createNext(value));
10740 ObserveOnSubscriber.prototype._error = function (err) {
10741 this.scheduleMessage(Notification_1.Notification.createError(err));
10743 ObserveOnSubscriber.prototype._complete = function () {
10744 this.scheduleMessage(Notification_1.Notification.createComplete());
10746 return ObserveOnSubscriber;
10747 }(Subscriber_1.Subscriber));
10748 exports.ObserveOnSubscriber = ObserveOnSubscriber;
10749 var ObserveOnMessage = (function () {
10750 function ObserveOnMessage(notification, destination) {
10751 this.notification = notification;
10752 this.destination = destination;
10754 return ObserveOnMessage;
10756 exports.ObserveOnMessage = ObserveOnMessage;
10758 },{"../Notification":27,"../Subscriber":35}],129:[function(require,module,exports){
10760 var __extends = (this && this.__extends) || function (d, b) {
10761 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
10762 function __() { this.constructor = d; }
10763 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10765 var Subscriber_1 = require('../Subscriber');
10767 * Groups pairs of consecutive emissions together and emits them as an array of
10770 * <span class="informal">Puts the current value and previous value together as
10771 * an array, and emits that.</span>
10773 * <img src="./img/pairwise.png" width="100%">
10775 * The Nth emission from the source Observable will cause the output Observable
10776 * to emit an array [(N-1)th, Nth] of the previous and the current value, as a
10777 * pair. For this reason, `pairwise` emits on the second and subsequent
10778 * emissions from the source Observable, but not on the first emission, because
10779 * there is no previous value in that case.
10781 * @example <caption>On every click (starting from the second), emit the relative distance to the previous click</caption>
10782 * var clicks = Rx.Observable.fromEvent(document, 'click');
10783 * var pairs = clicks.pairwise();
10784 * var distance = pairs.map(pair => {
10785 * var x0 = pair[0].clientX;
10786 * var y0 = pair[0].clientY;
10787 * var x1 = pair[1].clientX;
10788 * var y1 = pair[1].clientY;
10789 * return Math.sqrt(Math.pow(x0 - x1, 2) + Math.pow(y0 - y1, 2));
10791 * distance.subscribe(x => console.log(x));
10793 * @see {@link buffer}
10794 * @see {@link bufferCount}
10796 * @return {Observable<Array<T>>} An Observable of pairs (as arrays) of
10797 * consecutive values from the source Observable.
10799 * @owner Observable
10801 function pairwise() {
10802 return this.lift(new PairwiseOperator());
10804 exports.pairwise = pairwise;
10805 var PairwiseOperator = (function () {
10806 function PairwiseOperator() {
10808 PairwiseOperator.prototype.call = function (subscriber, source) {
10809 return source.subscribe(new PairwiseSubscriber(subscriber));
10811 return PairwiseOperator;
10814 * We need this JSDoc comment for affecting ESDoc.
10816 * @extends {Ignored}
10818 var PairwiseSubscriber = (function (_super) {
10819 __extends(PairwiseSubscriber, _super);
10820 function PairwiseSubscriber(destination) {
10821 _super.call(this, destination);
10822 this.hasPrev = false;
10824 PairwiseSubscriber.prototype._next = function (value) {
10825 if (this.hasPrev) {
10826 this.destination.next([this.prev, value]);
10829 this.hasPrev = true;
10833 return PairwiseSubscriber;
10834 }(Subscriber_1.Subscriber));
10836 },{"../Subscriber":35}],130:[function(require,module,exports){
10838 var map_1 = require('./map');
10840 * Maps each source value (an object) to its specified nested property.
10842 * <span class="informal">Like {@link map}, but meant only for picking one of
10843 * the nested properties of every emitted object.</span>
10845 * <img src="./img/pluck.png" width="100%">
10847 * Given a list of strings describing a path to an object property, retrieves
10848 * the value of a specified nested property from all values in the source
10849 * Observable. If a property can't be resolved, it will return `undefined` for
10852 * @example <caption>Map every every click to the tagName of the clicked target element</caption>
10853 * var clicks = Rx.Observable.fromEvent(document, 'click');
10854 * var tagNames = clicks.pluck('target', 'tagName');
10855 * tagNames.subscribe(x => console.log(x));
10859 * @param {...string} properties The nested properties to pluck from each source
10860 * value (an object).
10861 * @return {Observable} A new Observable of property values from the source values.
10863 * @owner Observable
10866 var properties = [];
10867 for (var _i = 0; _i < arguments.length; _i++) {
10868 properties[_i - 0] = arguments[_i];
10870 var length = properties.length;
10871 if (length === 0) {
10872 throw new Error('list of properties cannot be empty.');
10874 return map_1.map.call(this, plucker(properties, length));
10876 exports.pluck = pluck;
10877 function plucker(props, length) {
10878 var mapper = function (x) {
10879 var currentProp = x;
10880 for (var i = 0; i < length; i++) {
10881 var p = currentProp[props[i]];
10882 if (typeof p !== 'undefined') {
10889 return currentProp;
10894 },{"./map":123}],131:[function(require,module,exports){
10896 var Subject_1 = require('../Subject');
10897 var multicast_1 = require('./multicast');
10898 /* tslint:enable:max-line-length */
10900 * Returns a ConnectableObservable, which is a variety of Observable that waits until its connect method is called
10901 * before it begins emitting items to those Observers that have subscribed to it.
10903 * <img src="./img/publish.png" width="100%">
10905 * @param {Function} [selector] - Optional selector function which can use the multicasted source sequence as many times
10906 * as needed, without causing multiple subscriptions to the source sequence.
10907 * Subscribers to the given source will receive all notifications of the source from the time of the subscription on.
10908 * @return A ConnectableObservable that upon connection causes the source Observable to emit items to its Observers.
10910 * @owner Observable
10912 function publish(selector) {
10913 return selector ? multicast_1.multicast.call(this, function () { return new Subject_1.Subject(); }, selector) :
10914 multicast_1.multicast.call(this, new Subject_1.Subject());
10916 exports.publish = publish;
10918 },{"../Subject":33,"./multicast":127}],132:[function(require,module,exports){
10920 var ReplaySubject_1 = require('../ReplaySubject');
10921 var multicast_1 = require('./multicast');
10923 * @param bufferSize
10924 * @param windowTime
10926 * @return {ConnectableObservable<T>}
10927 * @method publishReplay
10928 * @owner Observable
10930 function publishReplay(bufferSize, windowTime, scheduler) {
10931 if (bufferSize === void 0) { bufferSize = Number.POSITIVE_INFINITY; }
10932 if (windowTime === void 0) { windowTime = Number.POSITIVE_INFINITY; }
10933 return multicast_1.multicast.call(this, new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, scheduler));
10935 exports.publishReplay = publishReplay;
10937 },{"../ReplaySubject":31,"./multicast":127}],133:[function(require,module,exports){
10939 var __extends = (this && this.__extends) || function (d, b) {
10940 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
10941 function __() { this.constructor = d; }
10942 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10944 var Subscriber_1 = require('../Subscriber');
10945 /* tslint:enable:max-line-length */
10947 * Applies an accumulator function over the source Observable, and returns each
10948 * intermediate result, with an optional seed value.
10950 * <span class="informal">It's like {@link reduce}, but emits the current
10951 * accumulation whenever the source emits a value.</span>
10953 * <img src="./img/scan.png" width="100%">
10955 * Combines together all values emitted on the source, using an accumulator
10956 * function that knows how to join a new source value into the accumulation from
10957 * the past. Is similar to {@link reduce}, but emits the intermediate
10960 * Returns an Observable that applies a specified `accumulator` function to each
10961 * item emitted by the source Observable. If a `seed` value is specified, then
10962 * that value will be used as the initial value for the accumulator. If no seed
10963 * value is specified, the first item of the source is used as the seed.
10965 * @example <caption>Count the number of click events</caption>
10966 * var clicks = Rx.Observable.fromEvent(document, 'click');
10967 * var ones = clicks.mapTo(1);
10969 * var count = ones.scan((acc, one) => acc + one, seed);
10970 * count.subscribe(x => console.log(x));
10972 * @see {@link expand}
10973 * @see {@link mergeScan}
10974 * @see {@link reduce}
10976 * @param {function(acc: R, value: T, index: number): R} accumulator
10977 * The accumulator function called on each source value.
10978 * @param {T|R} [seed] The initial accumulation value.
10979 * @return {Observable<R>} An observable of the accumulated values.
10981 * @owner Observable
10983 function scan(accumulator, seed) {
10984 var hasSeed = false;
10985 // providing a seed of `undefined` *should* be valid and trigger
10986 // hasSeed! so don't use `seed !== undefined` checks!
10987 // For this reason, we have to check it here at the original call site
10988 // otherwise inside Operator/Subscriber we won't know if `undefined`
10989 // means they didn't provide anything or if they literally provided `undefined`
10990 if (arguments.length >= 2) {
10993 return this.lift(new ScanOperator(accumulator, seed, hasSeed));
10995 exports.scan = scan;
10996 var ScanOperator = (function () {
10997 function ScanOperator(accumulator, seed, hasSeed) {
10998 if (hasSeed === void 0) { hasSeed = false; }
10999 this.accumulator = accumulator;
11001 this.hasSeed = hasSeed;
11003 ScanOperator.prototype.call = function (subscriber, source) {
11004 return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));
11006 return ScanOperator;
11009 * We need this JSDoc comment for affecting ESDoc.
11011 * @extends {Ignored}
11013 var ScanSubscriber = (function (_super) {
11014 __extends(ScanSubscriber, _super);
11015 function ScanSubscriber(destination, accumulator, _seed, hasSeed) {
11016 _super.call(this, destination);
11017 this.accumulator = accumulator;
11018 this._seed = _seed;
11019 this.hasSeed = hasSeed;
11022 Object.defineProperty(ScanSubscriber.prototype, "seed", {
11026 set: function (value) {
11027 this.hasSeed = true;
11028 this._seed = value;
11033 ScanSubscriber.prototype._next = function (value) {
11034 if (!this.hasSeed) {
11036 this.destination.next(value);
11039 return this._tryNext(value);
11042 ScanSubscriber.prototype._tryNext = function (value) {
11043 var index = this.index++;
11046 result = this.accumulator(this.seed, value, index);
11049 this.destination.error(err);
11051 this.seed = result;
11052 this.destination.next(result);
11054 return ScanSubscriber;
11055 }(Subscriber_1.Subscriber));
11057 },{"../Subscriber":35}],134:[function(require,module,exports){
11059 var multicast_1 = require('./multicast');
11060 var Subject_1 = require('../Subject');
11061 function shareSubjectFactory() {
11062 return new Subject_1.Subject();
11065 * Returns a new Observable that multicasts (shares) the original Observable. As long as there is at least one
11066 * Subscriber this Observable will be subscribed and emitting data. When all subscribers have unsubscribed it will
11067 * unsubscribe from the source Observable. Because the Observable is multicasting it makes the stream `hot`.
11068 * This is an alias for .publish().refCount().
11070 * <img src="./img/share.png" width="100%">
11072 * @return {Observable<T>} An Observable that upon connection causes the source Observable to emit items to its Observers.
11074 * @owner Observable
11077 return multicast_1.multicast.call(this, shareSubjectFactory).refCount();
11079 exports.share = share;
11082 },{"../Subject":33,"./multicast":127}],135:[function(require,module,exports){
11084 var __extends = (this && this.__extends) || function (d, b) {
11085 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
11086 function __() { this.constructor = d; }
11087 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
11089 var Subscriber_1 = require('../Subscriber');
11091 * Returns an Observable that skips the first `count` items emitted by the source Observable.
11093 * <img src="./img/skip.png" width="100%">
11095 * @param {Number} count - The number of times, items emitted by source Observable should be skipped.
11096 * @return {Observable} An Observable that skips values emitted by the source Observable.
11099 * @owner Observable
11101 function skip(count) {
11102 return this.lift(new SkipOperator(count));
11104 exports.skip = skip;
11105 var SkipOperator = (function () {
11106 function SkipOperator(total) {
11107 this.total = total;
11109 SkipOperator.prototype.call = function (subscriber, source) {
11110 return source.subscribe(new SkipSubscriber(subscriber, this.total));
11112 return SkipOperator;
11115 * We need this JSDoc comment for affecting ESDoc.
11117 * @extends {Ignored}
11119 var SkipSubscriber = (function (_super) {
11120 __extends(SkipSubscriber, _super);
11121 function SkipSubscriber(destination, total) {
11122 _super.call(this, destination);
11123 this.total = total;
11126 SkipSubscriber.prototype._next = function (x) {
11127 if (++this.count > this.total) {
11128 this.destination.next(x);
11131 return SkipSubscriber;
11132 }(Subscriber_1.Subscriber));
11134 },{"../Subscriber":35}],136:[function(require,module,exports){
11136 var __extends = (this && this.__extends) || function (d, b) {
11137 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
11138 function __() { this.constructor = d; }
11139 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
11141 var OuterSubscriber_1 = require('../OuterSubscriber');
11142 var subscribeToResult_1 = require('../util/subscribeToResult');
11144 * Returns an Observable that skips items emitted by the source Observable until a second Observable emits an item.
11146 * <img src="./img/skipUntil.png" width="100%">
11148 * @param {Observable} notifier - The second Observable that has to emit an item before the source Observable's elements begin to
11149 * be mirrored by the resulting Observable.
11150 * @return {Observable<T>} An Observable that skips items from the source Observable until the second Observable emits
11151 * an item, then emits the remaining items.
11152 * @method skipUntil
11153 * @owner Observable
11155 function skipUntil(notifier) {
11156 return this.lift(new SkipUntilOperator(notifier));
11158 exports.skipUntil = skipUntil;
11159 var SkipUntilOperator = (function () {
11160 function SkipUntilOperator(notifier) {
11161 this.notifier = notifier;
11163 SkipUntilOperator.prototype.call = function (subscriber, source) {
11164 return source.subscribe(new SkipUntilSubscriber(subscriber, this.notifier));
11166 return SkipUntilOperator;
11169 * We need this JSDoc comment for affecting ESDoc.
11171 * @extends {Ignored}
11173 var SkipUntilSubscriber = (function (_super) {
11174 __extends(SkipUntilSubscriber, _super);
11175 function SkipUntilSubscriber(destination, notifier) {
11176 _super.call(this, destination);
11177 this.hasValue = false;
11178 this.isInnerStopped = false;
11179 this.add(subscribeToResult_1.subscribeToResult(this, notifier));
11181 SkipUntilSubscriber.prototype._next = function (value) {
11182 if (this.hasValue) {
11183 _super.prototype._next.call(this, value);
11186 SkipUntilSubscriber.prototype._complete = function () {
11187 if (this.isInnerStopped) {
11188 _super.prototype._complete.call(this);
11191 this.unsubscribe();
11194 SkipUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
11195 this.hasValue = true;
11197 SkipUntilSubscriber.prototype.notifyComplete = function () {
11198 this.isInnerStopped = true;
11199 if (this.isStopped) {
11200 _super.prototype._complete.call(this);
11203 return SkipUntilSubscriber;
11204 }(OuterSubscriber_1.OuterSubscriber));
11206 },{"../OuterSubscriber":30,"../util/subscribeToResult":171}],137:[function(require,module,exports){
11208 var __extends = (this && this.__extends) || function (d, b) {
11209 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
11210 function __() { this.constructor = d; }
11211 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
11213 var Subscriber_1 = require('../Subscriber');
11215 * Returns an Observable that skips all items emitted by the source Observable as long as a specified condition holds
11216 * true, but emits all further source items as soon as the condition becomes false.
11218 * <img src="./img/skipWhile.png" width="100%">
11220 * @param {Function} predicate - A function to test each item emitted from the source Observable.
11221 * @return {Observable<T>} An Observable that begins emitting items emitted by the source Observable when the
11222 * specified predicate becomes false.
11223 * @method skipWhile
11224 * @owner Observable
11226 function skipWhile(predicate) {
11227 return this.lift(new SkipWhileOperator(predicate));
11229 exports.skipWhile = skipWhile;
11230 var SkipWhileOperator = (function () {
11231 function SkipWhileOperator(predicate) {
11232 this.predicate = predicate;
11234 SkipWhileOperator.prototype.call = function (subscriber, source) {
11235 return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));
11237 return SkipWhileOperator;
11240 * We need this JSDoc comment for affecting ESDoc.
11242 * @extends {Ignored}
11244 var SkipWhileSubscriber = (function (_super) {
11245 __extends(SkipWhileSubscriber, _super);
11246 function SkipWhileSubscriber(destination, predicate) {
11247 _super.call(this, destination);
11248 this.predicate = predicate;
11249 this.skipping = true;
11252 SkipWhileSubscriber.prototype._next = function (value) {
11253 var destination = this.destination;
11254 if (this.skipping) {
11255 this.tryCallPredicate(value);
11257 if (!this.skipping) {
11258 destination.next(value);
11261 SkipWhileSubscriber.prototype.tryCallPredicate = function (value) {
11263 var result = this.predicate(value, this.index++);
11264 this.skipping = Boolean(result);
11267 this.destination.error(err);
11270 return SkipWhileSubscriber;
11271 }(Subscriber_1.Subscriber));
11273 },{"../Subscriber":35}],138:[function(require,module,exports){
11275 var ArrayObservable_1 = require('../observable/ArrayObservable');
11276 var ScalarObservable_1 = require('../observable/ScalarObservable');
11277 var EmptyObservable_1 = require('../observable/EmptyObservable');
11278 var concat_1 = require('./concat');
11279 var isScheduler_1 = require('../util/isScheduler');
11280 /* tslint:enable:max-line-length */
11282 * Returns an Observable that emits the items you specify as arguments before it begins to emit
11283 * items emitted by the source Observable.
11285 * <img src="./img/startWith.png" width="100%">
11287 * @param {...T} values - Items you want the modified Observable to emit first.
11288 * @param {Scheduler} [scheduler] - A {@link IScheduler} to use for scheduling
11289 * the emissions of the `next` notifications.
11290 * @return {Observable} An Observable that emits the items in the specified Iterable and then emits the items
11291 * emitted by the source Observable.
11292 * @method startWith
11293 * @owner Observable
11295 function startWith() {
11297 for (var _i = 0; _i < arguments.length; _i++) {
11298 array[_i - 0] = arguments[_i];
11300 var scheduler = array[array.length - 1];
11301 if (isScheduler_1.isScheduler(scheduler)) {
11307 var len = array.length;
11309 return concat_1.concatStatic(new ScalarObservable_1.ScalarObservable(array[0], scheduler), this);
11311 else if (len > 1) {
11312 return concat_1.concatStatic(new ArrayObservable_1.ArrayObservable(array, scheduler), this);
11315 return concat_1.concatStatic(new EmptyObservable_1.EmptyObservable(scheduler), this);
11318 exports.startWith = startWith;
11320 },{"../observable/ArrayObservable":85,"../observable/EmptyObservable":88,"../observable/ScalarObservable":94,"../util/isScheduler":169,"./concat":112}],139:[function(require,module,exports){
11322 var __extends = (this && this.__extends) || function (d, b) {
11323 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
11324 function __() { this.constructor = d; }
11325 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
11327 var OuterSubscriber_1 = require('../OuterSubscriber');
11328 var subscribeToResult_1 = require('../util/subscribeToResult');
11329 /* tslint:enable:max-line-length */
11331 * Projects each source value to an Observable which is merged in the output
11332 * Observable, emitting values only from the most recently projected Observable.
11334 * <span class="informal">Maps each value to an Observable, then flattens all of
11335 * these inner Observables using {@link switch}.</span>
11337 * <img src="./img/switchMap.png" width="100%">
11339 * Returns an Observable that emits items based on applying a function that you
11340 * supply to each item emitted by the source Observable, where that function
11341 * returns an (so-called "inner") Observable. Each time it observes one of these
11342 * inner Observables, the output Observable begins emitting the items emitted by
11343 * that inner Observable. When a new inner Observable is emitted, `switchMap`
11344 * stops emitting items from the earlier-emitted inner Observable and begins
11345 * emitting items from the new one. It continues to behave like this for
11346 * subsequent inner Observables.
11348 * @example <caption>Rerun an interval Observable on every click event</caption>
11349 * var clicks = Rx.Observable.fromEvent(document, 'click');
11350 * var result = clicks.switchMap((ev) => Rx.Observable.interval(1000));
11351 * result.subscribe(x => console.log(x));
11353 * @see {@link concatMap}
11354 * @see {@link exhaustMap}
11355 * @see {@link mergeMap}
11356 * @see {@link switch}
11357 * @see {@link switchMapTo}
11359 * @param {function(value: T, ?index: number): ObservableInput} project A function
11360 * that, when applied to an item emitted by the source Observable, returns an
11362 * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
11363 * A function to produce the value on the output Observable based on the values
11364 * and the indices of the source (outer) emission and the inner Observable
11365 * emission. The arguments passed to this function are:
11366 * - `outerValue`: the value that came from the source
11367 * - `innerValue`: the value that came from the projected Observable
11368 * - `outerIndex`: the "index" of the value that came from the source
11369 * - `innerIndex`: the "index" of the value from the projected Observable
11370 * @return {Observable} An Observable that emits the result of applying the
11371 * projection function (and the optional `resultSelector`) to each item emitted
11372 * by the source Observable and taking only the values from the most recently
11373 * projected inner Observable.
11374 * @method switchMap
11375 * @owner Observable
11377 function switchMap(project, resultSelector) {
11378 return this.lift(new SwitchMapOperator(project, resultSelector));
11380 exports.switchMap = switchMap;
11381 var SwitchMapOperator = (function () {
11382 function SwitchMapOperator(project, resultSelector) {
11383 this.project = project;
11384 this.resultSelector = resultSelector;
11386 SwitchMapOperator.prototype.call = function (subscriber, source) {
11387 return source.subscribe(new SwitchMapSubscriber(subscriber, this.project, this.resultSelector));
11389 return SwitchMapOperator;
11392 * We need this JSDoc comment for affecting ESDoc.
11394 * @extends {Ignored}
11396 var SwitchMapSubscriber = (function (_super) {
11397 __extends(SwitchMapSubscriber, _super);
11398 function SwitchMapSubscriber(destination, project, resultSelector) {
11399 _super.call(this, destination);
11400 this.project = project;
11401 this.resultSelector = resultSelector;
11404 SwitchMapSubscriber.prototype._next = function (value) {
11406 var index = this.index++;
11408 result = this.project(value, index);
11411 this.destination.error(error);
11414 this._innerSub(result, value, index);
11416 SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {
11417 var innerSubscription = this.innerSubscription;
11418 if (innerSubscription) {
11419 innerSubscription.unsubscribe();
11421 this.add(this.innerSubscription = subscribeToResult_1.subscribeToResult(this, result, value, index));
11423 SwitchMapSubscriber.prototype._complete = function () {
11424 var innerSubscription = this.innerSubscription;
11425 if (!innerSubscription || innerSubscription.closed) {
11426 _super.prototype._complete.call(this);
11429 SwitchMapSubscriber.prototype._unsubscribe = function () {
11430 this.innerSubscription = null;
11432 SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {
11433 this.remove(innerSub);
11434 this.innerSubscription = null;
11435 if (this.isStopped) {
11436 _super.prototype._complete.call(this);
11439 SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
11440 if (this.resultSelector) {
11441 this._tryNotifyNext(outerValue, innerValue, outerIndex, innerIndex);
11444 this.destination.next(innerValue);
11447 SwitchMapSubscriber.prototype._tryNotifyNext = function (outerValue, innerValue, outerIndex, innerIndex) {
11450 result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);
11453 this.destination.error(err);
11456 this.destination.next(result);
11458 return SwitchMapSubscriber;
11459 }(OuterSubscriber_1.OuterSubscriber));
11461 },{"../OuterSubscriber":30,"../util/subscribeToResult":171}],140:[function(require,module,exports){
11463 var __extends = (this && this.__extends) || function (d, b) {
11464 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
11465 function __() { this.constructor = d; }
11466 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
11468 var Subscriber_1 = require('../Subscriber');
11469 var ArgumentOutOfRangeError_1 = require('../util/ArgumentOutOfRangeError');
11470 var EmptyObservable_1 = require('../observable/EmptyObservable');
11472 * Emits only the first `count` values emitted by the source Observable.
11474 * <span class="informal">Takes the first `count` values from the source, then
11475 * completes.</span>
11477 * <img src="./img/take.png" width="100%">
11479 * `take` returns an Observable that emits only the first `count` values emitted
11480 * by the source Observable. If the source emits fewer than `count` values then
11481 * all of its values are emitted. After that, it completes, regardless if the
11482 * source completes.
11484 * @example <caption>Take the first 5 seconds of an infinite 1-second interval Observable</caption>
11485 * var interval = Rx.Observable.interval(1000);
11486 * var five = interval.take(5);
11487 * five.subscribe(x => console.log(x));
11489 * @see {@link takeLast}
11490 * @see {@link takeUntil}
11491 * @see {@link takeWhile}
11492 * @see {@link skip}
11494 * @throws {ArgumentOutOfRangeError} When using `take(i)`, it delivers an
11495 * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0`.
11497 * @param {number} count The maximum number of `next` values to emit.
11498 * @return {Observable<T>} An Observable that emits only the first `count`
11499 * values emitted by the source Observable, or all of the values from the source
11500 * if the source emits fewer than `count` values.
11502 * @owner Observable
11504 function take(count) {
11506 return new EmptyObservable_1.EmptyObservable();
11509 return this.lift(new TakeOperator(count));
11512 exports.take = take;
11513 var TakeOperator = (function () {
11514 function TakeOperator(total) {
11515 this.total = total;
11516 if (this.total < 0) {
11517 throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;
11520 TakeOperator.prototype.call = function (subscriber, source) {
11521 return source.subscribe(new TakeSubscriber(subscriber, this.total));
11523 return TakeOperator;
11526 * We need this JSDoc comment for affecting ESDoc.
11528 * @extends {Ignored}
11530 var TakeSubscriber = (function (_super) {
11531 __extends(TakeSubscriber, _super);
11532 function TakeSubscriber(destination, total) {
11533 _super.call(this, destination);
11534 this.total = total;
11537 TakeSubscriber.prototype._next = function (value) {
11538 var total = this.total;
11539 var count = ++this.count;
11540 if (count <= total) {
11541 this.destination.next(value);
11542 if (count === total) {
11543 this.destination.complete();
11544 this.unsubscribe();
11548 return TakeSubscriber;
11549 }(Subscriber_1.Subscriber));
11551 },{"../Subscriber":35,"../observable/EmptyObservable":88,"../util/ArgumentOutOfRangeError":156}],141:[function(require,module,exports){
11553 var __extends = (this && this.__extends) || function (d, b) {
11554 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
11555 function __() { this.constructor = d; }
11556 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
11558 var OuterSubscriber_1 = require('../OuterSubscriber');
11559 var subscribeToResult_1 = require('../util/subscribeToResult');
11561 * Emits the values emitted by the source Observable until a `notifier`
11562 * Observable emits a value.
11564 * <span class="informal">Lets values pass until a second Observable,
11565 * `notifier`, emits something. Then, it completes.</span>
11567 * <img src="./img/takeUntil.png" width="100%">
11569 * `takeUntil` subscribes and begins mirroring the source Observable. It also
11570 * monitors a second Observable, `notifier` that you provide. If the `notifier`
11571 * emits a value or a complete notification, the output Observable stops
11572 * mirroring the source Observable and completes.
11574 * @example <caption>Tick every second until the first click happens</caption>
11575 * var interval = Rx.Observable.interval(1000);
11576 * var clicks = Rx.Observable.fromEvent(document, 'click');
11577 * var result = interval.takeUntil(clicks);
11578 * result.subscribe(x => console.log(x));
11580 * @see {@link take}
11581 * @see {@link takeLast}
11582 * @see {@link takeWhile}
11583 * @see {@link skip}
11585 * @param {Observable} notifier The Observable whose first emitted value will
11586 * cause the output Observable of `takeUntil` to stop emitting values from the
11587 * source Observable.
11588 * @return {Observable<T>} An Observable that emits the values from the source
11589 * Observable until such time as `notifier` emits its first value.
11590 * @method takeUntil
11591 * @owner Observable
11593 function takeUntil(notifier) {
11594 return this.lift(new TakeUntilOperator(notifier));
11596 exports.takeUntil = takeUntil;
11597 var TakeUntilOperator = (function () {
11598 function TakeUntilOperator(notifier) {
11599 this.notifier = notifier;
11601 TakeUntilOperator.prototype.call = function (subscriber, source) {
11602 return source.subscribe(new TakeUntilSubscriber(subscriber, this.notifier));
11604 return TakeUntilOperator;
11607 * We need this JSDoc comment for affecting ESDoc.
11609 * @extends {Ignored}
11611 var TakeUntilSubscriber = (function (_super) {
11612 __extends(TakeUntilSubscriber, _super);
11613 function TakeUntilSubscriber(destination, notifier) {
11614 _super.call(this, destination);
11615 this.notifier = notifier;
11616 this.add(subscribeToResult_1.subscribeToResult(this, notifier));
11618 TakeUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
11621 TakeUntilSubscriber.prototype.notifyComplete = function () {
11624 return TakeUntilSubscriber;
11625 }(OuterSubscriber_1.OuterSubscriber));
11627 },{"../OuterSubscriber":30,"../util/subscribeToResult":171}],142:[function(require,module,exports){
11629 var __extends = (this && this.__extends) || function (d, b) {
11630 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
11631 function __() { this.constructor = d; }
11632 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
11634 var Subscriber_1 = require('../Subscriber');
11635 var async_1 = require('../scheduler/async');
11637 * Emits a value from the source Observable, then ignores subsequent source
11638 * values for `duration` milliseconds, then repeats this process.
11640 * <span class="informal">Lets a value pass, then ignores source values for the
11641 * next `duration` milliseconds.</span>
11643 * <img src="./img/throttleTime.png" width="100%">
11645 * `throttleTime` emits the source Observable values on the output Observable
11646 * when its internal timer is disabled, and ignores source values when the timer
11647 * is enabled. Initially, the timer is disabled. As soon as the first source
11648 * value arrives, it is forwarded to the output Observable, and then the timer
11649 * is enabled. After `duration` milliseconds (or the time unit determined
11650 * internally by the optional `scheduler`) has passed, the timer is disabled,
11651 * and this process repeats for the next source value. Optionally takes a
11652 * {@link IScheduler} for managing timers.
11654 * @example <caption>Emit clicks at a rate of at most one click per second</caption>
11655 * var clicks = Rx.Observable.fromEvent(document, 'click');
11656 * var result = clicks.throttleTime(1000);
11657 * result.subscribe(x => console.log(x));
11659 * @see {@link auditTime}
11660 * @see {@link debounceTime}
11661 * @see {@link delay}
11662 * @see {@link sampleTime}
11663 * @see {@link throttle}
11665 * @param {number} duration Time to wait before emitting another value after
11666 * emitting the last value, measured in milliseconds or the time unit determined
11667 * internally by the optional `scheduler`.
11668 * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for
11669 * managing the timers that handle the sampling.
11670 * @return {Observable<T>} An Observable that performs the throttle operation to
11671 * limit the rate of emissions from the source.
11672 * @method throttleTime
11673 * @owner Observable
11675 function throttleTime(duration, scheduler) {
11676 if (scheduler === void 0) { scheduler = async_1.async; }
11677 return this.lift(new ThrottleTimeOperator(duration, scheduler));
11679 exports.throttleTime = throttleTime;
11680 var ThrottleTimeOperator = (function () {
11681 function ThrottleTimeOperator(duration, scheduler) {
11682 this.duration = duration;
11683 this.scheduler = scheduler;
11685 ThrottleTimeOperator.prototype.call = function (subscriber, source) {
11686 return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler));
11688 return ThrottleTimeOperator;
11691 * We need this JSDoc comment for affecting ESDoc.
11693 * @extends {Ignored}
11695 var ThrottleTimeSubscriber = (function (_super) {
11696 __extends(ThrottleTimeSubscriber, _super);
11697 function ThrottleTimeSubscriber(destination, duration, scheduler) {
11698 _super.call(this, destination);
11699 this.duration = duration;
11700 this.scheduler = scheduler;
11702 ThrottleTimeSubscriber.prototype._next = function (value) {
11703 if (!this.throttled) {
11704 this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));
11705 this.destination.next(value);
11708 ThrottleTimeSubscriber.prototype.clearThrottle = function () {
11709 var throttled = this.throttled;
11711 throttled.unsubscribe();
11712 this.remove(throttled);
11713 this.throttled = null;
11716 return ThrottleTimeSubscriber;
11717 }(Subscriber_1.Subscriber));
11718 function dispatchNext(arg) {
11719 var subscriber = arg.subscriber;
11720 subscriber.clearThrottle();
11723 },{"../Subscriber":35,"../scheduler/async":150}],143:[function(require,module,exports){
11725 var __extends = (this && this.__extends) || function (d, b) {
11726 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
11727 function __() { this.constructor = d; }
11728 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
11730 var OuterSubscriber_1 = require('../OuterSubscriber');
11731 var subscribeToResult_1 = require('../util/subscribeToResult');
11732 /* tslint:enable:max-line-length */
11734 * Combines the source Observable with other Observables to create an Observable
11735 * whose values are calculated from the latest values of each, only when the
11738 * <span class="informal">Whenever the source Observable emits a value, it
11739 * computes a formula using that value plus the latest values from other input
11740 * Observables, then emits the output of that formula.</span>
11742 * <img src="./img/withLatestFrom.png" width="100%">
11744 * `withLatestFrom` combines each value from the source Observable (the
11745 * instance) with the latest values from the other input Observables only when
11746 * the source emits a value, optionally using a `project` function to determine
11747 * the value to be emitted on the output Observable. All input Observables must
11748 * emit at least one value before the output Observable will emit a value.
11750 * @example <caption>On every click event, emit an array with the latest timer event plus the click event</caption>
11751 * var clicks = Rx.Observable.fromEvent(document, 'click');
11752 * var timer = Rx.Observable.interval(1000);
11753 * var result = clicks.withLatestFrom(timer);
11754 * result.subscribe(x => console.log(x));
11756 * @see {@link combineLatest}
11758 * @param {ObservableInput} other An input Observable to combine with the source
11759 * Observable. More than one input Observables may be given as argument.
11760 * @param {Function} [project] Projection function for combining values
11761 * together. Receives all values in order of the Observables passed, where the
11762 * first parameter is a value from the source Observable. (e.g.
11763 * `a.withLatestFrom(b, c, (a1, b1, c1) => a1 + b1 + c1)`). If this is not
11764 * passed, arrays will be emitted on the output Observable.
11765 * @return {Observable} An Observable of projected values from the most recent
11766 * values from each input Observable, or an array of the most recent values from
11767 * each input Observable.
11768 * @method withLatestFrom
11769 * @owner Observable
11771 function withLatestFrom() {
11773 for (var _i = 0; _i < arguments.length; _i++) {
11774 args[_i - 0] = arguments[_i];
11777 if (typeof args[args.length - 1] === 'function') {
11778 project = args.pop();
11780 var observables = args;
11781 return this.lift(new WithLatestFromOperator(observables, project));
11783 exports.withLatestFrom = withLatestFrom;
11784 var WithLatestFromOperator = (function () {
11785 function WithLatestFromOperator(observables, project) {
11786 this.observables = observables;
11787 this.project = project;
11789 WithLatestFromOperator.prototype.call = function (subscriber, source) {
11790 return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
11792 return WithLatestFromOperator;
11795 * We need this JSDoc comment for affecting ESDoc.
11797 * @extends {Ignored}
11799 var WithLatestFromSubscriber = (function (_super) {
11800 __extends(WithLatestFromSubscriber, _super);
11801 function WithLatestFromSubscriber(destination, observables, project) {
11802 _super.call(this, destination);
11803 this.observables = observables;
11804 this.project = project;
11805 this.toRespond = [];
11806 var len = observables.length;
11807 this.values = new Array(len);
11808 for (var i = 0; i < len; i++) {
11809 this.toRespond.push(i);
11811 for (var i = 0; i < len; i++) {
11812 var observable = observables[i];
11813 this.add(subscribeToResult_1.subscribeToResult(this, observable, observable, i));
11816 WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
11817 this.values[outerIndex] = innerValue;
11818 var toRespond = this.toRespond;
11819 if (toRespond.length > 0) {
11820 var found = toRespond.indexOf(outerIndex);
11821 if (found !== -1) {
11822 toRespond.splice(found, 1);
11826 WithLatestFromSubscriber.prototype.notifyComplete = function () {
11829 WithLatestFromSubscriber.prototype._next = function (value) {
11830 if (this.toRespond.length === 0) {
11831 var args = [value].concat(this.values);
11832 if (this.project) {
11833 this._tryProject(args);
11836 this.destination.next(args);
11840 WithLatestFromSubscriber.prototype._tryProject = function (args) {
11843 result = this.project.apply(this, args);
11846 this.destination.error(err);
11849 this.destination.next(result);
11851 return WithLatestFromSubscriber;
11852 }(OuterSubscriber_1.OuterSubscriber));
11854 },{"../OuterSubscriber":30,"../util/subscribeToResult":171}],144:[function(require,module,exports){
11856 var __extends = (this && this.__extends) || function (d, b) {
11857 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
11858 function __() { this.constructor = d; }
11859 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
11861 var ArrayObservable_1 = require('../observable/ArrayObservable');
11862 var isArray_1 = require('../util/isArray');
11863 var Subscriber_1 = require('../Subscriber');
11864 var OuterSubscriber_1 = require('../OuterSubscriber');
11865 var subscribeToResult_1 = require('../util/subscribeToResult');
11866 var iterator_1 = require('../symbol/iterator');
11867 /* tslint:enable:max-line-length */
11869 * @param observables
11870 * @return {Observable<R>}
11872 * @owner Observable
11874 function zipProto() {
11875 var observables = [];
11876 for (var _i = 0; _i < arguments.length; _i++) {
11877 observables[_i - 0] = arguments[_i];
11879 return this.lift.call(zipStatic.apply(void 0, [this].concat(observables)));
11881 exports.zipProto = zipProto;
11882 /* tslint:enable:max-line-length */
11884 * Combines multiple Observables to create an Observable whose values are calculated from the values, in order, of each
11885 * of its input Observables.
11887 * If the latest parameter is a function, this function is used to compute the created value from the input values.
11888 * Otherwise, an array of the input values is returned.
11890 * @example <caption>Combine age and name from different sources</caption>
11892 * let age$ = Observable.of<number>(27, 25, 29);
11893 * let name$ = Observable.of<string>('Foo', 'Bar', 'Beer');
11894 * let isDev$ = Observable.of<boolean>(true, true, false);
11900 * (age: number, name: string, isDev: boolean) => ({ age, name, isDev }))
11901 * .subscribe(x => console.log(x));
11904 * // { age: 27, name: 'Foo', isDev: true }
11905 * // { age: 25, name: 'Bar', isDev: true }
11906 * // { age: 29, name: 'Beer', isDev: false }
11908 * @param observables
11909 * @return {Observable<R>}
11912 * @owner Observable
11914 function zipStatic() {
11915 var observables = [];
11916 for (var _i = 0; _i < arguments.length; _i++) {
11917 observables[_i - 0] = arguments[_i];
11919 var project = observables[observables.length - 1];
11920 if (typeof project === 'function') {
11923 return new ArrayObservable_1.ArrayObservable(observables).lift(new ZipOperator(project));
11925 exports.zipStatic = zipStatic;
11926 var ZipOperator = (function () {
11927 function ZipOperator(project) {
11928 this.project = project;
11930 ZipOperator.prototype.call = function (subscriber, source) {
11931 return source.subscribe(new ZipSubscriber(subscriber, this.project));
11933 return ZipOperator;
11935 exports.ZipOperator = ZipOperator;
11937 * We need this JSDoc comment for affecting ESDoc.
11939 * @extends {Ignored}
11941 var ZipSubscriber = (function (_super) {
11942 __extends(ZipSubscriber, _super);
11943 function ZipSubscriber(destination, project, values) {
11944 if (values === void 0) { values = Object.create(null); }
11945 _super.call(this, destination);
11946 this.iterators = [];
11948 this.project = (typeof project === 'function') ? project : null;
11949 this.values = values;
11951 ZipSubscriber.prototype._next = function (value) {
11952 var iterators = this.iterators;
11953 if (isArray_1.isArray(value)) {
11954 iterators.push(new StaticArrayIterator(value));
11956 else if (typeof value[iterator_1.$$iterator] === 'function') {
11957 iterators.push(new StaticIterator(value[iterator_1.$$iterator]()));
11960 iterators.push(new ZipBufferIterator(this.destination, this, value));
11963 ZipSubscriber.prototype._complete = function () {
11964 var iterators = this.iterators;
11965 var len = iterators.length;
11967 for (var i = 0; i < len; i++) {
11968 var iterator = iterators[i];
11969 if (iterator.stillUnsubscribed) {
11970 this.add(iterator.subscribe(iterator, i));
11973 this.active--; // not an observable
11977 ZipSubscriber.prototype.notifyInactive = function () {
11979 if (this.active === 0) {
11980 this.destination.complete();
11983 ZipSubscriber.prototype.checkIterators = function () {
11984 var iterators = this.iterators;
11985 var len = iterators.length;
11986 var destination = this.destination;
11987 // abort if not all of them have values
11988 for (var i = 0; i < len; i++) {
11989 var iterator = iterators[i];
11990 if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {
11994 var shouldComplete = false;
11996 for (var i = 0; i < len; i++) {
11997 var iterator = iterators[i];
11998 var result = iterator.next();
11999 // check to see if it's completed now that you've gotten
12001 if (iterator.hasCompleted()) {
12002 shouldComplete = true;
12005 destination.complete();
12008 args.push(result.value);
12010 if (this.project) {
12011 this._tryProject(args);
12014 destination.next(args);
12016 if (shouldComplete) {
12017 destination.complete();
12020 ZipSubscriber.prototype._tryProject = function (args) {
12023 result = this.project.apply(this, args);
12026 this.destination.error(err);
12029 this.destination.next(result);
12031 return ZipSubscriber;
12032 }(Subscriber_1.Subscriber));
12033 exports.ZipSubscriber = ZipSubscriber;
12034 var StaticIterator = (function () {
12035 function StaticIterator(iterator) {
12036 this.iterator = iterator;
12037 this.nextResult = iterator.next();
12039 StaticIterator.prototype.hasValue = function () {
12042 StaticIterator.prototype.next = function () {
12043 var result = this.nextResult;
12044 this.nextResult = this.iterator.next();
12047 StaticIterator.prototype.hasCompleted = function () {
12048 var nextResult = this.nextResult;
12049 return nextResult && nextResult.done;
12051 return StaticIterator;
12053 var StaticArrayIterator = (function () {
12054 function StaticArrayIterator(array) {
12055 this.array = array;
12058 this.length = array.length;
12060 StaticArrayIterator.prototype[iterator_1.$$iterator] = function () {
12063 StaticArrayIterator.prototype.next = function (value) {
12064 var i = this.index++;
12065 var array = this.array;
12066 return i < this.length ? { value: array[i], done: false } : { value: null, done: true };
12068 StaticArrayIterator.prototype.hasValue = function () {
12069 return this.array.length > this.index;
12071 StaticArrayIterator.prototype.hasCompleted = function () {
12072 return this.array.length === this.index;
12074 return StaticArrayIterator;
12077 * We need this JSDoc comment for affecting ESDoc.
12079 * @extends {Ignored}
12081 var ZipBufferIterator = (function (_super) {
12082 __extends(ZipBufferIterator, _super);
12083 function ZipBufferIterator(destination, parent, observable) {
12084 _super.call(this, destination);
12085 this.parent = parent;
12086 this.observable = observable;
12087 this.stillUnsubscribed = true;
12089 this.isComplete = false;
12091 ZipBufferIterator.prototype[iterator_1.$$iterator] = function () {
12094 // NOTE: there is actually a name collision here with Subscriber.next and Iterator.next
12095 // this is legit because `next()` will never be called by a subscription in this case.
12096 ZipBufferIterator.prototype.next = function () {
12097 var buffer = this.buffer;
12098 if (buffer.length === 0 && this.isComplete) {
12099 return { value: null, done: true };
12102 return { value: buffer.shift(), done: false };
12105 ZipBufferIterator.prototype.hasValue = function () {
12106 return this.buffer.length > 0;
12108 ZipBufferIterator.prototype.hasCompleted = function () {
12109 return this.buffer.length === 0 && this.isComplete;
12111 ZipBufferIterator.prototype.notifyComplete = function () {
12112 if (this.buffer.length > 0) {
12113 this.isComplete = true;
12114 this.parent.notifyInactive();
12117 this.destination.complete();
12120 ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
12121 this.buffer.push(innerValue);
12122 this.parent.checkIterators();
12124 ZipBufferIterator.prototype.subscribe = function (value, index) {
12125 return subscribeToResult_1.subscribeToResult(this, this.observable, this, index);
12127 return ZipBufferIterator;
12128 }(OuterSubscriber_1.OuterSubscriber));
12130 },{"../OuterSubscriber":30,"../Subscriber":35,"../observable/ArrayObservable":85,"../symbol/iterator":152,"../util/isArray":162,"../util/subscribeToResult":171}],145:[function(require,module,exports){
12132 var __extends = (this && this.__extends) || function (d, b) {
12133 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
12134 function __() { this.constructor = d; }
12135 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12137 var Subscription_1 = require('../Subscription');
12139 * A unit of work to be executed in a {@link Scheduler}. An action is typically
12140 * created from within a Scheduler and an RxJS user does not need to concern
12141 * themselves about creating and manipulating an Action.
12144 * class Action<T> extends Subscription {
12145 * new (scheduler: Scheduler, work: (state?: T) => void);
12146 * schedule(state?: T, delay: number = 0): Subscription;
12152 var Action = (function (_super) {
12153 __extends(Action, _super);
12154 function Action(scheduler, work) {
12158 * Schedules this action on its parent Scheduler for execution. May be passed
12159 * some context object, `state`. May happen at some point in the future,
12160 * according to the `delay` parameter, if specified.
12161 * @param {T} [state] Some contextual data that the `work` function uses when
12162 * called by the Scheduler.
12163 * @param {number} [delay] Time to wait before executing the work, where the
12164 * time unit is implicit and defined by the Scheduler.
12167 Action.prototype.schedule = function (state, delay) {
12168 if (delay === void 0) { delay = 0; }
12172 }(Subscription_1.Subscription));
12173 exports.Action = Action;
12175 },{"../Subscription":36}],146:[function(require,module,exports){
12177 var __extends = (this && this.__extends) || function (d, b) {
12178 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
12179 function __() { this.constructor = d; }
12180 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12182 var root_1 = require('../util/root');
12183 var Action_1 = require('./Action');
12185 * We need this JSDoc comment for affecting ESDoc.
12187 * @extends {Ignored}
12189 var AsyncAction = (function (_super) {
12190 __extends(AsyncAction, _super);
12191 function AsyncAction(scheduler, work) {
12192 _super.call(this, scheduler, work);
12193 this.scheduler = scheduler;
12195 this.pending = false;
12197 AsyncAction.prototype.schedule = function (state, delay) {
12198 if (delay === void 0) { delay = 0; }
12202 // Always replace the current state with the new state.
12203 this.state = state;
12204 // Set the pending flag indicating that this action has been scheduled, or
12205 // has recursively rescheduled itself.
12206 this.pending = true;
12208 var scheduler = this.scheduler;
12210 // Important implementation note:
12212 // Actions only execute once by default, unless rescheduled from within the
12213 // scheduled callback. This allows us to implement single and repeat
12214 // actions via the same code path, without adding API surface area, as well
12215 // as mimic traditional recursion but across asynchronous boundaries.
12217 // However, JS runtimes and timers distinguish between intervals achieved by
12218 // serial `setTimeout` calls vs. a single `setInterval` call. An interval of
12219 // serial `setTimeout` calls can be individually delayed, which delays
12220 // scheduling the next `setTimeout`, and so on. `setInterval` attempts to
12221 // guarantee the interval callback will be invoked more precisely to the
12222 // interval period, regardless of load.
12224 // Therefore, we use `setInterval` to schedule single and repeat actions.
12225 // If the action reschedules itself with the same delay, the interval is not
12226 // canceled. If the action doesn't reschedule, or reschedules with a
12227 // different delay, the interval will be canceled after scheduled callback
12231 this.id = this.recycleAsyncId(scheduler, id, delay);
12233 this.delay = delay;
12234 // If this action has already an async Id, don't request a new one.
12235 this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
12238 AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {
12239 if (delay === void 0) { delay = 0; }
12240 return root_1.root.setInterval(scheduler.flush.bind(scheduler, this), delay);
12242 AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
12243 if (delay === void 0) { delay = 0; }
12244 // If this action is rescheduled with the same delay time, don't clear the interval id.
12245 if (delay !== null && this.delay === delay) {
12248 // Otherwise, if the action's delay time is different from the current delay,
12249 // clear the interval id
12250 return root_1.root.clearInterval(id) && undefined || undefined;
12253 * Immediately executes this action and the `work` it contains.
12256 AsyncAction.prototype.execute = function (state, delay) {
12258 return new Error('executing a cancelled action');
12260 this.pending = false;
12261 var error = this._execute(state, delay);
12265 else if (this.pending === false && this.id != null) {
12266 // Dequeue if the action didn't reschedule itself. Don't call
12267 // unsubscribe(), because the action could reschedule later.
12270 // scheduler.schedule(function doWork(counter) {
12271 // /* ... I'm a busy worker bee ... */
12272 // var originalAction = this;
12273 // /* wait 100ms before rescheduling the action */
12274 // setTimeout(function () {
12275 // originalAction.schedule(counter + 1);
12279 this.id = this.recycleAsyncId(this.scheduler, this.id, null);
12282 AsyncAction.prototype._execute = function (state, delay) {
12283 var errored = false;
12284 var errorValue = undefined;
12290 errorValue = !!e && e || new Error(e);
12293 this.unsubscribe();
12297 AsyncAction.prototype._unsubscribe = function () {
12299 var scheduler = this.scheduler;
12300 var actions = scheduler.actions;
12301 var index = actions.indexOf(this);
12305 this.pending = false;
12306 this.scheduler = null;
12307 if (index !== -1) {
12308 actions.splice(index, 1);
12311 this.id = this.recycleAsyncId(scheduler, id, null);
12314 return AsyncAction;
12315 }(Action_1.Action));
12316 exports.AsyncAction = AsyncAction;
12318 },{"../util/root":170,"./Action":145}],147:[function(require,module,exports){
12320 var __extends = (this && this.__extends) || function (d, b) {
12321 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
12322 function __() { this.constructor = d; }
12323 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12325 var Scheduler_1 = require('../Scheduler');
12326 var AsyncScheduler = (function (_super) {
12327 __extends(AsyncScheduler, _super);
12328 function AsyncScheduler() {
12329 _super.apply(this, arguments);
12332 * A flag to indicate whether the Scheduler is currently executing a batch of
12336 this.active = false;
12338 * An internal ID used to track the latest asynchronous task such as those
12339 * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and
12343 this.scheduled = undefined;
12345 AsyncScheduler.prototype.flush = function (action) {
12346 var actions = this.actions;
12348 actions.push(action);
12352 this.active = true;
12354 if (error = action.execute(action.state, action.delay)) {
12357 } while (action = actions.shift()); // exhaust the scheduler queue
12358 this.active = false;
12360 while (action = actions.shift()) {
12361 action.unsubscribe();
12366 return AsyncScheduler;
12367 }(Scheduler_1.Scheduler));
12368 exports.AsyncScheduler = AsyncScheduler;
12370 },{"../Scheduler":32}],148:[function(require,module,exports){
12372 var __extends = (this && this.__extends) || function (d, b) {
12373 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
12374 function __() { this.constructor = d; }
12375 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12377 var AsyncAction_1 = require('./AsyncAction');
12379 * We need this JSDoc comment for affecting ESDoc.
12381 * @extends {Ignored}
12383 var QueueAction = (function (_super) {
12384 __extends(QueueAction, _super);
12385 function QueueAction(scheduler, work) {
12386 _super.call(this, scheduler, work);
12387 this.scheduler = scheduler;
12390 QueueAction.prototype.schedule = function (state, delay) {
12391 if (delay === void 0) { delay = 0; }
12393 return _super.prototype.schedule.call(this, state, delay);
12395 this.delay = delay;
12396 this.state = state;
12397 this.scheduler.flush(this);
12400 QueueAction.prototype.execute = function (state, delay) {
12401 return (delay > 0 || this.closed) ?
12402 _super.prototype.execute.call(this, state, delay) :
12403 this._execute(state, delay);
12405 QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {
12406 if (delay === void 0) { delay = 0; }
12407 // If delay exists and is greater than 0, or if the delay is null (the
12408 // action wasn't rescheduled) but was originally scheduled as an async
12409 // action, then recycle as an async action.
12410 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
12411 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
12413 // Otherwise flush the scheduler starting with this action.
12414 return scheduler.flush(this);
12416 return QueueAction;
12417 }(AsyncAction_1.AsyncAction));
12418 exports.QueueAction = QueueAction;
12420 },{"./AsyncAction":146}],149:[function(require,module,exports){
12422 var __extends = (this && this.__extends) || function (d, b) {
12423 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
12424 function __() { this.constructor = d; }
12425 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12427 var AsyncScheduler_1 = require('./AsyncScheduler');
12428 var QueueScheduler = (function (_super) {
12429 __extends(QueueScheduler, _super);
12430 function QueueScheduler() {
12431 _super.apply(this, arguments);
12433 return QueueScheduler;
12434 }(AsyncScheduler_1.AsyncScheduler));
12435 exports.QueueScheduler = QueueScheduler;
12437 },{"./AsyncScheduler":147}],150:[function(require,module,exports){
12439 var AsyncAction_1 = require('./AsyncAction');
12440 var AsyncScheduler_1 = require('./AsyncScheduler');
12445 * <span class="informal">Schedule task as if you used setTimeout(task, duration)</span>
12447 * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript
12448 * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating
12451 * If you just want to "defer" task, that is to perform it right after currently
12452 * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),
12453 * better choice will be the {@link asap} scheduler.
12455 * @example <caption>Use async scheduler to delay task</caption>
12456 * const task = () => console.log('it works!');
12458 * Rx.Scheduler.async.schedule(task, 2000);
12460 * // After 2 seconds logs:
12464 * @example <caption>Use async scheduler to repeat task in intervals</caption>
12465 * function task(state) {
12466 * console.log(state);
12467 * this.schedule(state + 1, 1000); // `this` references currently executing Action,
12468 * // which we reschedule with new state and delay
12471 * Rx.Scheduler.async.schedule(task, 3000, 0);
12483 exports.async = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction);
12485 },{"./AsyncAction":146,"./AsyncScheduler":147}],151:[function(require,module,exports){
12487 var QueueAction_1 = require('./QueueAction');
12488 var QueueScheduler_1 = require('./QueueScheduler');
12493 * <span class="informal">Put every next task on a queue, instead of executing it immediately</span>
12495 * `queue` scheduler, when used with delay, behaves the same as {@link async} scheduler.
12497 * When used without delay, it schedules given task synchronously - executes it right when
12498 * it is scheduled. However when called recursively, that is when inside the scheduled task,
12499 * another task is scheduled with queue scheduler, instead of executing immediately as well,
12500 * that task will be put on a queue and wait for current one to finish.
12502 * This means that when you execute task with `queue` scheduler, you are sure it will end
12503 * before any other task scheduled with that scheduler will start.
12505 * @examples <caption>Schedule recursively first, then do something</caption>
12507 * Rx.Scheduler.queue.schedule(() => {
12508 * Rx.Scheduler.queue.schedule(() => console.log('second')); // will not happen now, but will be put on a queue
12510 * console.log('first');
12518 * @example <caption>Reschedule itself recursively</caption>
12520 * Rx.Scheduler.queue.schedule(function(state) {
12521 * if (state !== 0) {
12522 * console.log('before', state);
12523 * this.schedule(state - 1); // `this` references currently executing Action,
12524 * // which we reschedule with new state
12525 * console.log('after', state);
12529 * // In scheduler that runs recursively, you would expect:
12537 * // But with queue it logs:
12550 exports.queue = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction);
12552 },{"./QueueAction":148,"./QueueScheduler":149}],152:[function(require,module,exports){
12554 var root_1 = require('../util/root');
12555 function symbolIteratorPonyfill(root) {
12556 var Symbol = root.Symbol;
12557 if (typeof Symbol === 'function') {
12558 if (!Symbol.iterator) {
12559 Symbol.iterator = Symbol('iterator polyfill');
12561 return Symbol.iterator;
12564 // [for Mozilla Gecko 27-35:](https://mzl.la/2ewE1zC)
12565 var Set_1 = root.Set;
12566 if (Set_1 && typeof new Set_1()['@@iterator'] === 'function') {
12567 return '@@iterator';
12569 var Map_1 = root.Map;
12570 // required for compatability with es6-shim
12572 var keys = Object.getOwnPropertyNames(Map_1.prototype);
12573 for (var i = 0; i < keys.length; ++i) {
12575 // according to spec, Map.prototype[@@iterator] and Map.orototype.entries must be equal.
12576 if (key !== 'entries' && key !== 'size' && Map_1.prototype[key] === Map_1.prototype['entries']) {
12581 return '@@iterator';
12584 exports.symbolIteratorPonyfill = symbolIteratorPonyfill;
12585 exports.$$iterator = symbolIteratorPonyfill(root_1.root);
12587 },{"../util/root":170}],153:[function(require,module,exports){
12589 var root_1 = require('../util/root');
12590 function getSymbolObservable(context) {
12592 var Symbol = context.Symbol;
12593 if (typeof Symbol === 'function') {
12594 if (Symbol.observable) {
12595 $$observable = Symbol.observable;
12598 $$observable = Symbol('observable');
12599 Symbol.observable = $$observable;
12603 $$observable = '@@observable';
12605 return $$observable;
12607 exports.getSymbolObservable = getSymbolObservable;
12608 exports.$$observable = getSymbolObservable(root_1.root);
12610 },{"../util/root":170}],154:[function(require,module,exports){
12612 var root_1 = require('../util/root');
12613 var Symbol = root_1.root.Symbol;
12614 exports.$$rxSubscriber = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ?
12615 Symbol.for('rxSubscriber') : '@@rxSubscriber';
12617 },{"../util/root":170}],155:[function(require,module,exports){
12619 var root_1 = require('./root');
12620 var RequestAnimationFrameDefinition = (function () {
12621 function RequestAnimationFrameDefinition(root) {
12622 if (root.requestAnimationFrame) {
12623 this.cancelAnimationFrame = root.cancelAnimationFrame.bind(root);
12624 this.requestAnimationFrame = root.requestAnimationFrame.bind(root);
12626 else if (root.mozRequestAnimationFrame) {
12627 this.cancelAnimationFrame = root.mozCancelAnimationFrame.bind(root);
12628 this.requestAnimationFrame = root.mozRequestAnimationFrame.bind(root);
12630 else if (root.webkitRequestAnimationFrame) {
12631 this.cancelAnimationFrame = root.webkitCancelAnimationFrame.bind(root);
12632 this.requestAnimationFrame = root.webkitRequestAnimationFrame.bind(root);
12634 else if (root.msRequestAnimationFrame) {
12635 this.cancelAnimationFrame = root.msCancelAnimationFrame.bind(root);
12636 this.requestAnimationFrame = root.msRequestAnimationFrame.bind(root);
12638 else if (root.oRequestAnimationFrame) {
12639 this.cancelAnimationFrame = root.oCancelAnimationFrame.bind(root);
12640 this.requestAnimationFrame = root.oRequestAnimationFrame.bind(root);
12643 this.cancelAnimationFrame = root.clearTimeout.bind(root);
12644 this.requestAnimationFrame = function (cb) { return root.setTimeout(cb, 1000 / 60); };
12647 return RequestAnimationFrameDefinition;
12649 exports.RequestAnimationFrameDefinition = RequestAnimationFrameDefinition;
12650 exports.AnimationFrame = new RequestAnimationFrameDefinition(root_1.root);
12652 },{"./root":170}],156:[function(require,module,exports){
12654 var __extends = (this && this.__extends) || function (d, b) {
12655 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
12656 function __() { this.constructor = d; }
12657 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12660 * An error thrown when an element was queried at a certain index of an
12661 * Observable, but no such index or position exists in that sequence.
12663 * @see {@link elementAt}
12664 * @see {@link take}
12665 * @see {@link takeLast}
12667 * @class ArgumentOutOfRangeError
12669 var ArgumentOutOfRangeError = (function (_super) {
12670 __extends(ArgumentOutOfRangeError, _super);
12671 function ArgumentOutOfRangeError() {
12672 var err = _super.call(this, 'argument out of range');
12673 this.name = err.name = 'ArgumentOutOfRangeError';
12674 this.stack = err.stack;
12675 this.message = err.message;
12677 return ArgumentOutOfRangeError;
12679 exports.ArgumentOutOfRangeError = ArgumentOutOfRangeError;
12681 },{}],157:[function(require,module,exports){
12683 var __extends = (this && this.__extends) || function (d, b) {
12684 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
12685 function __() { this.constructor = d; }
12686 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12689 * An error thrown when an Observable or a sequence was queried but has no
12692 * @see {@link first}
12693 * @see {@link last}
12694 * @see {@link single}
12696 * @class EmptyError
12698 var EmptyError = (function (_super) {
12699 __extends(EmptyError, _super);
12700 function EmptyError() {
12701 var err = _super.call(this, 'no elements in sequence');
12702 this.name = err.name = 'EmptyError';
12703 this.stack = err.stack;
12704 this.message = err.message;
12708 exports.EmptyError = EmptyError;
12710 },{}],158:[function(require,module,exports){
12712 var __extends = (this && this.__extends) || function (d, b) {
12713 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
12714 function __() { this.constructor = d; }
12715 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12718 * An error thrown when an action is invalid because the object has been
12721 * @see {@link Subject}
12722 * @see {@link BehaviorSubject}
12724 * @class ObjectUnsubscribedError
12726 var ObjectUnsubscribedError = (function (_super) {
12727 __extends(ObjectUnsubscribedError, _super);
12728 function ObjectUnsubscribedError() {
12729 var err = _super.call(this, 'object unsubscribed');
12730 this.name = err.name = 'ObjectUnsubscribedError';
12731 this.stack = err.stack;
12732 this.message = err.message;
12734 return ObjectUnsubscribedError;
12736 exports.ObjectUnsubscribedError = ObjectUnsubscribedError;
12738 },{}],159:[function(require,module,exports){
12740 var root_1 = require('./root');
12741 function minimalSetImpl() {
12742 // THIS IS NOT a full impl of Set, this is just the minimum
12743 // bits of functionality we need for this library.
12744 return (function () {
12745 function MinimalSet() {
12748 MinimalSet.prototype.add = function (value) {
12749 if (!this.has(value)) {
12750 this._values.push(value);
12753 MinimalSet.prototype.has = function (value) {
12754 return this._values.indexOf(value) !== -1;
12756 Object.defineProperty(MinimalSet.prototype, "size", {
12758 return this._values.length;
12763 MinimalSet.prototype.clear = function () {
12764 this._values.length = 0;
12769 exports.minimalSetImpl = minimalSetImpl;
12770 exports.Set = root_1.root.Set || minimalSetImpl();
12772 },{"./root":170}],160:[function(require,module,exports){
12774 var __extends = (this && this.__extends) || function (d, b) {
12775 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
12776 function __() { this.constructor = d; }
12777 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12780 * An error thrown when one or more errors have occurred during the
12781 * `unsubscribe` of a {@link Subscription}.
12783 var UnsubscriptionError = (function (_super) {
12784 __extends(UnsubscriptionError, _super);
12785 function UnsubscriptionError(errors) {
12787 this.errors = errors;
12788 var err = Error.call(this, errors ?
12789 errors.length + " errors occurred during unsubscription:\n " + errors.map(function (err, i) { return ((i + 1) + ") " + err.toString()); }).join('\n ') : '');
12790 this.name = err.name = 'UnsubscriptionError';
12791 this.stack = err.stack;
12792 this.message = err.message;
12794 return UnsubscriptionError;
12796 exports.UnsubscriptionError = UnsubscriptionError;
12798 },{}],161:[function(require,module,exports){
12800 // typeof any so that it we don't have to cast when comparing a result to the error object
12801 exports.errorObject = { e: {} };
12803 },{}],162:[function(require,module,exports){
12805 exports.isArray = Array.isArray || (function (x) { return x && typeof x.length === 'number'; });
12807 },{}],163:[function(require,module,exports){
12809 exports.isArrayLike = (function (x) { return x && typeof x.length === 'number'; });
12811 },{}],164:[function(require,module,exports){
12813 function isDate(value) {
12814 return value instanceof Date && !isNaN(+value);
12816 exports.isDate = isDate;
12818 },{}],165:[function(require,module,exports){
12820 function isFunction(x) {
12821 return typeof x === 'function';
12823 exports.isFunction = isFunction;
12825 },{}],166:[function(require,module,exports){
12827 var isArray_1 = require('../util/isArray');
12828 function isNumeric(val) {
12829 // parseFloat NaNs numeric-cast false positives (null|true|false|"")
12830 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
12831 // subtraction forces infinities to NaN
12832 // adding 1 corrects loss of precision from parseFloat (#15100)
12833 return !isArray_1.isArray(val) && (val - parseFloat(val) + 1) >= 0;
12835 exports.isNumeric = isNumeric;
12838 },{"../util/isArray":162}],167:[function(require,module,exports){
12840 function isObject(x) {
12841 return x != null && typeof x === 'object';
12843 exports.isObject = isObject;
12845 },{}],168:[function(require,module,exports){
12847 function isPromise(value) {
12848 return value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
12850 exports.isPromise = isPromise;
12852 },{}],169:[function(require,module,exports){
12854 function isScheduler(value) {
12855 return value && typeof value.schedule === 'function';
12857 exports.isScheduler = isScheduler;
12859 },{}],170:[function(require,module,exports){
12860 (function (global){
12863 * window: browser in DOM main thread
12864 * self: browser in WebWorker
12865 * global: Node.js/other
12867 exports.root = (typeof window == 'object' && window.window === window && window
12868 || typeof self == 'object' && self.self === self && self
12869 || typeof global == 'object' && global.global === global && global);
12870 if (!exports.root) {
12871 throw new Error('RxJS could not find any global context (window, self, global)');
12874 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
12876 },{}],171:[function(require,module,exports){
12878 var root_1 = require('./root');
12879 var isArrayLike_1 = require('./isArrayLike');
12880 var isPromise_1 = require('./isPromise');
12881 var isObject_1 = require('./isObject');
12882 var Observable_1 = require('../Observable');
12883 var iterator_1 = require('../symbol/iterator');
12884 var InnerSubscriber_1 = require('../InnerSubscriber');
12885 var observable_1 = require('../symbol/observable');
12886 function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {
12887 var destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex);
12888 if (destination.closed) {
12891 if (result instanceof Observable_1.Observable) {
12892 if (result._isScalar) {
12893 destination.next(result.value);
12894 destination.complete();
12898 return result.subscribe(destination);
12901 else if (isArrayLike_1.isArrayLike(result)) {
12902 for (var i = 0, len = result.length; i < len && !destination.closed; i++) {
12903 destination.next(result[i]);
12905 if (!destination.closed) {
12906 destination.complete();
12909 else if (isPromise_1.isPromise(result)) {
12910 result.then(function (value) {
12911 if (!destination.closed) {
12912 destination.next(value);
12913 destination.complete();
12915 }, function (err) { return destination.error(err); })
12916 .then(null, function (err) {
12917 // Escaping the Promise trap: globally throw unhandled errors
12918 root_1.root.setTimeout(function () { throw err; });
12920 return destination;
12922 else if (result && typeof result[iterator_1.$$iterator] === 'function') {
12923 var iterator = result[iterator_1.$$iterator]();
12925 var item = iterator.next();
12927 destination.complete();
12930 destination.next(item.value);
12931 if (destination.closed) {
12936 else if (result && typeof result[observable_1.$$observable] === 'function') {
12937 var obs = result[observable_1.$$observable]();
12938 if (typeof obs.subscribe !== 'function') {
12939 destination.error(new TypeError('Provided object does not correctly implement Symbol.observable'));
12942 return obs.subscribe(new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex));
12946 var value = isObject_1.isObject(result) ? 'an invalid object' : "'" + result + "'";
12947 var msg = ("You provided " + value + " where a stream was expected.")
12948 + ' You can provide an Observable, Promise, Array, or Iterable.';
12949 destination.error(new TypeError(msg));
12953 exports.subscribeToResult = subscribeToResult;
12955 },{"../InnerSubscriber":26,"../Observable":28,"../symbol/iterator":152,"../symbol/observable":153,"./isArrayLike":163,"./isObject":167,"./isPromise":168,"./root":170}],172:[function(require,module,exports){
12957 var Subscriber_1 = require('../Subscriber');
12958 var rxSubscriber_1 = require('../symbol/rxSubscriber');
12959 var Observer_1 = require('../Observer');
12960 function toSubscriber(nextOrObserver, error, complete) {
12961 if (nextOrObserver) {
12962 if (nextOrObserver instanceof Subscriber_1.Subscriber) {
12963 return nextOrObserver;
12965 if (nextOrObserver[rxSubscriber_1.$$rxSubscriber]) {
12966 return nextOrObserver[rxSubscriber_1.$$rxSubscriber]();
12969 if (!nextOrObserver && !error && !complete) {
12970 return new Subscriber_1.Subscriber(Observer_1.empty);
12972 return new Subscriber_1.Subscriber(nextOrObserver, error, complete);
12974 exports.toSubscriber = toSubscriber;
12976 },{"../Observer":29,"../Subscriber":35,"../symbol/rxSubscriber":154}],173:[function(require,module,exports){
12978 var errorObject_1 = require('./errorObject');
12979 var tryCatchTarget;
12980 function tryCatcher() {
12982 return tryCatchTarget.apply(this, arguments);
12985 errorObject_1.errorObject.e = e;
12986 return errorObject_1.errorObject;
12989 function tryCatch(fn) {
12990 tryCatchTarget = fn;
12993 exports.tryCatch = tryCatch;
12996 },{"./errorObject":161}],174:[function(require,module,exports){
12997 // threejs.org/license
12998 (function(l,oa){"object"===typeof exports&&"undefined"!==typeof module?oa(exports):"function"===typeof define&&define.amd?define(["exports"],oa):oa(l.THREE=l.THREE||{})})(this,function(l){function oa(){}function C(a,b){this.x=a||0;this.y=b||0}function ea(a,b,c,d,e,f,g,h,k,m){Object.defineProperty(this,"id",{value:Oe++});this.uuid=Q.generateUUID();this.name="";this.image=void 0!==a?a:ea.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=void 0!==b?b:ea.DEFAULT_MAPPING;this.wrapS=void 0!==c?c:1001;this.wrapT=
12999 void 0!==d?d:1001;this.magFilter=void 0!==e?e:1006;this.minFilter=void 0!==f?f:1008;this.anisotropy=void 0!==k?k:1;this.format=void 0!==g?g:1023;this.type=void 0!==h?h:1009;this.offset=new C(0,0);this.repeat=new C(1,1);this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this.encoding=void 0!==m?m:3E3;this.version=0;this.onUpdate=null}function ga(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}function Db(a,b,c){this.uuid=Q.generateUUID();this.width=
13000 a;this.height=b;this.scissor=new ga(0,0,a,b);this.scissorTest=!1;this.viewport=new ga(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=1006);this.texture=new ea(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy,c.encoding);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.depthTexture=void 0!==c.depthTexture?c.depthTexture:null}function Eb(a,b,c){Db.call(this,a,b,c);this.activeMipMapLevel=
13001 this.activeCubeFace=0}function da(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._w=void 0!==d?d:1}function q(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}function H(){this.elements=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);0<arguments.length&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}function Za(a,b,c,d,e,f,g,h,k,m){a=void 0!==a?a:[];ea.call(this,a,void 0!==b?b:301,c,d,e,f,g,h,k,m);this.flipY=!1}function Fb(a,b,c){var d=a[0];if(0>=
13002 d||0<d)return a;var e=b*c,f=pe[e];void 0===f&&(f=new Float32Array(e),pe[e]=f);if(0!==b)for(d.toArray(f,0),d=1,e=0;d!==b;++d)e+=c,a[d].toArray(f,e);return f}function qe(a,b){var c=re[b];void 0===c&&(c=new Int32Array(b),re[b]=c);for(var d=0;d!==b;++d)c[d]=a.allocTextureUnit();return c}function Pe(a,b){a.uniform1f(this.addr,b)}function Qe(a,b){a.uniform1i(this.addr,b)}function Re(a,b){void 0===b.x?a.uniform2fv(this.addr,b):a.uniform2f(this.addr,b.x,b.y)}function Se(a,b){void 0!==b.x?a.uniform3f(this.addr,
13003 b.x,b.y,b.z):void 0!==b.r?a.uniform3f(this.addr,b.r,b.g,b.b):a.uniform3fv(this.addr,b)}function Te(a,b){void 0===b.x?a.uniform4fv(this.addr,b):a.uniform4f(this.addr,b.x,b.y,b.z,b.w)}function Ue(a,b){a.uniformMatrix2fv(this.addr,!1,b.elements||b)}function Ve(a,b){a.uniformMatrix3fv(this.addr,!1,b.elements||b)}function We(a,b){a.uniformMatrix4fv(this.addr,!1,b.elements||b)}function Xe(a,b,c){var d=c.allocTextureUnit();a.uniform1i(this.addr,d);c.setTexture2D(b||se,d)}function Ye(a,b,c){var d=c.allocTextureUnit();
13004 a.uniform1i(this.addr,d);c.setTextureCube(b||te,d)}function ue(a,b){a.uniform2iv(this.addr,b)}function ve(a,b){a.uniform3iv(this.addr,b)}function we(a,b){a.uniform4iv(this.addr,b)}function Ze(a){switch(a){case 5126:return Pe;case 35664:return Re;case 35665:return Se;case 35666:return Te;case 35674:return Ue;case 35675:return Ve;case 35676:return We;case 35678:return Xe;case 35680:return Ye;case 5124:case 35670:return Qe;case 35667:case 35671:return ue;case 35668:case 35672:return ve;case 35669:case 35673:return we}}
13005 function $e(a,b){a.uniform1fv(this.addr,b)}function af(a,b){a.uniform1iv(this.addr,b)}function bf(a,b){a.uniform2fv(this.addr,Fb(b,this.size,2))}function cf(a,b){a.uniform3fv(this.addr,Fb(b,this.size,3))}function df(a,b){a.uniform4fv(this.addr,Fb(b,this.size,4))}function ef(a,b){a.uniformMatrix2fv(this.addr,!1,Fb(b,this.size,4))}function ff(a,b){a.uniformMatrix3fv(this.addr,!1,Fb(b,this.size,9))}function gf(a,b){a.uniformMatrix4fv(this.addr,!1,Fb(b,this.size,16))}function hf(a,b,c){var d=b.length,
13006 e=qe(c,d);a.uniform1iv(this.addr,e);for(a=0;a!==d;++a)c.setTexture2D(b[a]||se,e[a])}function jf(a,b,c){var d=b.length,e=qe(c,d);a.uniform1iv(this.addr,e);for(a=0;a!==d;++a)c.setTextureCube(b[a]||te,e[a])}function kf(a){switch(a){case 5126:return $e;case 35664:return bf;case 35665:return cf;case 35666:return df;case 35674:return ef;case 35675:return ff;case 35676:return gf;case 35678:return hf;case 35680:return jf;case 5124:case 35670:return af;case 35667:case 35671:return ue;case 35668:case 35672:return ve;
13007 case 35669:case 35673:return we}}function lf(a,b,c){this.id=a;this.addr=c;this.setValue=Ze(b.type)}function mf(a,b,c){this.id=a;this.addr=c;this.size=b.size;this.setValue=kf(b.type)}function xe(a){this.id=a;this.seq=[];this.map={}}function $a(a,b,c){this.seq=[];this.map={};this.renderer=c;c=a.getProgramParameter(b,a.ACTIVE_UNIFORMS);for(var d=0;d!==c;++d){var e=a.getActiveUniform(b,d),f=a.getUniformLocation(b,e.name),g=this,h=e.name,k=h.length;for(Id.lastIndex=0;;){var m=Id.exec(h),x=Id.lastIndex,
13008 p=m[1],n=m[3];"]"===m[2]&&(p|=0);if(void 0===n||"["===n&&x+2===k){h=g;e=void 0===n?new lf(p,e,f):new mf(p,e,f);h.seq.push(e);h.map[e.id]=e;break}else n=g.map[p],void 0===n&&(n=new xe(p),p=g,g=n,p.seq.push(g),p.map[g.id]=g),g=n}}}function N(a,b,c){return void 0===b&&void 0===c?this.set(a):this.setRGB(a,b,c)}function db(a,b,c,d,e,f,g,h,k,m,x,p){ea.call(this,null,f,g,h,k,m,d,e,x,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:1003;this.minFilter=void 0!==m?m:1003;this.flipY=this.generateMipmaps=
13009 !1;this.unpackAlignment=1}function pc(a,b){this.min=void 0!==a?a:new C(Infinity,Infinity);this.max=void 0!==b?b:new C(-Infinity,-Infinity)}function nf(a,b){var c,d,e,f,g,h,k,m,x,p,n=a.context,r=a.state,w,l,F,t,v,M;this.render=function(z,A,I){if(0!==b.length){z=new q;var E=I.w/I.z,K=.5*I.z,la=.5*I.w,J=16/I.w,ca=new C(J*E,J),Da=new q(1,1,0),eb=new C(1,1),Na=new pc;Na.min.set(I.x,I.y);Na.max.set(I.x+(I.z-16),I.y+(I.w-16));if(void 0===t){var J=new Float32Array([-1,-1,0,0,1,-1,1,0,1,1,1,1,-1,1,0,1]),O=
13010 new Uint16Array([0,1,2,0,2,3]);w=n.createBuffer();l=n.createBuffer();n.bindBuffer(n.ARRAY_BUFFER,w);n.bufferData(n.ARRAY_BUFFER,J,n.STATIC_DRAW);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,l);n.bufferData(n.ELEMENT_ARRAY_BUFFER,O,n.STATIC_DRAW);v=n.createTexture();M=n.createTexture();r.bindTexture(n.TEXTURE_2D,v);n.texImage2D(n.TEXTURE_2D,0,n.RGB,16,16,0,n.RGB,n.UNSIGNED_BYTE,null);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE);
13011 n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST);r.bindTexture(n.TEXTURE_2D,M);n.texImage2D(n.TEXTURE_2D,0,n.RGBA,16,16,0,n.RGBA,n.UNSIGNED_BYTE,null);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST);var J=F={vertexShader:"uniform lowp int renderType;\nuniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform sampler2D occlusionMap;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif ( renderType == 2 ) {\nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\nvVisibility = visibility.r / 9.0;\nvVisibility *= 1.0 - visibility.g / 9.0;\nvVisibility *= visibility.b / 9.0;\nvVisibility *= 1.0 - visibility.a / 9.0;\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",
13012 fragmentShader:"uniform lowp int renderType;\nuniform sampler2D map;\nuniform float opacity;\nuniform vec3 color;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nif ( renderType == 0 ) {\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\n} else if ( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * vVisibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"},O=n.createProgram(),P=n.createShader(n.FRAGMENT_SHADER),
13013 R=n.createShader(n.VERTEX_SHADER),T="precision "+a.getPrecision()+" float;\n";n.shaderSource(P,T+J.fragmentShader);n.shaderSource(R,T+J.vertexShader);n.compileShader(P);n.compileShader(R);n.attachShader(O,P);n.attachShader(O,R);n.linkProgram(O);t=O;x=n.getAttribLocation(t,"position");p=n.getAttribLocation(t,"uv");c=n.getUniformLocation(t,"renderType");d=n.getUniformLocation(t,"map");e=n.getUniformLocation(t,"occlusionMap");f=n.getUniformLocation(t,"opacity");g=n.getUniformLocation(t,"color");h=n.getUniformLocation(t,
13014 "scale");k=n.getUniformLocation(t,"rotation");m=n.getUniformLocation(t,"screenPosition")}n.useProgram(t);r.initAttributes();r.enableAttribute(x);r.enableAttribute(p);r.disableUnusedAttributes();n.uniform1i(e,0);n.uniform1i(d,1);n.bindBuffer(n.ARRAY_BUFFER,w);n.vertexAttribPointer(x,2,n.FLOAT,!1,16,0);n.vertexAttribPointer(p,2,n.FLOAT,!1,16,8);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,l);r.disable(n.CULL_FACE);r.setDepthWrite(!1);O=0;for(P=b.length;O<P;O++)if(J=16/I.w,ca.set(J*E,J),R=b[O],z.set(R.matrixWorld.elements[12],
13015 R.matrixWorld.elements[13],R.matrixWorld.elements[14]),z.applyMatrix4(A.matrixWorldInverse),z.applyProjection(A.projectionMatrix),Da.copy(z),eb.x=I.x+Da.x*K+K-8,eb.y=I.y+Da.y*la+la-8,!0===Na.containsPoint(eb)){r.activeTexture(n.TEXTURE0);r.bindTexture(n.TEXTURE_2D,null);r.activeTexture(n.TEXTURE1);r.bindTexture(n.TEXTURE_2D,v);n.copyTexImage2D(n.TEXTURE_2D,0,n.RGB,eb.x,eb.y,16,16,0);n.uniform1i(c,0);n.uniform2f(h,ca.x,ca.y);n.uniform3f(m,Da.x,Da.y,Da.z);r.disable(n.BLEND);r.enable(n.DEPTH_TEST);n.drawElements(n.TRIANGLES,
13016 6,n.UNSIGNED_SHORT,0);r.activeTexture(n.TEXTURE0);r.bindTexture(n.TEXTURE_2D,M);n.copyTexImage2D(n.TEXTURE_2D,0,n.RGBA,eb.x,eb.y,16,16,0);n.uniform1i(c,1);r.disable(n.DEPTH_TEST);r.activeTexture(n.TEXTURE1);r.bindTexture(n.TEXTURE_2D,v);n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0);R.positionScreen.copy(Da);R.customUpdateCallback?R.customUpdateCallback(R):R.updateLensFlares();n.uniform1i(c,2);r.enable(n.BLEND);for(var T=0,y=R.lensFlares.length;T<y;T++){var V=R.lensFlares[T];.001<V.opacity&&.001<
13017 V.scale&&(Da.x=V.x,Da.y=V.y,Da.z=V.z,J=V.size*V.scale/I.w,ca.x=J*E,ca.y=J,n.uniform3f(m,Da.x,Da.y,Da.z),n.uniform2f(h,ca.x,ca.y),n.uniform1f(k,V.rotation),n.uniform1f(f,V.opacity),n.uniform3f(g,V.color.r,V.color.g,V.color.b),r.setBlending(V.blending,V.blendEquation,V.blendSrc,V.blendDst),a.setTexture2D(V.texture,1),n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0))}}r.enable(n.CULL_FACE);r.enable(n.DEPTH_TEST);r.setDepthWrite(!0);a.resetGLState()}}}function of(a,b){var c,d,e,f,g,h,k,m,x,p,n,r,w,l,
13018 F,t,v;function M(a,b){return a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:a.z!==b.z?b.z-a.z:b.id-a.id}var z=a.context,A=a.state,I,E,K,la,J=new q,ca=new da,Da=new q;this.render=function(q,Na){if(0!==b.length){if(void 0===K){var O=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),P=new Uint16Array([0,1,2,0,2,3]);I=z.createBuffer();E=z.createBuffer();z.bindBuffer(z.ARRAY_BUFFER,I);z.bufferData(z.ARRAY_BUFFER,O,z.STATIC_DRAW);z.bindBuffer(z.ELEMENT_ARRAY_BUFFER,E);z.bufferData(z.ELEMENT_ARRAY_BUFFER,
13019 P,z.STATIC_DRAW);var O=z.createProgram(),P=z.createShader(z.VERTEX_SHADER),R=z.createShader(z.FRAGMENT_SHADER);z.shaderSource(P,["precision "+a.getPrecision()+" float;","uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position * scale;\nvec2 rotatedPosition;\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\nvec4 finalPosition;\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition;\nfinalPosition = projectionMatrix * finalPosition;\ngl_Position = finalPosition;\n}"].join("\n"));
13020 z.shaderSource(R,["precision "+a.getPrecision()+" float;","uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\nvec4 texture = texture2D( map, vUV );\nif ( texture.a < alphaTest ) discard;\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\nif ( fogType > 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n"));
13021 z.compileShader(P);z.compileShader(R);z.attachShader(O,P);z.attachShader(O,R);z.linkProgram(O);K=O;t=z.getAttribLocation(K,"position");v=z.getAttribLocation(K,"uv");c=z.getUniformLocation(K,"uvOffset");d=z.getUniformLocation(K,"uvScale");e=z.getUniformLocation(K,"rotation");f=z.getUniformLocation(K,"scale");g=z.getUniformLocation(K,"color");h=z.getUniformLocation(K,"map");k=z.getUniformLocation(K,"opacity");m=z.getUniformLocation(K,"modelViewMatrix");x=z.getUniformLocation(K,"projectionMatrix");p=
13022 z.getUniformLocation(K,"fogType");n=z.getUniformLocation(K,"fogDensity");r=z.getUniformLocation(K,"fogNear");w=z.getUniformLocation(K,"fogFar");l=z.getUniformLocation(K,"fogColor");F=z.getUniformLocation(K,"alphaTest");O=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");O.width=8;O.height=8;P=O.getContext("2d");P.fillStyle="white";P.fillRect(0,0,8,8);la=new ea(O);la.needsUpdate=!0}z.useProgram(K);A.initAttributes();A.enableAttribute(t);A.enableAttribute(v);A.disableUnusedAttributes();
13023 A.disable(z.CULL_FACE);A.enable(z.BLEND);z.bindBuffer(z.ARRAY_BUFFER,I);z.vertexAttribPointer(t,2,z.FLOAT,!1,16,0);z.vertexAttribPointer(v,2,z.FLOAT,!1,16,8);z.bindBuffer(z.ELEMENT_ARRAY_BUFFER,E);z.uniformMatrix4fv(x,!1,Na.projectionMatrix.elements);A.activeTexture(z.TEXTURE0);z.uniform1i(h,0);P=O=0;(R=q.fog)?(z.uniform3f(l,R.color.r,R.color.g,R.color.b),R.isFog?(z.uniform1f(r,R.near),z.uniform1f(w,R.far),z.uniform1i(p,1),P=O=1):R.isFogExp2&&(z.uniform1f(n,R.density),z.uniform1i(p,2),P=O=2)):(z.uniform1i(p,
13024 0),P=O=0);for(var R=0,T=b.length;R<T;R++){var y=b[R];y.modelViewMatrix.multiplyMatrices(Na.matrixWorldInverse,y.matrixWorld);y.z=-y.modelViewMatrix.elements[14]}b.sort(M);for(var V=[],R=0,T=b.length;R<T;R++){var y=b[R],ra=y.material;!1!==ra.visible&&(z.uniform1f(F,ra.alphaTest),z.uniformMatrix4fv(m,!1,y.modelViewMatrix.elements),y.matrixWorld.decompose(J,ca,Da),V[0]=Da.x,V[1]=Da.y,y=0,q.fog&&ra.fog&&(y=P),O!==y&&(z.uniform1i(p,y),O=y),null!==ra.map?(z.uniform2f(c,ra.map.offset.x,ra.map.offset.y),
13025 z.uniform2f(d,ra.map.repeat.x,ra.map.repeat.y)):(z.uniform2f(c,0,0),z.uniform2f(d,1,1)),z.uniform1f(k,ra.opacity),z.uniform3f(g,ra.color.r,ra.color.g,ra.color.b),z.uniform1f(e,ra.rotation),z.uniform2fv(f,V),A.setBlending(ra.blending,ra.blendEquation,ra.blendSrc,ra.blendDst),A.setDepthTest(ra.depthTest),A.setDepthWrite(ra.depthWrite),ra.map?a.setTexture2D(ra.map,0):a.setTexture2D(la,0),z.drawElements(z.TRIANGLES,6,z.UNSIGNED_SHORT,0))}A.enable(z.CULL_FACE);a.resetGLState()}}}function W(){Object.defineProperty(this,
13026 "id",{value:pf++});this.uuid=Q.generateUUID();this.name="";this.type="Material";this.lights=this.fog=!0;this.blending=1;this.side=0;this.shading=2;this.vertexColors=0;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.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.colorWrite=!0;this.precision=null;this.polygonOffset=
13027 !1;this.alphaTest=this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.premultipliedAlpha=!1;this.overdraw=0;this._needsUpdate=this.visible=!0}function Ia(a){W.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.morphNormals=
13028 this.morphTargets=this.skinning=this.clipping=this.lights=this.fog=!1;this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1};this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=void 0;void 0!==a&&(void 0!==a.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(a))}function ab(a){W.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=
13029 this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.setValues(a)}function ya(a,b){this.min=void 0!==a?a:new q(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new q(-Infinity,-Infinity,-Infinity)}function Fa(a,b){this.center=void 0!==a?a:new q;this.radius=void 0!==b?b:0}function za(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0<arguments.length&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}
13030 function ma(a,b){this.normal=void 0!==a?a:new q(1,0,0);this.constant=void 0!==b?b:0}function qc(a,b,c,d,e,f){this.planes=[void 0!==a?a:new ma,void 0!==b?b:new ma,void 0!==c?c:new ma,void 0!==d?d:new ma,void 0!==e?e:new ma,void 0!==f?f:new ma]}function ye(a,b,c,d){function e(b,c,d,e){var f=b.geometry,g;g=F;var h=b.customDepthMaterial;d&&(g=t,h=b.customDistanceMaterial);h?g=h:(h=!1,c.morphTargets&&(f&&f.isBufferGeometry?h=f.morphAttributes&&f.morphAttributes.position&&0<f.morphAttributes.position.length:
13031 f&&f.isGeometry&&(h=f.morphTargets&&0<f.morphTargets.length)),b=b.isSkinnedMesh&&c.skinning,f=0,h&&(f|=1),b&&(f|=2),g=g[f]);a.localClippingEnabled&&!0===c.clipShadows&&0!==c.clippingPlanes.length&&(f=g.uuid,h=c.uuid,b=v[f],void 0===b&&(b={},v[f]=b),f=b[h],void 0===f&&(f=g.clone(),b[h]=f),g=f);g.visible=c.visible;g.wireframe=c.wireframe;h=c.side;ca.renderSingleSided&&2==h&&(h=0);ca.renderReverseSided&&(0===h?h=1:1===h&&(h=0));g.side=h;g.clipShadows=c.clipShadows;g.clippingPlanes=c.clippingPlanes;g.wireframeLinewidth=
13032 c.wireframeLinewidth;g.linewidth=c.linewidth;d&&void 0!==g.uniforms.lightPos&&g.uniforms.lightPos.value.copy(e);return g}function f(a,b,c){if(!1!==a.visible){0!==(a.layers.mask&b.layers.mask)&&(a.isMesh||a.isLine||a.isPoints)&&a.castShadow&&(!1===a.frustumCulled||!0===k.intersectsObject(a))&&!0===a.material.visible&&(a.modelViewMatrix.multiplyMatrices(c.matrixWorldInverse,a.matrixWorld),l.push(a));a=a.children;for(var d=0,e=a.length;d<e;d++)f(a[d],b,c)}}var g=a.context,h=a.state,k=new qc,m=new H,
13033 x=b.shadows,p=new C,n=new C(d.maxTextureSize,d.maxTextureSize),r=new q,w=new q,l=[],F=Array(4),t=Array(4),v={},M=[new q(1,0,0),new q(-1,0,0),new q(0,0,1),new q(0,0,-1),new q(0,1,0),new q(0,-1,0)],z=[new q(0,1,0),new q(0,1,0),new q(0,1,0),new q(0,1,0),new q(0,0,1),new q(0,0,-1)],A=[new ga,new ga,new ga,new ga,new ga,new ga];b=new ab;b.depthPacking=3201;b.clipping=!0;d=Gb.distanceRGBA;for(var I=Ja.clone(d.uniforms),E=0;4!==E;++E){var K=0!==(E&1),la=0!==(E&2),J=b.clone();J.morphTargets=K;J.skinning=
13034 la;F[E]=J;K=new Ia({defines:{USE_SHADOWMAP:""},uniforms:I,vertexShader:d.vertexShader,fragmentShader:d.fragmentShader,morphTargets:K,skinning:la,clipping:!0});t[E]=K}var ca=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.renderSingleSided=this.renderReverseSided=!0;this.render=function(b,d){if(!1!==ca.enabled&&(!1!==ca.autoUpdate||!1!==ca.needsUpdate)&&0!==x.length){h.buffers.color.setClear(1,1,1,1);h.disable(g.BLEND);h.setDepthTest(!0);h.setScissorTest(!1);for(var v,
13035 q,t=0,F=x.length;t<F;t++){var I=x[t],E=I.shadow;if(void 0===E)console.warn("THREE.WebGLShadowMap:",I,"has no shadow.");else{var K=E.camera;p.copy(E.mapSize);p.min(n);if(I&&I.isPointLight){v=6;q=!0;var J=p.x,la=p.y;A[0].set(2*J,la,J,la);A[1].set(0,la,J,la);A[2].set(3*J,la,J,la);A[3].set(J,la,J,la);A[4].set(3*J,0,J,la);A[5].set(J,0,J,la);p.x*=4;p.y*=2}else v=1,q=!1;null===E.map&&(E.map=new Db(p.x,p.y,{minFilter:1003,magFilter:1003,format:1023}),K.updateProjectionMatrix());E.isSpotLightShadow&&E.update(I);
13036 E&&E.isRectAreaLightShadow&&E.update(I);J=E.map;E=E.matrix;w.setFromMatrixPosition(I.matrixWorld);K.position.copy(w);a.setRenderTarget(J);a.clear();for(J=0;J<v;J++){q?(r.copy(K.position),r.add(M[J]),K.up.copy(z[J]),K.lookAt(r),h.viewport(A[J])):(r.setFromMatrixPosition(I.target.matrixWorld),K.lookAt(r));K.updateMatrixWorld();K.matrixWorldInverse.getInverse(K.matrixWorld);E.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);E.multiply(K.projectionMatrix);E.multiply(K.matrixWorldInverse);m.multiplyMatrices(K.projectionMatrix,
13037 K.matrixWorldInverse);k.setFromMatrix(m);l.length=0;f(b,d,K);for(var la=0,y=l.length;la<y;la++){var C=l[la],Jd=c.update(C),Ta=C.material;if(Ta&&Ta.isMultiMaterial)for(var G=Jd.groups,Ta=Ta.materials,D=0,Ga=G.length;D<Ga;D++){var N=G[D],H=Ta[N.materialIndex];!0===H.visible&&(H=e(C,H,q,w),a.renderBufferDirect(K,null,Jd,H,C,N))}else H=e(C,Ta,q,w),a.renderBufferDirect(K,null,Jd,H,C,null)}}}}v=a.getClearColor();q=a.getClearAlpha();a.setClearColor(v,q);ca.needsUpdate=!1}}}function bb(a,b){this.origin=void 0!==
13038 a?a:new q;this.direction=void 0!==b?b:new q}function cb(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||cb.DefaultOrder}function gd(){this.mask=1}function G(){Object.defineProperty(this,"id",{value:qf++});this.uuid=Q.generateUUID();this.name="";this.type="Object3D";this.parent=null;this.children=[];this.up=G.DefaultUp.clone();var a=new q,b=new cb,c=new da,d=new q(1,1,1);b.onChange(function(){c.setFromEuler(b,!1)});c.onChange(function(){b.setFromQuaternion(c,void 0,!1)});Object.defineProperties(this,
13039 {position:{enumerable:!0,value:a},rotation:{enumerable:!0,value:b},quaternion:{enumerable:!0,value:c},scale:{enumerable:!0,value:d},modelViewMatrix:{value:new H},normalMatrix:{value:new za}});this.matrix=new H;this.matrixWorld=new H;this.matrixAutoUpdate=G.DefaultMatrixAutoUpdate;this.matrixWorldNeedsUpdate=!1;this.layers=new gd;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this.renderOrder=0;this.userData={};this.onBeforeRender=function(){};this.onAfterRender=function(){}}
13040 function gb(a,b){this.start=void 0!==a?a:new q;this.end=void 0!==b?b:new q}function Aa(a,b,c){this.a=void 0!==a?a:new q;this.b=void 0!==b?b:new q;this.c=void 0!==c?c:new q}function ha(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d&&d.isVector3?d:new q;this.vertexNormals=Array.isArray(d)?d:[];this.color=e&&e.isColor?e:new N;this.vertexColors=Array.isArray(e)?e:[];this.materialIndex=void 0!==f?f:0}function Ka(a){W.call(this);this.type="MeshBasicMaterial";this.color=new N(16777215);this.lightMap=
13041 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.lights=this.morphTargets=this.skinning=!1;this.setValues(a)}function y(a,b,c){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.uuid=Q.generateUUID();this.array=a;
13042 this.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.onUploadCallback=function(){};this.version=0}function rc(a,b){y.call(this,new Int8Array(a),b)}function sc(a,b){y.call(this,new Uint8Array(a),b)}function tc(a,b){y.call(this,new Uint8ClampedArray(a),b)}function uc(a,b){y.call(this,new Int16Array(a),b)}function Ra(a,b){y.call(this,new Uint16Array(a),b)}function vc(a,b){y.call(this,new Int32Array(a),b)}function Ua(a,b){y.call(this,
13043 new Uint32Array(a),b)}function X(a,b){y.call(this,new Float32Array(a),b)}function wc(a,b){y.call(this,new Float64Array(a),b)}function ze(){this.indices=[];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 S(){Object.defineProperty(this,"id",
13044 {value:Kd++});this.uuid=Q.generateUUID();this.name="";this.type="Geometry";this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=this.lineDistancesNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.uvsNeedUpdate=this.verticesNeedUpdate=this.elementsNeedUpdate=!1}function D(){Object.defineProperty(this,"id",
13045 {value:Kd++});this.uuid=Q.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}}function Ba(a,b){G.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new D;this.material=void 0!==b?b:new Ka({color:16777215*Math.random()});this.drawMode=0;this.updateMorphTargets()}function hb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,m,y,C){var Na=f/m,O=g/y,
13046 P=f/2,R=g/2,T=k/2;g=m+1;for(var G=y+1,V=f=0,D=new q,L=0;L<G;L++)for(var N=L*O-R,H=0;H<g;H++)D[a]=(H*Na-P)*d,D[b]=N*e,D[c]=T,p[w]=D.x,p[w+1]=D.y,p[w+2]=D.z,D[a]=0,D[b]=0,D[c]=0<k?1:-1,n[w]=D.x,n[w+1]=D.y,n[w+2]=D.z,r[l]=H/m,r[l+1]=1-L/y,w+=3,l+=2,f+=1;for(L=0;L<y;L++)for(H=0;H<m;H++)a=t+H+g*(L+1),b=t+(H+1)+g*(L+1),c=t+(H+1)+g*L,x[F]=t+H+g*L,x[F+1]=a,x[F+2]=c,x[F+3]=a,x[F+4]=b,x[F+5]=c,F+=6,V+=6;h.addGroup(v,V,C);v+=V;t+=f}D.call(this);this.type="BoxBufferGeometry";this.parameters={width:a,height:b,
13047 depth:c,widthSegments:d,heightSegments:e,depthSegments:f};var h=this;d=Math.floor(d)||1;e=Math.floor(e)||1;f=Math.floor(f)||1;var k=function(a,b,c){return a=0+(a+1)*(b+1)*2+(a+1)*(c+1)*2+(c+1)*(b+1)*2}(d,e,f),m=function(a,b,c){a=0+a*b*2+a*c*2+c*b*2;return 6*a}(d,e,f),x=new (65535<m?Uint32Array:Uint16Array)(m),p=new Float32Array(3*k),n=new Float32Array(3*k),r=new Float32Array(2*k),w=0,l=0,F=0,t=0,v=0;g("z","y","x",-1,-1,c,b,a,f,e,0);g("z","y","x",1,-1,c,b,-a,f,e,1);g("x","z","y",1,1,a,c,b,d,f,2);g("x",
13048 "z","y",1,-1,a,c,-b,d,f,3);g("x","y","z",1,-1,a,b,c,d,e,4);g("x","y","z",-1,-1,a,b,-c,d,e,5);this.setIndex(new y(x,1));this.addAttribute("position",new y(p,3));this.addAttribute("normal",new y(n,3));this.addAttribute("uv",new y(r,2))}function ib(a,b,c,d){D.call(this);this.type="PlaneBufferGeometry";this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};var e=a/2,f=b/2;c=Math.floor(c)||1;d=Math.floor(d)||1;var g=c+1,h=d+1,k=a/c,m=b/d;b=new Float32Array(g*h*3);a=new Float32Array(g*h*3);
13049 for(var x=new Float32Array(g*h*2),p=0,n=0,r=0;r<h;r++)for(var w=r*m-f,l=0;l<g;l++)b[p]=l*k-e,b[p+1]=-w,a[p+2]=1,x[n]=l/c,x[n+1]=1-r/d,p+=3,n+=2;p=0;e=new (65535<b.length/3?Uint32Array:Uint16Array)(c*d*6);for(r=0;r<d;r++)for(l=0;l<c;l++)f=l+g*(r+1),h=l+1+g*(r+1),k=l+1+g*r,e[p]=l+g*r,e[p+1]=f,e[p+2]=k,e[p+3]=f,e[p+4]=h,e[p+5]=k,p+=6;this.setIndex(new y(e,1));this.addAttribute("position",new y(b,3));this.addAttribute("normal",new y(a,3));this.addAttribute("uv",new y(x,2))}function sa(){G.call(this);
13050 this.type="Camera";this.matrixWorldInverse=new H;this.projectionMatrix=new H}function Ha(a,b,c,d){sa.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 Hb(a,b,c,d,e,f){sa.call(this);this.type="OrthographicCamera";this.zoom=1;this.view=null;this.left=a;this.right=b;this.top=c;this.bottom=d;this.near=
13051 void 0!==e?e:.1;this.far=void 0!==f?f:2E3;this.updateProjectionMatrix()}function rf(a,b,c){var d,e,f;return{setMode:function(a){d=a},setIndex:function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):c.array instanceof Uint16Array?(e=a.UNSIGNED_SHORT,f=2):(e=a.UNSIGNED_BYTE,f=1)},render:function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)},renderInstances:function(g,h,k){var m=b.get("ANGLE_instanced_arrays");null===
13052 m?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(m.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}}}function sf(a,b,c){var d;return{setMode:function(a){d=a},render:function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)},renderInstances:function(e){var f=b.get("ANGLE_instanced_arrays");
13053 if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,g=g.isInterleavedBufferAttribute?g.data.count:g.count;f.drawArraysInstancedANGLE(d,0,g,e.maxInstancedCount);c.calls++;c.vertices+=g*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*g/3)}}}}function tf(){var a={};return{get:function(b){if(void 0!==a[b.id])return a[b.id];var c;switch(b.type){case "DirectionalLight":c=
13054 {direction:new q,color:new N,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new C};break;case "SpotLight":c={position:new q,direction:new q,color:new N,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new C};break;case "PointLight":c={position:new q,color:new N,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new C};break;case "HemisphereLight":c={direction:new q,skyColor:new N,groundColor:new N};break;case "RectAreaLight":c=
13055 {color:new N,position:new q,halfWidth:new q,halfHeight:new q}}return a[b.id]=c}}}function uf(a){a=a.split("\n");for(var b=0;b<a.length;b++)a[b]=b+1+": "+a[b];return a.join("\n")}function Ae(a,b,c){var d=a.createShader(b);a.shaderSource(d,c);a.compileShader(d);!1===a.getShaderParameter(d,a.COMPILE_STATUS)&&console.error("THREE.WebGLShader: Shader couldn't compile.");""!==a.getShaderInfoLog(d)&&console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",b===a.VERTEX_SHADER?"vertex":"fragment",a.getShaderInfoLog(d),
13056 uf(c));return d}function Be(a){switch(a){case 3E3:return["Linear","( value )"];case 3001:return["sRGB","( value )"];case 3002:return["RGBE","( value )"];case 3004:return["RGBM","( value, 7.0 )"];case 3005:return["RGBM","( value, 16.0 )"];case 3006:return["RGBD","( value, 256.0 )"];case 3007:return["Gamma","( value, float( GAMMA_FACTOR ) )"];default:throw Error("unsupported encoding: "+a);}}function Ld(a,b){var c=Be(b);return"vec4 "+a+"( vec4 value ) { return "+c[0]+"ToLinear"+c[1]+"; }"}function vf(a,
13057 b){var c=Be(b);return"vec4 "+a+"( vec4 value ) { return LinearTo"+c[0]+c[1]+"; }"}function wf(a,b){var c;switch(b){case 1:c="Linear";break;case 2:c="Reinhard";break;case 3:c="Uncharted2";break;case 4:c="OptimizedCineon";break;default:throw Error("unsupported toneMapping: "+b);}return"vec3 "+a+"( vec3 color ) { return "+c+"ToneMapping( color ); }"}function xf(a,b,c){a=a||{};return[a.derivatives||b.envMapCubeUV||b.bumpMap||b.normalMap||b.flatShading?"#extension GL_OES_standard_derivatives : enable":
13058 "",(a.fragDepth||b.logarithmicDepthBuffer)&&c.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"",a.drawBuffers&&c.get("WEBGL_draw_buffers")?"#extension GL_EXT_draw_buffers : require":"",(a.shaderTextureLOD||b.envMap)&&c.get("EXT_shader_texture_lod")?"#extension GL_EXT_shader_texture_lod : enable":""].filter(xc).join("\n")}function yf(a){var b=[],c;for(c in a){var d=a[c];!1!==d&&b.push("#define "+c+" "+d)}return b.join("\n")}function xc(a){return""!==a}function Ce(a,b){return a.replace(/NUM_DIR_LIGHTS/g,
13059 b.numDirLights).replace(/NUM_SPOT_LIGHTS/g,b.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,b.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,b.numPointLights).replace(/NUM_HEMI_LIGHTS/g,b.numHemiLights)}function Md(a){return a.replace(/#include +<([\w\d.]+)>/g,function(a,c){var d=Z[c];if(void 0===d)throw Error("Can not resolve #include <"+c+">");return Md(d)})}function De(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,c,d,e){a="";for(c=parseInt(c);c<
13060 parseInt(d);c++)a+=e.replace(/\[ i \]/g,"[ "+c+" ]");return a})}function zf(a,b,c,d){var e=a.context,f=c.extensions,g=c.defines,h=c.__webglShader.vertexShader,k=c.__webglShader.fragmentShader,m="SHADOWMAP_TYPE_BASIC";1===d.shadowMapType?m="SHADOWMAP_TYPE_PCF":2===d.shadowMapType&&(m="SHADOWMAP_TYPE_PCF_SOFT");var x="ENVMAP_TYPE_CUBE",p="ENVMAP_MODE_REFLECTION",n="ENVMAP_BLENDING_MULTIPLY";if(d.envMap){switch(c.envMap.mapping){case 301:case 302:x="ENVMAP_TYPE_CUBE";break;case 306:case 307:x="ENVMAP_TYPE_CUBE_UV";
13061 break;case 303:case 304:x="ENVMAP_TYPE_EQUIREC";break;case 305:x="ENVMAP_TYPE_SPHERE"}switch(c.envMap.mapping){case 302:case 304:p="ENVMAP_MODE_REFRACTION"}switch(c.combine){case 0:n="ENVMAP_BLENDING_MULTIPLY";break;case 1:n="ENVMAP_BLENDING_MIX";break;case 2:n="ENVMAP_BLENDING_ADD"}}var r=0<a.gammaFactor?a.gammaFactor:1,f=xf(f,d,a.extensions),l=yf(g),u=e.createProgram();c.isRawShaderMaterial?(g=[l,"\n"].filter(xc).join("\n"),m=[f,l,"\n"].filter(xc).join("\n")):(g=["precision "+d.precision+" float;",
13062 "precision "+d.precision+" int;","#define SHADER_NAME "+c.__webglShader.name,l,d.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+r,"#define MAX_BONES "+d.maxBones,d.map?"#define USE_MAP":"",d.envMap?"#define USE_ENVMAP":"",d.envMap?"#define "+p:"",d.lightMap?"#define USE_LIGHTMAP":"",d.aoMap?"#define USE_AOMAP":"",d.emissiveMap?"#define USE_EMISSIVEMAP":"",d.bumpMap?"#define USE_BUMPMAP":"",d.normalMap?"#define USE_NORMALMAP":"",d.displacementMap&&d.supportsVertexTextures?
13063 "#define USE_DISPLACEMENTMAP":"",d.specularMap?"#define USE_SPECULARMAP":"",d.roughnessMap?"#define USE_ROUGHNESSMAP":"",d.metalnessMap?"#define USE_METALNESSMAP":"",d.alphaMap?"#define USE_ALPHAMAP":"",d.vertexColors?"#define USE_COLOR":"",d.flatShading?"#define FLAT_SHADED":"",d.skinning?"#define USE_SKINNING":"",d.useVertexTexture?"#define BONE_TEXTURE":"",d.morphTargets?"#define USE_MORPHTARGETS":"",d.morphNormals&&!1===d.flatShading?"#define USE_MORPHNORMALS":"",d.doubleSided?"#define DOUBLE_SIDED":
13064 "",d.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+d.numClippingPlanes,d.shadowMapEnabled?"#define USE_SHADOWMAP":"",d.shadowMapEnabled?"#define "+m:"",d.sizeAttenuation?"#define USE_SIZEATTENUATION":"",d.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",d.logarithmicDepthBuffer&&a.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;",
13065 "uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;",
13066 "\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(xc).join("\n"),m=[f,"precision "+d.precision+" float;","precision "+d.precision+" int;","#define SHADER_NAME "+c.__webglShader.name,l,d.alphaTest?"#define ALPHATEST "+d.alphaTest:"","#define GAMMA_FACTOR "+r,d.useFog&&d.fog?"#define USE_FOG":"",d.useFog&&d.fogExp?"#define FOG_EXP2":
13067 "",d.map?"#define USE_MAP":"",d.envMap?"#define USE_ENVMAP":"",d.envMap?"#define "+x:"",d.envMap?"#define "+p:"",d.envMap?"#define "+n:"",d.lightMap?"#define USE_LIGHTMAP":"",d.aoMap?"#define USE_AOMAP":"",d.emissiveMap?"#define USE_EMISSIVEMAP":"",d.bumpMap?"#define USE_BUMPMAP":"",d.normalMap?"#define USE_NORMALMAP":"",d.specularMap?"#define USE_SPECULARMAP":"",d.roughnessMap?"#define USE_ROUGHNESSMAP":"",d.metalnessMap?"#define USE_METALNESSMAP":"",d.alphaMap?"#define USE_ALPHAMAP":"",d.vertexColors?
13068 "#define USE_COLOR":"",d.gradientMap?"#define USE_GRADIENTMAP":"",d.flatShading?"#define FLAT_SHADED":"",d.doubleSided?"#define DOUBLE_SIDED":"",d.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+d.numClippingPlanes,"#define UNION_CLIPPING_PLANES "+(d.numClippingPlanes-d.numClipIntersection),d.shadowMapEnabled?"#define USE_SHADOWMAP":"",d.shadowMapEnabled?"#define "+m:"",d.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",d.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":
13069 "",d.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",d.logarithmicDepthBuffer&&a.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"",d.envMap&&a.extensions.get("EXT_shader_texture_lod")?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",0!==d.toneMapping?"#define TONE_MAPPING":"",0!==d.toneMapping?Z.tonemapping_pars_fragment:"",0!==d.toneMapping?wf("toneMapping",d.toneMapping):"",d.outputEncoding||d.mapEncoding||d.envMapEncoding||d.emissiveMapEncoding?
13070 Z.encodings_pars_fragment:"",d.mapEncoding?Ld("mapTexelToLinear",d.mapEncoding):"",d.envMapEncoding?Ld("envMapTexelToLinear",d.envMapEncoding):"",d.emissiveMapEncoding?Ld("emissiveMapTexelToLinear",d.emissiveMapEncoding):"",d.outputEncoding?vf("linearToOutputTexel",d.outputEncoding):"",d.depthPacking?"#define DEPTH_PACKING "+c.depthPacking:"","\n"].filter(xc).join("\n"));h=Md(h,d);h=Ce(h,d);k=Md(k,d);k=Ce(k,d);c.isShaderMaterial||(h=De(h),k=De(k));k=m+k;h=Ae(e,e.VERTEX_SHADER,g+h);k=Ae(e,e.FRAGMENT_SHADER,
13071 k);e.attachShader(u,h);e.attachShader(u,k);void 0!==c.index0AttributeName?e.bindAttribLocation(u,0,c.index0AttributeName):!0===d.morphTargets&&e.bindAttribLocation(u,0,"position");e.linkProgram(u);d=e.getProgramInfoLog(u);x=e.getShaderInfoLog(h);p=e.getShaderInfoLog(k);r=n=!0;if(!1===e.getProgramParameter(u,e.LINK_STATUS))n=!1,console.error("THREE.WebGLProgram: shader error: ",e.getError(),"gl.VALIDATE_STATUS",e.getProgramParameter(u,e.VALIDATE_STATUS),"gl.getProgramInfoLog",d,x,p);else if(""!==d)console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",
13072 d);else if(""===x||""===p)r=!1;r&&(this.diagnostics={runnable:n,material:c,programLog:d,vertexShader:{log:x,prefix:g},fragmentShader:{log:p,prefix:m}});e.deleteShader(h);e.deleteShader(k);var q;this.getUniforms=function(){void 0===q&&(q=new $a(e,u,a));return q};var t;this.getAttributes=function(){if(void 0===t){for(var a={},b=e.getProgramParameter(u,e.ACTIVE_ATTRIBUTES),c=0;c<b;c++){var d=e.getActiveAttrib(u,c).name;a[d]=e.getAttribLocation(u,d)}t=a}return t};this.destroy=function(){e.deleteProgram(u);
13073 this.program=void 0};Object.defineProperties(this,{uniforms:{get:function(){console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms().");return this.getUniforms()}},attributes:{get:function(){console.warn("THREE.WebGLProgram: .attributes is now .getAttributes().");return this.getAttributes()}}});this.id=Af++;this.code=b;this.usedTimes=1;this.program=u;this.vertexShader=h;this.fragmentShader=k;return this}function Bf(a,b){function c(a,b){var c;a?a.isTexture?c=a.encoding:a.isWebGLRenderTarget&&
13074 (console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),c=a.texture.encoding):c=3E3;3E3===c&&b&&(c=3007);return c}var d=[],e={MeshDepthMaterial:"depth",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"phong",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points"},
13075 f="precision supportsVertexTextures map mapEncoding envMap envMapMode envMapEncoding lightMap aoMap emissiveMap emissiveMapEncoding bumpMap normalMap displacementMap specularMap roughnessMap metalnessMap gradientMap alphaMap combine vertexColors fog useFog fogExp flatShading sizeAttenuation logarithmicDepthBuffer skinning maxBones useVertexTexture morphTargets morphNormals maxMorphTargets maxMorphNormals premultipliedAlpha numDirLights numPointLights numSpotLights numHemiLights numRectAreaLights shadowMapEnabled shadowMapType toneMapping physicallyCorrectLights alphaTest doubleSided flipSided numClippingPlanes numClipIntersection depthPacking".split(" ");
13076 this.getParameters=function(d,f,k,m,x,p){var n=e[d.type],r;b.floatVertexTextures&&p&&p.skeleton&&p.skeleton.useVertexTexture?r=1024:(r=Math.floor((b.maxVertexUniforms-20)/4),void 0!==p&&p&&p.isSkinnedMesh&&(r=Math.min(p.skeleton.bones.length,r),r<p.skeleton.bones.length&&console.warn("WebGLRenderer: too many bones - "+p.skeleton.bones.length+", this GPU supports just "+r+" (try OpenGL instead of ANGLE)")));var l=a.getPrecision();null!==d.precision&&(l=b.getMaxPrecision(d.precision),l!==d.precision&&
13077 console.warn("THREE.WebGLProgram.getParameters:",d.precision,"not supported, using",l,"instead."));var u=a.getCurrentRenderTarget();return{shaderID:n,precision:l,supportsVertexTextures:b.vertexTextures,outputEncoding:c(u?u.texture:null,a.gammaOutput),map:!!d.map,mapEncoding:c(d.map,a.gammaInput),envMap:!!d.envMap,envMapMode:d.envMap&&d.envMap.mapping,envMapEncoding:c(d.envMap,a.gammaInput),envMapCubeUV:!!d.envMap&&(306===d.envMap.mapping||307===d.envMap.mapping),lightMap:!!d.lightMap,aoMap:!!d.aoMap,
13078 emissiveMap:!!d.emissiveMap,emissiveMapEncoding:c(d.emissiveMap,a.gammaInput),bumpMap:!!d.bumpMap,normalMap:!!d.normalMap,displacementMap:!!d.displacementMap,roughnessMap:!!d.roughnessMap,metalnessMap:!!d.metalnessMap,specularMap:!!d.specularMap,alphaMap:!!d.alphaMap,gradientMap:!!d.gradientMap,combine:d.combine,vertexColors:d.vertexColors,fog:!!k,useFog:d.fog,fogExp:k&&k.isFogExp2,flatShading:1===d.shading,sizeAttenuation:d.sizeAttenuation,logarithmicDepthBuffer:b.logarithmicDepthBuffer,skinning:d.skinning,
13079 maxBones:r,useVertexTexture:b.floatVertexTextures&&p&&p.skeleton&&p.skeleton.useVertexTexture,morphTargets:d.morphTargets,morphNormals:d.morphNormals,maxMorphTargets:a.maxMorphTargets,maxMorphNormals:a.maxMorphNormals,numDirLights:f.directional.length,numPointLights:f.point.length,numSpotLights:f.spot.length,numRectAreaLights:f.rectArea.length,numHemiLights:f.hemi.length,numClippingPlanes:m,numClipIntersection:x,shadowMapEnabled:a.shadowMap.enabled&&p.receiveShadow&&0<f.shadows.length,shadowMapType:a.shadowMap.type,
13080 toneMapping:a.toneMapping,physicallyCorrectLights:a.physicallyCorrectLights,premultipliedAlpha:d.premultipliedAlpha,alphaTest:d.alphaTest,doubleSided:2===d.side,flipSided:1===d.side,depthPacking:void 0!==d.depthPacking?d.depthPacking:!1}};this.getProgramCode=function(a,b){var c=[];b.shaderID?c.push(b.shaderID):(c.push(a.fragmentShader),c.push(a.vertexShader));if(void 0!==a.defines)for(var d in a.defines)c.push(d),c.push(a.defines[d]);for(d=0;d<f.length;d++)c.push(b[f[d]]);return c.join()};this.acquireProgram=
13081 function(b,c,e){for(var f,x=0,p=d.length;x<p;x++){var n=d[x];if(n.code===e){f=n;++f.usedTimes;break}}void 0===f&&(f=new zf(a,e,b,c),d.push(f));return f};this.releaseProgram=function(a){if(0===--a.usedTimes){var b=d.indexOf(a);d[b]=d[d.length-1];d.pop();a.destroy()}};this.programs=d}function Cf(a,b,c){function d(a){var h=a.target;a=f[h.id];null!==a.index&&e(a.index);var k=a.attributes,m;for(m in k)e(k[m]);h.removeEventListener("dispose",d);delete f[h.id];m=b.get(h);m.wireframe&&e(m.wireframe);b["delete"](h);
13082 h=b.get(a);h.wireframe&&e(h.wireframe);b["delete"](a);c.memory.geometries--}function e(c){var d;d=c.isInterleavedBufferAttribute?b.get(c.data).__webglBuffer:b.get(c).__webglBuffer;void 0!==d&&(a.deleteBuffer(d),c.isInterleavedBufferAttribute?b["delete"](c.data):b["delete"](c))}var f={};return{get:function(a){var b=a.geometry;if(void 0!==f[b.id])return f[b.id];b.addEventListener("dispose",d);var e;b.isBufferGeometry?e=b:b.isGeometry&&(void 0===b._bufferGeometry&&(b._bufferGeometry=(new D).setFromObject(a)),
13083 e=b._bufferGeometry);f[b.id]=e;c.memory.geometries++;return e}}}function Df(a,b,c){function d(c,d){var e=c.isInterleavedBufferAttribute?c.data:c,k=b.get(e);if(void 0===k.__webglBuffer){k.__webglBuffer=a.createBuffer();a.bindBuffer(d,k.__webglBuffer);a.bufferData(d,e.array,e.dynamic?a.DYNAMIC_DRAW:a.STATIC_DRAW);var m=a.FLOAT,x=e.array;x instanceof Float32Array?m=a.FLOAT:x instanceof Float64Array?console.warn("Unsupported data buffer format: Float64Array"):x instanceof Uint16Array?m=a.UNSIGNED_SHORT:
13084 x instanceof Int16Array?m=a.SHORT:x instanceof Uint32Array?m=a.UNSIGNED_INT:x instanceof Int32Array?m=a.INT:x instanceof Int8Array?m=a.BYTE:x instanceof Uint8Array&&(m=a.UNSIGNED_BYTE);k.bytesPerElement=x.BYTES_PER_ELEMENT;k.type=m;k.version=e.version;e.onUploadCallback()}else k.version!==e.version&&(a.bindBuffer(d,k.__webglBuffer),!1===e.dynamic?a.bufferData(d,e.array,a.STATIC_DRAW):-1===e.updateRange.count?a.bufferSubData(d,0,e.array):0===e.updateRange.count?console.error("THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually."):
13085 (a.bufferSubData(d,e.updateRange.offset*e.array.BYTES_PER_ELEMENT,e.array.subarray(e.updateRange.offset,e.updateRange.offset+e.updateRange.count)),e.updateRange.count=0),k.version=e.version)}var e=new Cf(a,b,c);return{getAttributeBuffer:function(a){return a.isInterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer},getAttributeProperties:function(a){return a.isInterleavedBufferAttribute?b.get(a.data):b.get(a)},getWireframeAttribute:function(c){var e=b.get(c);if(void 0!==e.wireframe)return e.wireframe;
13086 var h=[],k=c.index,m=c.attributes;c=m.position;if(null!==k)for(var k=k.array,m=0,x=k.length;m<x;m+=3){var p=k[m+0],n=k[m+1],r=k[m+2];h.push(p,n,n,r,r,p)}else for(k=m.position.array,m=0,x=k.length/3-1;m<x;m+=3)p=m+0,n=m+1,r=m+2,h.push(p,n,n,r,r,p);h=new y(new (65535<c.count?Uint32Array:Uint16Array)(h),1);d(h,a.ELEMENT_ARRAY_BUFFER);return e.wireframe=h},update:function(b){var c=e.get(b);b.geometry.isGeometry&&c.updateFromObject(b);b=c.index;var h=c.attributes;null!==b&&d(b,a.ELEMENT_ARRAY_BUFFER);
13087 for(var k in h)d(h[k],a.ARRAY_BUFFER);b=c.morphAttributes;for(k in b)for(var h=b[k],m=0,x=h.length;m<x;m++)d(h[m],a.ARRAY_BUFFER);return c}}}function Ef(a,b,c,d,e,f,g){function h(a,b){if(a.width>b||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+
13088 a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function k(a){return Q.isPowerOfTwo(a.width)&&Q.isPowerOfTwo(a.height)}function m(b){return 1003===b||1004===b||1005===b?a.NEAREST:a.LINEAR}function x(b){b=b.target;b.removeEventListener("dispose",x);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["delete"](b)}q.textures--}function p(b){b=b.target;
13089 b.removeEventListener("dispose",p);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["delete"](b.texture);d["delete"](b)}q.textures--}function n(b,
13090 g){var m=d.get(b);if(0<b.version&&m.__version!==b.version){var n=b.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",b);else if(!1===n.complete)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",b);else{void 0===m.__webglInit&&(m.__webglInit=!0,b.addEventListener("dispose",x),m.__webglTexture=a.createTexture(),q.textures++);c.activeTexture(a.TEXTURE0+g);c.bindTexture(a.TEXTURE_2D,m.__webglTexture);a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,
13091 b.flipY);a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,b.premultiplyAlpha);a.pixelStorei(a.UNPACK_ALIGNMENT,b.unpackAlignment);var p=h(b.image,e.maxTextureSize);if((1001!==b.wrapS||1001!==b.wrapT||1003!==b.minFilter&&1006!==b.minFilter)&&!1===k(p))if(n=p,n instanceof HTMLImageElement||n instanceof HTMLCanvasElement){var l=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");l.width=Q.nearestPowerOfTwo(n.width);l.height=Q.nearestPowerOfTwo(n.height);l.getContext("2d").drawImage(n,0,0,
13092 l.width,l.height);console.warn("THREE.WebGLRenderer: image is not power of two ("+n.width+"x"+n.height+"). Resized to "+l.width+"x"+l.height,n);p=l}else p=n;var n=k(p),l=f(b.format),w=f(b.type);r(a.TEXTURE_2D,b,n);var u=b.mipmaps;if(b.isDepthTexture){u=a.DEPTH_COMPONENT;if(1015===b.type){if(!t)throw Error("Float Depth Texture only supported in WebGL2.0");u=a.DEPTH_COMPONENT32F}else t&&(u=a.DEPTH_COMPONENT16);1026===b.format&&u===a.DEPTH_COMPONENT&&1012!==b.type&&1014!==b.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),
13093 b.type=1012,w=f(b.type));1027===b.format&&(u=a.DEPTH_STENCIL,1020!==b.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),b.type=1020,w=f(b.type)));c.texImage2D(a.TEXTURE_2D,0,u,p.width,p.height,0,l,w,null)}else if(b.isDataTexture)if(0<u.length&&n){for(var J=0,ca=u.length;J<ca;J++)p=u[J],c.texImage2D(a.TEXTURE_2D,J,l,p.width,p.height,0,l,w,p.data);b.generateMipmaps=!1}else c.texImage2D(a.TEXTURE_2D,0,l,p.width,p.height,0,l,w,p.data);else if(b.isCompressedTexture)for(J=
13094 0,ca=u.length;J<ca;J++)p=u[J],1023!==b.format&&1022!==b.format?-1<c.getCompressedTextureFormats().indexOf(l)?c.compressedTexImage2D(a.TEXTURE_2D,J,l,p.width,p.height,0,p.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):c.texImage2D(a.TEXTURE_2D,J,l,p.width,p.height,0,l,w,p.data);else if(0<u.length&&n){J=0;for(ca=u.length;J<ca;J++)p=u[J],c.texImage2D(a.TEXTURE_2D,J,l,l,w,p);b.generateMipmaps=!1}else c.texImage2D(a.TEXTURE_2D,0,l,l,
13095 w,p);b.generateMipmaps&&n&&a.generateMipmap(a.TEXTURE_2D);m.__version=b.version;if(b.onUpdate)b.onUpdate(b);return}}c.activeTexture(a.TEXTURE0+g);c.bindTexture(a.TEXTURE_2D,m.__webglTexture)}function r(c,g,h){h?(a.texParameteri(c,a.TEXTURE_WRAP_S,f(g.wrapS)),a.texParameteri(c,a.TEXTURE_WRAP_T,f(g.wrapT)),a.texParameteri(c,a.TEXTURE_MAG_FILTER,f(g.magFilter)),a.texParameteri(c,a.TEXTURE_MIN_FILTER,f(g.minFilter))):(a.texParameteri(c,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(c,a.TEXTURE_WRAP_T,
13096 a.CLAMP_TO_EDGE),1001===g.wrapS&&1001===g.wrapT||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.",g),a.texParameteri(c,a.TEXTURE_MAG_FILTER,m(g.magFilter)),a.texParameteri(c,a.TEXTURE_MIN_FILTER,m(g.minFilter)),1003!==g.minFilter&&1006!==g.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.",g));!(h=b.get("EXT_texture_filter_anisotropic"))||
13097 1015===g.type&&null===b.get("OES_texture_float_linear")||1016===g.type&&null===b.get("OES_texture_half_float_linear")||!(1<g.anisotropy||d.get(g).__currentAnisotropy)||(a.texParameterf(c,h.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(g.anisotropy,e.getMaxAnisotropy())),d.get(g).__currentAnisotropy=g.anisotropy)}function l(b,e,g,h){var k=f(e.texture.format),m=f(e.texture.type);c.texImage2D(h,0,k,e.width,e.height,0,k,m,null);a.bindFramebuffer(a.FRAMEBUFFER,b);a.framebufferTexture2D(a.FRAMEBUFFER,g,h,d.get(e.texture).__webglTexture,
13098 0);a.bindFramebuffer(a.FRAMEBUFFER,null)}function u(b,c){a.bindRenderbuffer(a.RENDERBUFFER,b);c.depthBuffer&&!c.stencilBuffer?(a.renderbufferStorage(a.RENDERBUFFER,a.DEPTH_COMPONENT16,c.width,c.height),a.framebufferRenderbuffer(a.FRAMEBUFFER,a.DEPTH_ATTACHMENT,a.RENDERBUFFER,b)):c.depthBuffer&&c.stencilBuffer?(a.renderbufferStorage(a.RENDERBUFFER,a.DEPTH_STENCIL,c.width,c.height),a.framebufferRenderbuffer(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.RENDERBUFFER,b)):a.renderbufferStorage(a.RENDERBUFFER,
13099 a.RGBA4,c.width,c.height);a.bindRenderbuffer(a.RENDERBUFFER,null)}var q=g.memory,t="undefined"!==typeof WebGL2RenderingContext&&a instanceof WebGL2RenderingContext;this.setTexture2D=n;this.setTextureCube=function(b,g){var m=d.get(b);if(6===b.image.length)if(0<b.version&&m.__version!==b.version){m.__image__webglTextureCube||(b.addEventListener("dispose",x),m.__image__webglTextureCube=a.createTexture(),q.textures++);c.activeTexture(a.TEXTURE0+g);c.bindTexture(a.TEXTURE_CUBE_MAP,m.__image__webglTextureCube);
13100 a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,b.flipY);for(var n=b&&b.isCompressedTexture,p=b.image[0]&&b.image[0].isDataTexture,l=[],w=0;6>w;w++)l[w]=n||p?p?b.image[w].image:b.image[w]:h(b.image[w],e.maxCubemapSize);var u=k(l[0]),t=f(b.format),ca=f(b.type);r(a.TEXTURE_CUBE_MAP,b,u);for(w=0;6>w;w++)if(n)for(var y,C=l[w].mipmaps,D=0,O=C.length;D<O;D++)y=C[D],1023!==b.format&&1022!==b.format?-1<c.getCompressedTextureFormats().indexOf(t)?c.compressedTexImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,D,t,y.width,y.height,
13101 0,y.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):c.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,D,t,y.width,y.height,0,t,ca,y.data);else p?c.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,0,t,l[w].width,l[w].height,0,t,ca,l[w].data):c.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,0,t,t,ca,l[w]);b.generateMipmaps&&u&&a.generateMipmap(a.TEXTURE_CUBE_MAP);m.__version=b.version;if(b.onUpdate)b.onUpdate(b)}else c.activeTexture(a.TEXTURE0+
13102 g),c.bindTexture(a.TEXTURE_CUBE_MAP,m.__image__webglTextureCube)};this.setTextureCubeDynamic=function(b,e){c.activeTexture(a.TEXTURE0+e);c.bindTexture(a.TEXTURE_CUBE_MAP,d.get(b).__webglTexture)};this.setupRenderTarget=function(b){var e=d.get(b),f=d.get(b.texture);b.addEventListener("dispose",p);f.__webglTexture=a.createTexture();q.textures++;var g=!0===b.isWebGLRenderTargetCube,h=k(b);if(g){e.__webglFramebuffer=[];for(var m=0;6>m;m++)e.__webglFramebuffer[m]=a.createFramebuffer()}else e.__webglFramebuffer=
13103 a.createFramebuffer();if(g){c.bindTexture(a.TEXTURE_CUBE_MAP,f.__webglTexture);r(a.TEXTURE_CUBE_MAP,b.texture,h);for(m=0;6>m;m++)l(e.__webglFramebuffer[m],b,a.COLOR_ATTACHMENT0,a.TEXTURE_CUBE_MAP_POSITIVE_X+m);b.texture.generateMipmaps&&h&&a.generateMipmap(a.TEXTURE_CUBE_MAP);c.bindTexture(a.TEXTURE_CUBE_MAP,null)}else c.bindTexture(a.TEXTURE_2D,f.__webglTexture),r(a.TEXTURE_2D,b.texture,h),l(e.__webglFramebuffer,b,a.COLOR_ATTACHMENT0,a.TEXTURE_2D),b.texture.generateMipmaps&&h&&a.generateMipmap(a.TEXTURE_2D),
13104 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&&
13105 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);n(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");
13106 }else if(f)for(e.__webglDepthbuffer=[],f=0;6>f;f++)a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer[f]),e.__webglDepthbuffer[f]=a.createRenderbuffer(),u(e.__webglDepthbuffer[f],b);else a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),u(e.__webglDepthbuffer,b);a.bindFramebuffer(a.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(b){var e=b.texture;e.generateMipmaps&&k(b)&&1003!==e.minFilter&&1006!==e.minFilter&&(b=b&&b.isWebGLRenderTargetCube?
13107 a.TEXTURE_CUBE_MAP:a.TEXTURE_2D,e=d.get(e).__webglTexture,c.bindTexture(b,e),a.generateMipmap(b),c.bindTexture(b,null))}}function Ff(){var a={};return{get:function(b){b=b.uuid;var c=a[b];void 0===c&&(c={},a[b]=c);return c},"delete":function(b){delete a[b.uuid]},clear:function(){a={}}}}function Gf(a,b,c){function d(b,c,d){var e=new Uint8Array(4),f=a.createTexture();a.bindTexture(b,f);a.texParameteri(b,a.TEXTURE_MIN_FILTER,a.NEAREST);a.texParameteri(b,a.TEXTURE_MAG_FILTER,a.NEAREST);for(b=0;b<d;b++)a.texImage2D(c+
13108 b,0,a.RGBA,1,1,0,a.RGBA,a.UNSIGNED_BYTE,e);return f}function e(b){!0!==v[b]&&(a.enable(b),v[b]=!0)}function f(b){!1!==v[b]&&(a.disable(b),v[b]=!1)}function g(b,d,g,h,k,m,n,p){0!==b?e(a.BLEND):f(a.BLEND);if(b!==z||p!==ca)2===b?p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ONE,a.ONE,a.ONE,a.ONE)):(a.blendEquation(a.FUNC_ADD),a.blendFunc(a.SRC_ALPHA,a.ONE)):3===b?p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ZERO,a.ZERO,a.ONE_MINUS_SRC_COLOR,a.ONE_MINUS_SRC_ALPHA)):
13109 (a.blendEquation(a.FUNC_ADD),a.blendFunc(a.ZERO,a.ONE_MINUS_SRC_COLOR)):4===b?p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ZERO,a.SRC_COLOR,a.ZERO,a.SRC_ALPHA)):(a.blendEquation(a.FUNC_ADD),a.blendFunc(a.ZERO,a.SRC_COLOR)):p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ONE,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA)):(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA)),
13110 z=b,ca=p;if(5===b){k=k||d;m=m||g;n=n||h;if(d!==A||k!==K)a.blendEquationSeparate(c(d),c(k)),A=d,K=k;if(g!==I||h!==E||m!==y||n!==J)a.blendFuncSeparate(c(g),c(h),c(m),c(n)),I=g,E=h,y=m,J=n}else J=y=K=E=I=A=null}function h(a){n.setFunc(a)}function k(b){C!==b&&(b?a.frontFace(a.CW):a.frontFace(a.CCW),C=b)}function m(b){0!==b?(e(a.CULL_FACE),b!==D&&(1===b?a.cullFace(a.BACK):2===b?a.cullFace(a.FRONT):a.cullFace(a.FRONT_AND_BACK))):f(a.CULL_FACE);D=b}function x(b){void 0===b&&(b=a.TEXTURE0+T-1);V!==b&&(a.activeTexture(b),
13111 V=b)}var p=new function(){var b=!1,c=new ga,d=null,e=new ga;return{setMask:function(c){d===c||b||(a.colorMask(c,c,c,c),d=c)},setLocked:function(a){b=a},setClear:function(b,d,f,g,h){!0===h&&(b*=g,d*=g,f*=g);c.set(b,d,f,g);!1===e.equals(c)&&(a.clearColor(b,d,f,g),e.copy(c))},reset:function(){b=!1;d=null;e.set(0,0,0,1)}}},n=new function(){var b=!1,c=null,d=null,g=null;return{setTest:function(b){b?e(a.DEPTH_TEST):f(a.DEPTH_TEST)},setMask:function(d){c===d||b||(a.depthMask(d),c=d)},setFunc:function(b){if(d!==
13112 b){if(b)switch(b){case 0:a.depthFunc(a.NEVER);break;case 1:a.depthFunc(a.ALWAYS);break;case 2:a.depthFunc(a.LESS);break;case 3:a.depthFunc(a.LEQUAL);break;case 4:a.depthFunc(a.EQUAL);break;case 5:a.depthFunc(a.GEQUAL);break;case 6:a.depthFunc(a.GREATER);break;case 7:a.depthFunc(a.NOTEQUAL);break;default:a.depthFunc(a.LEQUAL)}else a.depthFunc(a.LEQUAL);d=b}},setLocked:function(a){b=a},setClear:function(b){g!==b&&(a.clearDepth(b),g=b)},reset:function(){b=!1;g=d=c=null}}},r=new function(){var b=!1,c=
13113 null,d=null,g=null,h=null,k=null,m=null,n=null,p=null;return{setTest:function(b){b?e(a.STENCIL_TEST):f(a.STENCIL_TEST)},setMask:function(d){c===d||b||(a.stencilMask(d),c=d)},setFunc:function(b,c,e){if(d!==b||g!==c||h!==e)a.stencilFunc(b,c,e),d=b,g=c,h=e},setOp:function(b,c,d){if(k!==b||m!==c||n!==d)a.stencilOp(b,c,d),k=b,m=c,n=d},setLocked:function(a){b=a},setClear:function(b){p!==b&&(a.clearStencil(b),p=b)},reset:function(){b=!1;p=n=m=k=h=g=d=c=null}}},l=a.getParameter(a.MAX_VERTEX_ATTRIBS),u=new Uint8Array(l),
13114 q=new Uint8Array(l),t=new Uint8Array(l),v={},M=null,z=null,A=null,I=null,E=null,K=null,y=null,J=null,ca=!1,C=null,D=null,G=null,O=null,P=null,R=null,T=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS),l=parseFloat(/^WebGL\ ([0-9])/.exec(a.getParameter(a.VERSION))[1]),H=1<=parseFloat(l),V=null,N={},L=new ga,S=new ga,Q={};Q[a.TEXTURE_2D]=d(a.TEXTURE_2D,a.TEXTURE_2D,1);Q[a.TEXTURE_CUBE_MAP]=d(a.TEXTURE_CUBE_MAP,a.TEXTURE_CUBE_MAP_POSITIVE_X,6);return{buffers:{color:p,depth:n,stencil:r},init:function(){p.setClear(0,
13115 0,0,1);n.setClear(1);r.setClear(0);e(a.DEPTH_TEST);h(3);k(!1);m(1);e(a.CULL_FACE);e(a.BLEND);g(1)},initAttributes:function(){for(var a=0,b=u.length;a<b;a++)u[a]=0},enableAttribute:function(c){u[c]=1;0===q[c]&&(a.enableVertexAttribArray(c),q[c]=1);0!==t[c]&&(b.get("ANGLE_instanced_arrays").vertexAttribDivisorANGLE(c,0),t[c]=0)},enableAttributeAndDivisor:function(b,c,d){u[b]=1;0===q[b]&&(a.enableVertexAttribArray(b),q[b]=1);t[b]!==c&&(d.vertexAttribDivisorANGLE(b,c),t[b]=c)},disableUnusedAttributes:function(){for(var b=
13116 0,c=q.length;b!==c;++b)q[b]!==u[b]&&(a.disableVertexAttribArray(b),q[b]=0)},enable:e,disable:f,getCompressedTextureFormats:function(){if(null===M&&(M=[],b.get("WEBGL_compressed_texture_pvrtc")||b.get("WEBGL_compressed_texture_s3tc")||b.get("WEBGL_compressed_texture_etc1")))for(var c=a.getParameter(a.COMPRESSED_TEXTURE_FORMATS),d=0;d<c.length;d++)M.push(c[d]);return M},setBlending:g,setColorWrite:function(a){p.setMask(a)},setDepthTest:function(a){n.setTest(a)},setDepthWrite:function(a){n.setMask(a)},
13117 setDepthFunc:h,setStencilTest:function(a){r.setTest(a)},setStencilWrite:function(a){r.setMask(a)},setStencilFunc:function(a,b,c){r.setFunc(a,b,c)},setStencilOp:function(a,b,c){r.setOp(a,b,c)},setFlipSided:k,setCullFace:m,setLineWidth:function(b){b!==G&&(H&&a.lineWidth(b),G=b)},setPolygonOffset:function(b,c,d){if(b){if(e(a.POLYGON_OFFSET_FILL),O!==c||P!==d)a.polygonOffset(c,d),O=c,P=d}else f(a.POLYGON_OFFSET_FILL)},getScissorTest:function(){return R},setScissorTest:function(b){(R=b)?e(a.SCISSOR_TEST):
13118 f(a.SCISSOR_TEST)},activeTexture:x,bindTexture:function(b,c){null===V&&x();var d=N[V];void 0===d&&(d={type:void 0,texture:void 0},N[V]=d);if(d.type!==b||d.texture!==c)a.bindTexture(b,c||Q[b]),d.type=b,d.texture=c},compressedTexImage2D:function(){try{a.compressedTexImage2D.apply(a,arguments)}catch(b){console.error(b)}},texImage2D:function(){try{a.texImage2D.apply(a,arguments)}catch(b){console.error(b)}},scissor:function(b){!1===L.equals(b)&&(a.scissor(b.x,b.y,b.z,b.w),L.copy(b))},viewport:function(b){!1===
13119 S.equals(b)&&(a.viewport(b.x,b.y,b.z,b.w),S.copy(b))},reset:function(){for(var b=0;b<q.length;b++)1===q[b]&&(a.disableVertexAttribArray(b),q[b]=0);v={};V=M=null;N={};D=C=z=null;p.reset();n.reset();r.reset()}}}function Hf(a,b,c){function d(b){if("highp"===b){if(0<a.getShaderPrecisionFormat(a.VERTEX_SHADER,a.HIGH_FLOAT).precision&&0<a.getShaderPrecisionFormat(a.FRAGMENT_SHADER,a.HIGH_FLOAT).precision)return"highp";b="mediump"}return"mediump"===b&&0<a.getShaderPrecisionFormat(a.VERTEX_SHADER,a.MEDIUM_FLOAT).precision&&
13120 0<a.getShaderPrecisionFormat(a.FRAGMENT_SHADER,a.MEDIUM_FLOAT).precision?"mediump":"lowp"}var e,f=void 0!==c.precision?c.precision:"highp",g=d(f);g!==f&&(console.warn("THREE.WebGLRenderer:",f,"not supported, using",g,"instead."),f=g);c=!0===c.logarithmicDepthBuffer&&!!b.get("EXT_frag_depth");var g=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS),h=a.getParameter(a.MAX_VERTEX_TEXTURE_IMAGE_UNITS),k=a.getParameter(a.MAX_TEXTURE_SIZE),m=a.getParameter(a.MAX_CUBE_MAP_TEXTURE_SIZE),x=a.getParameter(a.MAX_VERTEX_ATTRIBS),
13121 p=a.getParameter(a.MAX_VERTEX_UNIFORM_VECTORS),n=a.getParameter(a.MAX_VARYING_VECTORS),r=a.getParameter(a.MAX_FRAGMENT_UNIFORM_VECTORS),l=0<h,u=!!b.get("OES_texture_float");return{getMaxAnisotropy:function(){if(void 0!==e)return e;var c=b.get("EXT_texture_filter_anisotropic");return e=null!==c?a.getParameter(c.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:d,precision:f,logarithmicDepthBuffer:c,maxTextures:g,maxVertexTextures:h,maxTextureSize:k,maxCubemapSize:m,maxAttributes:x,maxVertexUniforms:p,
13122 maxVaryings:n,maxFragmentUniforms:r,vertexTextures:l,floatFragmentTextures:u,floatVertexTextures:l&&u}}function If(a){var b={};return{get:function(c){if(void 0!==b[c])return b[c];var d;switch(c){case "WEBGL_depth_texture":d=a.getExtension("WEBGL_depth_texture")||a.getExtension("MOZ_WEBGL_depth_texture")||a.getExtension("WEBKIT_WEBGL_depth_texture");break;case "EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||
13123 a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case "WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case "WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");
13124 break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}}}function Jf(){function a(){m.value!==d&&(m.value=d,m.needsUpdate=0<e);c.numPlanes=e;c.numIntersection=0}function b(a,b,d,e){var f=null!==a?a.length:0,g=null;if(0!==f){g=m.value;if(!0!==e||null===g){e=d+4*f;b=b.matrixWorldInverse;k.getNormalMatrix(b);if(null===g||g.length<e)g=new Float32Array(e);for(e=0;e!==f;++e,d+=4)h.copy(a[e]).applyMatrix4(b,k),h.normal.toArray(g,d),g[d+
13125 3]=h.constant}m.value=g;m.needsUpdate=!0}c.numPlanes=f;return g}var c=this,d=null,e=0,f=!1,g=!1,h=new ma,k=new za,m={value:null,needsUpdate:!1};this.uniform=m;this.numIntersection=this.numPlanes=0;this.init=function(a,c,g){var h=0!==a.length||c||0!==e||f;f=c;d=b(a,g,0);e=a.length;return h};this.beginShadows=function(){g=!0;b(null)};this.endShadows=function(){g=!1;a()};this.setState=function(c,h,k,r,l,u){if(!f||null===c||0===c.length||g&&!k)g?b(null):a();else{k=g?0:e;var q=4*k,t=l.clippingState||null;
13126 m.value=t;t=b(c,r,q,u);for(c=0;c!==q;++c)t[c]=d[c];l.clippingState=t;this.numIntersection=h?this.numPlanes:0;this.numPlanes+=k}}}function Nd(a){function b(){Y.init();Y.scissor(X.copy(fa).multiplyScalar(Sa));Y.viewport(Z.copy(ia).multiplyScalar(Sa));Y.buffers.color.setClear(Ga.r,Ga.g,Ga.b,fb,K)}function c(){W=Q=null;U="";L=-1;Y.reset()}function d(a){a.preventDefault();c();b();ha.clear()}function e(a){a=a.target;a.removeEventListener("dispose",e);f(a);ha["delete"](a)}function f(a){var b=ha.get(a).program;
13127 a.program=void 0;void 0!==b&&za.releaseProgram(b)}function g(a,b){return Math.abs(b[0])-Math.abs(a[0])}function h(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.program&&b.material.program&&a.material.program!==b.material.program?a.material.program.id-b.material.program.id:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function k(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-
13128 b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=G,f=++Na):(d=ca,f=++C);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=ba.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:ba.z,group:e},d.push(f))}function x(a){if(!na.intersectsSphere(a))return!1;var b=da.numPlanes;if(0===b)return!0;var c=T.clippingPlanes,d=a.center;a=-a.radius;var e=0;do if(c[e].distanceToPoint(d)<a)return!1;while(++e!==b);return!0}function p(a,b){if(!1!==
13129 a.visible){if(0!==(a.layers.mask&b.layers.mask))if(a.isLight)J.push(a);else if(a.isSprite){var c;(c=!1===a.frustumCulled)||(oa.center.set(0,0,0),oa.radius=.7071067811865476,oa.applyMatrix4(a.matrixWorld),c=!0===x(oa));c&&P.push(a)}else if(a.isLensFlare)R.push(a);else if(a.isImmediateRenderObject)!0===T.sortObjects&&(ba.setFromMatrixPosition(a.matrixWorld),ba.applyProjection(sa)),m(a,null,a.material,ba.z,null);else if(a.isMesh||a.isLine||a.isPoints)if(a.isSkinnedMesh&&a.skeleton.update(),(c=!1===a.frustumCulled)||
13130 (c=a.geometry,null===c.boundingSphere&&c.computeBoundingSphere(),oa.copy(c.boundingSphere).applyMatrix4(a.matrixWorld),c=!0===x(oa)),c){var d=a.material;if(!0===d.visible)if(!0===T.sortObjects&&(ba.setFromMatrixPosition(a.matrixWorld),ba.applyProjection(sa)),c=ta.update(a),d.isMultiMaterial)for(var e=c.groups,f=d.materials,d=0,g=e.length;d<g;d++){var h=e[d],k=f[h.materialIndex];!0===k.visible&&m(a,c,k,ba.z,h)}else m(a,c,d,ba.z,null)}c=a.children;d=0;for(g=c.length;d<g;d++)p(c[d],b)}}function n(a,
13131 b,c,d){for(var e=0,f=a.length;e<f;e++){var g=a[e],h=g.object,k=g.geometry,m=void 0===d?g.material:d,g=g.group;h.modelViewMatrix.multiplyMatrices(c.matrixWorldInverse,h.matrixWorld);h.normalMatrix.getNormalMatrix(h.modelViewMatrix);h.onBeforeRender(T,b,c,k,m,g);if(h.isImmediateRenderObject){r(m);var n=l(c,b.fog,m,h);U="";h.render(function(a){T.renderBufferImmediate(a,n,m)})}else T.renderBufferDirect(c,b.fog,k,m,h,g);h.onAfterRender(T,b,c,k,m,g)}}function r(a){2===a.side?Y.disable(B.CULL_FACE):Y.enable(B.CULL_FACE);
13132 Y.setFlipSided(1===a.side);!0===a.transparent?Y.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha,a.premultipliedAlpha):Y.setBlending(0);Y.setDepthFunc(a.depthFunc);Y.setDepthTest(a.depthTest);Y.setDepthWrite(a.depthWrite);Y.setColorWrite(a.colorWrite);Y.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}function l(a,b,c,d){ea=0;var g=ha.get(c);pa&&(ua||a!==W)&&da.setState(c.clippingPlanes,c.clipIntersection,
13133 c.clipShadows,a,g,a===W&&c.id===L);!1===c.needsUpdate&&(void 0===g.program?c.needsUpdate=!0:c.fog&&g.fog!==b?c.needsUpdate=!0:c.lights&&g.lightsHash!==aa.hash?c.needsUpdate=!0:void 0===g.numClippingPlanes||g.numClippingPlanes===da.numPlanes&&g.numIntersection===da.numIntersection||(c.needsUpdate=!0));if(c.needsUpdate){a:{var h=ha.get(c),k=za.getParameters(c,aa,b,da.numPlanes,da.numIntersection,d),m=za.getProgramCode(c,k),n=h.program,p=!0;if(void 0===n)c.addEventListener("dispose",e);else if(n.code!==
13134 m)f(c);else if(void 0!==k.shaderID)break a;else p=!1;p&&(k.shaderID?(n=Gb[k.shaderID],h.__webglShader={name:c.type,uniforms:Ja.clone(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader}):h.__webglShader={name:c.type,uniforms:c.uniforms,vertexShader:c.vertexShader,fragmentShader:c.fragmentShader},c.__webglShader=h.__webglShader,n=za.acquireProgram(c,k,m),h.program=n,c.program=n);k=n.getAttributes();if(c.morphTargets)for(m=c.numSupportedMorphTargets=0;m<T.maxMorphTargets;m++)0<=
13135 k["morphTarget"+m]&&c.numSupportedMorphTargets++;if(c.morphNormals)for(m=c.numSupportedMorphNormals=0;m<T.maxMorphNormals;m++)0<=k["morphNormal"+m]&&c.numSupportedMorphNormals++;k=h.__webglShader.uniforms;if(!c.isShaderMaterial&&!c.isRawShaderMaterial||!0===c.clipping)h.numClippingPlanes=da.numPlanes,h.numIntersection=da.numIntersection,k.clippingPlanes=da.uniform;h.fog=b;h.lightsHash=aa.hash;c.lights&&(k.ambientLightColor.value=aa.ambient,k.directionalLights.value=aa.directional,k.spotLights.value=
13136 aa.spot,k.rectAreaLights.value=aa.rectArea,k.pointLights.value=aa.point,k.hemisphereLights.value=aa.hemi,k.directionalShadowMap.value=aa.directionalShadowMap,k.directionalShadowMatrix.value=aa.directionalShadowMatrix,k.spotShadowMap.value=aa.spotShadowMap,k.spotShadowMatrix.value=aa.spotShadowMatrix,k.pointShadowMap.value=aa.pointShadowMap,k.pointShadowMatrix.value=aa.pointShadowMatrix);m=h.program.getUniforms();k=$a.seqWithValue(m.seq,k);h.uniformsList=k}c.needsUpdate=!1}var x=!1,p=n=!1,h=g.program,
13137 k=h.getUniforms(),m=g.__webglShader.uniforms;h.id!==Q&&(B.useProgram(h.program),Q=h.id,p=n=x=!0);c.id!==L&&(L=c.id,n=!0);if(x||a!==W){k.set(B,a,"projectionMatrix");ma.logarithmicDepthBuffer&&k.setValue(B,"logDepthBufFC",2/(Math.log(a.far+1)/Math.LN2));a!==W&&(W=a,p=n=!0);if(c.isShaderMaterial||c.isMeshPhongMaterial||c.isMeshStandardMaterial||c.envMap)x=k.map.cameraPosition,void 0!==x&&x.setValue(B,ba.setFromMatrixPosition(a.matrixWorld));(c.isMeshPhongMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial||
13138 c.isMeshStandardMaterial||c.isShaderMaterial||c.skinning)&&k.setValue(B,"viewMatrix",a.matrixWorldInverse);k.set(B,T,"toneMappingExposure");k.set(B,T,"toneMappingWhitePoint")}c.skinning&&(k.setOptional(B,d,"bindMatrix"),k.setOptional(B,d,"bindMatrixInverse"),a=d.skeleton)&&(ma.floatVertexTextures&&a.useVertexTexture?(k.set(B,a,"boneTexture"),k.set(B,a,"boneTextureWidth"),k.set(B,a,"boneTextureHeight")):k.setOptional(B,a,"boneMatrices"));if(n){c.lights&&(a=p,m.ambientLightColor.needsUpdate=a,m.directionalLights.needsUpdate=
13139 a,m.pointLights.needsUpdate=a,m.spotLights.needsUpdate=a,m.rectAreaLights.needsUpdate=a,m.hemisphereLights.needsUpdate=a);b&&c.fog&&(m.fogColor.value=b.color,b.isFog?(m.fogNear.value=b.near,m.fogFar.value=b.far):b.isFogExp2&&(m.fogDensity.value=b.density));if(c.isMeshBasicMaterial||c.isMeshLambertMaterial||c.isMeshPhongMaterial||c.isMeshStandardMaterial||c.isMeshNormalMaterial||c.isMeshDepthMaterial){m.opacity.value=c.opacity;m.diffuse.value=c.color;c.emissive&&m.emissive.value.copy(c.emissive).multiplyScalar(c.emissiveIntensity);
13140 m.map.value=c.map;m.specularMap.value=c.specularMap;m.alphaMap.value=c.alphaMap;c.lightMap&&(m.lightMap.value=c.lightMap,m.lightMapIntensity.value=c.lightMapIntensity);c.aoMap&&(m.aoMap.value=c.aoMap,m.aoMapIntensity.value=c.aoMapIntensity);var r;c.map?r=c.map:c.specularMap?r=c.specularMap:c.displacementMap?r=c.displacementMap:c.normalMap?r=c.normalMap:c.bumpMap?r=c.bumpMap:c.roughnessMap?r=c.roughnessMap:c.metalnessMap?r=c.metalnessMap:c.alphaMap?r=c.alphaMap:c.emissiveMap&&(r=c.emissiveMap);void 0!==
13141 r&&(r.isWebGLRenderTarget&&(r=r.texture),b=r.offset,r=r.repeat,m.offsetRepeat.value.set(b.x,b.y,r.x,r.y));m.envMap.value=c.envMap;m.flipEnvMap.value=c.envMap&&c.envMap.isCubeTexture?-1:1;m.reflectivity.value=c.reflectivity;m.refractionRatio.value=c.refractionRatio}c.isLineBasicMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity):c.isLineDashedMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity,m.dashSize.value=c.dashSize,m.totalSize.value=c.dashSize+c.gapSize,m.scale.value=c.scale):
13142 c.isPointsMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity,m.size.value=c.size*Sa,m.scale.value=.5*yc,m.map.value=c.map,null!==c.map&&(r=c.map.offset,c=c.map.repeat,m.offsetRepeat.value.set(r.x,r.y,c.x,c.y))):c.isMeshLambertMaterial?c.emissiveMap&&(m.emissiveMap.value=c.emissiveMap):c.isMeshToonMaterial?(u(m,c),c.gradientMap&&(m.gradientMap.value=c.gradientMap)):c.isMeshPhongMaterial?u(m,c):c.isMeshPhysicalMaterial?(m.clearCoat.value=c.clearCoat,m.clearCoatRoughness.value=c.clearCoatRoughness,
13143 F(m,c)):c.isMeshStandardMaterial?F(m,c):c.isMeshDepthMaterial?c.displacementMap&&(m.displacementMap.value=c.displacementMap,m.displacementScale.value=c.displacementScale,m.displacementBias.value=c.displacementBias):c.isMeshNormalMaterial&&(c.bumpMap&&(m.bumpMap.value=c.bumpMap,m.bumpScale.value=c.bumpScale),c.normalMap&&(m.normalMap.value=c.normalMap,m.normalScale.value.copy(c.normalScale)),c.displacementMap&&(m.displacementMap.value=c.displacementMap,m.displacementScale.value=c.displacementScale,
13144 m.displacementBias.value=c.displacementBias));void 0!==m.ltcMat&&(m.ltcMat.value=THREE.UniformsLib.LTC_MAT_TEXTURE);void 0!==m.ltcMag&&(m.ltcMag.value=THREE.UniformsLib.LTC_MAG_TEXTURE);$a.upload(B,g.uniformsList,m,T)}k.set(B,d,"modelViewMatrix");k.set(B,d,"normalMatrix");k.setValue(B,"modelMatrix",d.matrixWorld);return h}function u(a,b){a.specular.value=b.specular;a.shininess.value=Math.max(b.shininess,1E-4);b.emissiveMap&&(a.emissiveMap.value=b.emissiveMap);b.bumpMap&&(a.bumpMap.value=b.bumpMap,
13145 a.bumpScale.value=b.bumpScale);b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale));b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias)}function F(a,b){a.roughness.value=b.roughness;a.metalness.value=b.metalness;b.roughnessMap&&(a.roughnessMap.value=b.roughnessMap);b.metalnessMap&&(a.metalnessMap.value=b.metalnessMap);b.emissiveMap&&(a.emissiveMap.value=b.emissiveMap);
13146 b.bumpMap&&(a.bumpMap.value=b.bumpMap,a.bumpScale.value=b.bumpScale);b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale));b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias);b.envMap&&(a.envMapIntensity.value=b.envMapIntensity)}function t(a){var b;if(1E3===a)return B.REPEAT;if(1001===a)return B.CLAMP_TO_EDGE;if(1002===a)return B.MIRRORED_REPEAT;if(1003===a)return B.NEAREST;
13147 if(1004===a)return B.NEAREST_MIPMAP_NEAREST;if(1005===a)return B.NEAREST_MIPMAP_LINEAR;if(1006===a)return B.LINEAR;if(1007===a)return B.LINEAR_MIPMAP_NEAREST;if(1008===a)return B.LINEAR_MIPMAP_LINEAR;if(1009===a)return B.UNSIGNED_BYTE;if(1017===a)return B.UNSIGNED_SHORT_4_4_4_4;if(1018===a)return B.UNSIGNED_SHORT_5_5_5_1;if(1019===a)return B.UNSIGNED_SHORT_5_6_5;if(1010===a)return B.BYTE;if(1011===a)return B.SHORT;if(1012===a)return B.UNSIGNED_SHORT;if(1013===a)return B.INT;if(1014===a)return B.UNSIGNED_INT;
13148 if(1015===a)return B.FLOAT;if(1016===a&&(b=ja.get("OES_texture_half_float"),null!==b))return b.HALF_FLOAT_OES;if(1021===a)return B.ALPHA;if(1022===a)return B.RGB;if(1023===a)return B.RGBA;if(1024===a)return B.LUMINANCE;if(1025===a)return B.LUMINANCE_ALPHA;if(1026===a)return B.DEPTH_COMPONENT;if(1027===a)return B.DEPTH_STENCIL;if(100===a)return B.FUNC_ADD;if(101===a)return B.FUNC_SUBTRACT;if(102===a)return B.FUNC_REVERSE_SUBTRACT;if(200===a)return B.ZERO;if(201===a)return B.ONE;if(202===a)return B.SRC_COLOR;
13149 if(203===a)return B.ONE_MINUS_SRC_COLOR;if(204===a)return B.SRC_ALPHA;if(205===a)return B.ONE_MINUS_SRC_ALPHA;if(206===a)return B.DST_ALPHA;if(207===a)return B.ONE_MINUS_DST_ALPHA;if(208===a)return B.DST_COLOR;if(209===a)return B.ONE_MINUS_DST_COLOR;if(210===a)return B.SRC_ALPHA_SATURATE;if(2001===a||2002===a||2003===a||2004===a)if(b=ja.get("WEBGL_compressed_texture_s3tc"),null!==b){if(2001===a)return b.COMPRESSED_RGB_S3TC_DXT1_EXT;if(2002===a)return b.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(2003===a)return b.COMPRESSED_RGBA_S3TC_DXT3_EXT;
13150 if(2004===a)return b.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(2100===a||2101===a||2102===a||2103===a)if(b=ja.get("WEBGL_compressed_texture_pvrtc"),null!==b){if(2100===a)return b.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(2101===a)return b.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(2102===a)return b.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(2103===a)return b.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(2151===a&&(b=ja.get("WEBGL_compressed_texture_etc1"),null!==b))return b.COMPRESSED_RGB_ETC1_WEBGL;if(103===a||104===a)if(b=ja.get("EXT_blend_minmax"),
13151 null!==b){if(103===a)return b.MIN_EXT;if(104===a)return b.MAX_EXT}return 1020===a&&(b=ja.get("WEBGL_depth_texture"),null!==b)?b.UNSIGNED_INT_24_8_WEBGL:0}console.log("THREE.WebGLRenderer","83");a=a||{};var v=void 0!==a.canvas?a.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),M=void 0!==a.context?a.context:null,z=void 0!==a.alpha?a.alpha:!1,A=void 0!==a.depth?a.depth:!0,I=void 0!==a.stencil?a.stencil:!0,E=void 0!==a.antialias?a.antialias:!1,K=void 0!==a.premultipliedAlpha?
13152 a.premultipliedAlpha:!0,y=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,J=[],ca=[],C=-1,G=[],Na=-1,O=new Float32Array(8),P=[],R=[];this.domElement=v;this.context=null;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.clippingPlanes=[];this.localClippingEnabled=!1;this.gammaFactor=2;this.physicallyCorrectLights=this.gammaOutput=this.gammaInput=!1;this.toneMappingWhitePoint=this.toneMappingExposure=this.toneMapping=1;this.maxMorphTargets=
13153 8;this.maxMorphNormals=4;var T=this,Q=null,V=null,S=null,L=-1,U="",W=null,X=new ga,Ta=null,Z=new ga,ea=0,Ga=new N(0),fb=0,fd=v.width,yc=v.height,Sa=1,fa=new ga(0,0,fd,yc),ka=!1,ia=new ga(0,0,fd,yc),na=new qc,da=new Jf,pa=!1,ua=!1,oa=new Fa,sa=new H,ba=new q,wa=new H,xa=new H,aa={hash:"",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],shadows:[]},qa={calls:0,
13154 vertices:0,faces:0,points:0};this.info={render:qa,memory:{geometries:0,textures:0},programs:null};var B;try{z={alpha:z,depth:A,stencil:I,antialias:E,premultipliedAlpha:K,preserveDrawingBuffer:y};B=M||v.getContext("webgl",z)||v.getContext("experimental-webgl",z);if(null===B){if(null!==v.getContext("webgl"))throw"Error creating WebGL context with your selected attributes.";throw"Error creating WebGL context.";}void 0===B.getShaderPrecisionFormat&&(B.getShaderPrecisionFormat=function(){return{rangeMin:1,
13155 rangeMax:1,precision:1}});v.addEventListener("webglcontextlost",d,!1)}catch(Kf){console.error("THREE.WebGLRenderer: "+Kf)}var ja=new If(B);ja.get("WEBGL_depth_texture");ja.get("OES_texture_float");ja.get("OES_texture_float_linear");ja.get("OES_texture_half_float");ja.get("OES_texture_half_float_linear");ja.get("OES_standard_derivatives");ja.get("ANGLE_instanced_arrays");ja.get("OES_element_index_uint")&&(D.MaxIndex=4294967296);var ma=new Hf(B,ja,a),Y=new Gf(B,ja,t),ha=new Ff,va=new Ef(B,ja,Y,ha,ma,
13156 t,this.info),ta=new Df(B,ha,this.info),za=new Bf(this,ma),Aa=new tf;this.info.programs=za.programs;var La=new sf(B,ja,qa),Ma=new rf(B,ja,qa),Oa=new Hb(-1,1,1,-1,0,1),Ca=new Ha,Ea=new Ba(new ib(2,2),new Ka({depthTest:!1,depthWrite:!1,fog:!1}));a=Gb.cube;var ya=new Ba(new hb(5,5,5),new Ia({uniforms:a.uniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}));b();this.context=B;this.capabilities=ma;this.extensions=ja;this.properties=ha;this.state=
13157 Y;var Pa=new ye(this,aa,ta,ma);this.shadowMap=Pa;var Qa=new of(this,P),Ra=new nf(this,R);this.getContext=function(){return B};this.getContextAttributes=function(){return B.getContextAttributes()};this.forceContextLoss=function(){ja.get("WEBGL_lose_context").loseContext()};this.getMaxAnisotropy=function(){return ma.getMaxAnisotropy()};this.getPrecision=function(){return ma.precision};this.getPixelRatio=function(){return Sa};this.setPixelRatio=function(a){void 0!==a&&(Sa=a,this.setSize(ia.z,ia.w,!1))};
13158 this.getSize=function(){return{width:fd,height:yc}};this.setSize=function(a,b,c){fd=a;yc=b;v.width=a*Sa;v.height=b*Sa;!1!==c&&(v.style.width=a+"px",v.style.height=b+"px");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){Y.viewport(ia.set(a,b,c,d))};this.setScissor=function(a,b,c,d){Y.scissor(fa.set(a,b,c,d))};this.setScissorTest=function(a){Y.setScissorTest(ka=a)};this.getClearColor=function(){return Ga};this.setClearColor=function(a,b){Ga.set(a);fb=void 0!==b?b:1;Y.buffers.color.setClear(Ga.r,
13159 Ga.g,Ga.b,fb,K)};this.getClearAlpha=function(){return fb};this.setClearAlpha=function(a){fb=a;Y.buffers.color.setClear(Ga.r,Ga.g,Ga.b,fb,K)};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=B.COLOR_BUFFER_BIT;if(void 0===b||b)d|=B.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=B.STENCIL_BUFFER_BIT;B.clear(d)};this.clearColor=function(){this.clear(!0,!1,!1)};this.clearDepth=function(){this.clear(!1,!0,!1)};this.clearStencil=function(){this.clear(!1,!1,!0)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);
13160 this.clear(b,c,d)};this.resetGLState=c;this.dispose=function(){G=[];Na=-1;ca=[];C=-1;v.removeEventListener("webglcontextlost",d,!1)};this.renderBufferImmediate=function(a,b,c){Y.initAttributes();var d=ha.get(a);a.hasPositions&&!d.position&&(d.position=B.createBuffer());a.hasNormals&&!d.normal&&(d.normal=B.createBuffer());a.hasUvs&&!d.uv&&(d.uv=B.createBuffer());a.hasColors&&!d.color&&(d.color=B.createBuffer());b=b.getAttributes();a.hasPositions&&(B.bindBuffer(B.ARRAY_BUFFER,d.position),B.bufferData(B.ARRAY_BUFFER,
13161 a.positionArray,B.DYNAMIC_DRAW),Y.enableAttribute(b.position),B.vertexAttribPointer(b.position,3,B.FLOAT,!1,0,0));if(a.hasNormals){B.bindBuffer(B.ARRAY_BUFFER,d.normal);if(!c.isMeshPhongMaterial&&!c.isMeshStandardMaterial&&!c.isMeshNormalMaterial&&1===c.shading)for(var e=0,f=3*a.count;e<f;e+=9){var g=a.normalArray,h=(g[e+0]+g[e+3]+g[e+6])/3,k=(g[e+1]+g[e+4]+g[e+7])/3,m=(g[e+2]+g[e+5]+g[e+8])/3;g[e+0]=h;g[e+1]=k;g[e+2]=m;g[e+3]=h;g[e+4]=k;g[e+5]=m;g[e+6]=h;g[e+7]=k;g[e+8]=m}B.bufferData(B.ARRAY_BUFFER,
13162 a.normalArray,B.DYNAMIC_DRAW);Y.enableAttribute(b.normal);B.vertexAttribPointer(b.normal,3,B.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(B.bindBuffer(B.ARRAY_BUFFER,d.uv),B.bufferData(B.ARRAY_BUFFER,a.uvArray,B.DYNAMIC_DRAW),Y.enableAttribute(b.uv),B.vertexAttribPointer(b.uv,2,B.FLOAT,!1,0,0));a.hasColors&&0!==c.vertexColors&&(B.bindBuffer(B.ARRAY_BUFFER,d.color),B.bufferData(B.ARRAY_BUFFER,a.colorArray,B.DYNAMIC_DRAW),Y.enableAttribute(b.color),B.vertexAttribPointer(b.color,3,B.FLOAT,!1,0,0));Y.disableUnusedAttributes();
13163 B.drawArrays(B.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){r(d);var h=l(a,b,d,e),k=!1;a=c.id+"_"+h.id+"_"+d.wireframe;a!==U&&(U=a,k=!0);b=e.morphTargetInfluences;if(void 0!==b){var m=[];a=0;for(var n=b.length;a<n;a++)k=b[a],m.push([k,a]);m.sort(g);8<m.length&&(m.length=8);var p=c.morphAttributes;a=0;for(n=m.length;a<n;a++)k=m[a],O[a]=k[0],0!==k[0]?(b=k[1],!0===d.morphTargets&&p.position&&c.addAttribute("morphTarget"+a,p.position[b]),!0===d.morphNormals&&p.normal&&
13164 c.addAttribute("morphNormal"+a,p.normal[b])):(!0===d.morphTargets&&c.removeAttribute("morphTarget"+a),!0===d.morphNormals&&c.removeAttribute("morphNormal"+a));a=m.length;for(b=O.length;a<b;a++)O[a]=0;h.getUniforms().setValue(B,"morphTargetInfluences",O);k=!0}b=c.index;n=c.attributes.position;m=1;!0===d.wireframe&&(b=ta.getWireframeAttribute(c),m=2);null!==b?(a=Ma,a.setIndex(b)):a=La;if(k){a:{var k=void 0,x;if(c&&c.isInstancedBufferGeometry&&(x=ja.get("ANGLE_instanced_arrays"),null===x)){console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");
13165 break a}void 0===k&&(k=0);Y.initAttributes();var p=c.attributes,h=h.getAttributes(),u=d.defaultAttributeValues,q;for(q in h){var v=h[q];if(0<=v){var t=p[q];if(void 0!==t){var z=t.normalized,F=t.itemSize,I=ta.getAttributeProperties(t),E=I.__webglBuffer,M=I.type,I=I.bytesPerElement;if(t.isInterleavedBufferAttribute){var A=t.data,K=A.stride,t=t.offset;A&&A.isInstancedInterleavedBuffer?(Y.enableAttributeAndDivisor(v,A.meshPerAttribute,x),void 0===c.maxInstancedCount&&(c.maxInstancedCount=A.meshPerAttribute*
13166 A.count)):Y.enableAttribute(v);B.bindBuffer(B.ARRAY_BUFFER,E);B.vertexAttribPointer(v,F,M,z,K*I,(k*K+t)*I)}else t.isInstancedBufferAttribute?(Y.enableAttributeAndDivisor(v,t.meshPerAttribute,x),void 0===c.maxInstancedCount&&(c.maxInstancedCount=t.meshPerAttribute*t.count)):Y.enableAttribute(v),B.bindBuffer(B.ARRAY_BUFFER,E),B.vertexAttribPointer(v,F,M,z,0,k*F*I)}else if(void 0!==u&&(z=u[q],void 0!==z))switch(z.length){case 2:B.vertexAttrib2fv(v,z);break;case 3:B.vertexAttrib3fv(v,z);break;case 4:B.vertexAttrib4fv(v,
13167 z);break;default:B.vertexAttrib1fv(v,z)}}}Y.disableUnusedAttributes()}null!==b&&B.bindBuffer(B.ELEMENT_ARRAY_BUFFER,ta.getAttributeBuffer(b))}x=0;null!==b?x=b.count:void 0!==n&&(x=n.count);b=c.drawRange.start*m;n=null!==f?f.start*m:0;q=Math.max(b,n);f=Math.max(0,Math.min(x,b+c.drawRange.count*m,n+(null!==f?f.count*m:Infinity))-1-q+1);if(0!==f){if(e.isMesh)if(!0===d.wireframe)Y.setLineWidth(d.wireframeLinewidth*(null===V?Sa:1)),a.setMode(B.LINES);else switch(e.drawMode){case 0:a.setMode(B.TRIANGLES);
13168 break;case 1:a.setMode(B.TRIANGLE_STRIP);break;case 2:a.setMode(B.TRIANGLE_FAN)}else e.isLine?(d=d.linewidth,void 0===d&&(d=1),Y.setLineWidth(d*(null===V?Sa:1)),e.isLineSegments?a.setMode(B.LINES):a.setMode(B.LINE_STRIP)):e.isPoints&&a.setMode(B.POINTS);c&&c.isInstancedBufferGeometry?0<c.maxInstancedCount&&a.renderInstances(c,q,f):a.render(q,f)}};this.render=function(a,b,c,d){if(void 0!==b&&!0!==b.isCamera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{U=
13169 "";L=-1;W=null;!0===a.autoUpdate&&a.updateMatrixWorld();null===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);sa.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);na.setFromMatrix(sa);J.length=0;Na=C=-1;P.length=0;R.length=0;ua=this.localClippingEnabled;pa=da.init(this.clippingPlanes,ua,b);p(a,b);ca.length=C+1;G.length=Na+1;!0===T.sortObjects&&(ca.sort(h),G.sort(k));pa&&da.beginShadows();for(var e=J,f=0,g=0,m=e.length;g<m;g++){var x=e[g];x.castShadow&&(aa.shadows[f++]=
13170 x)}aa.shadows.length=f;Pa.render(a,b);for(var e=J,r=x=0,l=0,w,u,v,q,t=b.matrixWorldInverse,z=0,F=0,I=0,E=0,M=0,f=0,g=e.length;f<g;f++)if(m=e[f],w=m.color,u=m.intensity,v=m.distance,q=m.shadow&&m.shadow.map?m.shadow.map.texture:null,m.isAmbientLight)x+=w.r*u,r+=w.g*u,l+=w.b*u;else if(m.isDirectionalLight){var A=Aa.get(m);A.color.copy(m.color).multiplyScalar(m.intensity);A.direction.setFromMatrixPosition(m.matrixWorld);ba.setFromMatrixPosition(m.target.matrixWorld);A.direction.sub(ba);A.direction.transformDirection(t);
13171 if(A.shadow=m.castShadow)A.shadowBias=m.shadow.bias,A.shadowRadius=m.shadow.radius,A.shadowMapSize=m.shadow.mapSize;aa.directionalShadowMap[z]=q;aa.directionalShadowMatrix[z]=m.shadow.matrix;aa.directional[z++]=A}else if(m.isSpotLight){A=Aa.get(m);A.position.setFromMatrixPosition(m.matrixWorld);A.position.applyMatrix4(t);A.color.copy(w).multiplyScalar(u);A.distance=v;A.direction.setFromMatrixPosition(m.matrixWorld);ba.setFromMatrixPosition(m.target.matrixWorld);A.direction.sub(ba);A.direction.transformDirection(t);
13172 A.coneCos=Math.cos(m.angle);A.penumbraCos=Math.cos(m.angle*(1-m.penumbra));A.decay=0===m.distance?0:m.decay;if(A.shadow=m.castShadow)A.shadowBias=m.shadow.bias,A.shadowRadius=m.shadow.radius,A.shadowMapSize=m.shadow.mapSize;aa.spotShadowMap[I]=q;aa.spotShadowMatrix[I]=m.shadow.matrix;aa.spot[I++]=A}else if(m.isRectAreaLight)A=Aa.get(m),A.color.copy(w).multiplyScalar(u/(m.width*m.height)),A.position.setFromMatrixPosition(m.matrixWorld),A.position.applyMatrix4(t),xa.identity(),wa.copy(m.matrixWorld),
13173 wa.premultiply(t),xa.extractRotation(wa),A.halfWidth.set(.5*m.width,0,0),A.halfHeight.set(0,.5*m.height,0),A.halfWidth.applyMatrix4(xa),A.halfHeight.applyMatrix4(xa),aa.rectArea[E++]=A;else if(m.isPointLight){A=Aa.get(m);A.position.setFromMatrixPosition(m.matrixWorld);A.position.applyMatrix4(t);A.color.copy(m.color).multiplyScalar(m.intensity);A.distance=m.distance;A.decay=0===m.distance?0:m.decay;if(A.shadow=m.castShadow)A.shadowBias=m.shadow.bias,A.shadowRadius=m.shadow.radius,A.shadowMapSize=m.shadow.mapSize;
13174 aa.pointShadowMap[F]=q;void 0===aa.pointShadowMatrix[F]&&(aa.pointShadowMatrix[F]=new H);ba.setFromMatrixPosition(m.matrixWorld).negate();aa.pointShadowMatrix[F].identity().setPosition(ba);aa.point[F++]=A}else m.isHemisphereLight&&(A=Aa.get(m),A.direction.setFromMatrixPosition(m.matrixWorld),A.direction.transformDirection(t),A.direction.normalize(),A.skyColor.copy(m.color).multiplyScalar(u),A.groundColor.copy(m.groundColor).multiplyScalar(u),aa.hemi[M++]=A);aa.ambient[0]=x;aa.ambient[1]=r;aa.ambient[2]=
13175 l;aa.directional.length=z;aa.spot.length=I;aa.rectArea.length=E;aa.point.length=F;aa.hemi.length=M;aa.hash=z+","+F+","+I+","+E+","+M+","+aa.shadows.length;pa&&da.endShadows();qa.calls=0;qa.vertices=0;qa.faces=0;qa.points=0;void 0===c&&(c=null);this.setRenderTarget(c);e=a.background;null===e?Y.buffers.color.setClear(Ga.r,Ga.g,Ga.b,fb,K):e&&e.isColor&&(Y.buffers.color.setClear(e.r,e.g,e.b,1,K),d=!0);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);e&&e.isCubeTexture?
13176 (Ca.projectionMatrix.copy(b.projectionMatrix),Ca.matrixWorld.extractRotation(b.matrixWorld),Ca.matrixWorldInverse.getInverse(Ca.matrixWorld),ya.material.uniforms.tCube.value=e,ya.modelViewMatrix.multiplyMatrices(Ca.matrixWorldInverse,ya.matrixWorld),ta.update(ya),T.renderBufferDirect(Ca,null,ya.geometry,ya.material,ya,null)):e&&e.isTexture&&(Ea.material.map=e,ta.update(Ea),T.renderBufferDirect(Oa,null,Ea.geometry,Ea.material,Ea,null));a.overrideMaterial?(d=a.overrideMaterial,n(ca,a,b,d),n(G,a,b,d)):
13177 (Y.setBlending(0),n(ca,a,b),n(G,a,b));Qa.render(a,b);Ra.render(a,b,Z);c&&va.updateRenderTargetMipmap(c);Y.setDepthTest(!0);Y.setDepthWrite(!0);Y.setColorWrite(!0)}};this.setFaceCulling=function(a,b){Y.setCullFace(a);Y.setFlipSided(0===b)};this.allocTextureUnit=function(){var a=ea;a>=ma.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+ma.maxTextures);ea+=1;return a};this.setTexture2D=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTarget&&
13178 (a||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);va.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);va.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."),
13179 a=!0),b=b.texture);b&&b.isCubeTexture||Array.isArray(b.image)&&6===b.image.length?va.setTextureCube(b,c):va.setTextureCubeDynamic(b,c)}}();this.getCurrentRenderTarget=function(){return V};this.setRenderTarget=function(a){(V=a)&&void 0===ha.get(a).__webglFramebuffer&&va.setupRenderTarget(a);var b=a&&a.isWebGLRenderTargetCube,c;a?(c=ha.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,X.copy(a.scissor),Ta=a.scissorTest,Z.copy(a.viewport)):(c=null,X.copy(fa).multiplyScalar(Sa),Ta=
13180 ka,Z.copy(ia).multiplyScalar(Sa));S!==c&&(B.bindFramebuffer(B.FRAMEBUFFER,c),S=c);Y.scissor(X);Y.setScissorTest(Ta);Y.viewport(Z);b&&(b=ha.get(a.texture),B.framebufferTexture2D(B.FRAMEBUFFER,B.COLOR_ATTACHMENT0,B.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,f){if(!1===(a&&a.isWebGLRenderTarget))console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var g=ha.get(a).__webglFramebuffer;
13181 if(g){var h=!1;g!==S&&(B.bindFramebuffer(B.FRAMEBUFFER,g),h=!0);try{var k=a.texture,m=k.format,n=k.type;1023!==m&&t(m)!==B.getParameter(B.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===n||t(n)===B.getParameter(B.IMPLEMENTATION_COLOR_READ_TYPE)||1015===n&&(ja.get("OES_texture_float")||ja.get("WEBGL_color_buffer_float"))||1016===n&&ja.get("EXT_color_buffer_half_float")?B.checkFramebufferStatus(B.FRAMEBUFFER)===
13182 B.FRAMEBUFFER_COMPLETE?0<=b&&b<=a.width-d&&0<=c&&c<=a.height-e&&B.readPixels(b,c,d,e,t(m),t(n),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&&B.bindFramebuffer(B.FRAMEBUFFER,S)}}}}}function Ib(a,b){this.name="";this.color=new N(a);this.density=void 0!==b?b:2.5E-4}function Jb(a,
13183 b,c){this.name="";this.color=new N(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function jb(){G.call(this);this.type="Scene";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function Od(a,b,c,d,e){G.call(this);this.lensFlares=[];this.positionScreen=new q;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)}function kb(a){W.call(this);this.type="SpriteMaterial";this.color=new N(16777215);this.map=null;this.rotation=0;this.lights=this.fog=!1;this.setValues(a)}
13184 function zc(a){G.call(this);this.type="Sprite";this.material=void 0!==a?a:new kb}function Ac(){G.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function hd(a,b,c){this.useVertexTexture=void 0!==c?c:!0;this.identityMatrix=new H;a=a||[];this.bones=a.slice(0);this.useVertexTexture?(a=Math.sqrt(4*this.bones.length),a=Q.nextPowerOfTwo(Math.ceil(a)),this.boneTextureHeight=this.boneTextureWidth=a=Math.max(a,4),this.boneMatrices=new Float32Array(this.boneTextureWidth*
13185 this.boneTextureHeight*4),this.boneTexture=new db(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,1023,1015)):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 bonInverses is the wrong length."),this.boneInverses=[],b=0,a=this.bones.length;b<a;b++)this.boneInverses.push(new H)}function id(){G.call(this);this.type="Bone"}function jd(a,
13186 b,c){Ba.call(this,a,b);this.type="SkinnedMesh";this.bindMode="attached";this.bindMatrix=new H;this.bindMatrixInverse=new H;a=[];if(this.geometry&&void 0!==this.geometry.bones){for(var d,e=0,f=this.geometry.bones.length;e<f;++e)d=this.geometry.bones[e],b=new id,a.push(b),b.name=d.name,b.position.fromArray(d.pos),b.quaternion.fromArray(d.rotq),void 0!==d.scl&&b.scale.fromArray(d.scl);e=0;for(f=this.geometry.bones.length;e<f;++e)d=this.geometry.bones[e],-1!==d.parent&&null!==d.parent&&void 0!==a[d.parent]?
13187 a[d.parent].add(a[e]):this.add(a[e])}this.normalizeSkinWeights();this.updateMatrixWorld(!0);this.bind(new hd(a,void 0,c),this.matrixWorld)}function ia(a){W.call(this);this.type="LineBasicMaterial";this.color=new N(16777215);this.linewidth=1;this.linejoin=this.linecap="round";this.lights=!1;this.setValues(a)}function Va(a,b,c){if(1===c)return console.warn("THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead."),new fa(a,b);G.call(this);this.type="Line";this.geometry=
13188 void 0!==a?a:new D;this.material=void 0!==b?b:new ia({color:16777215*Math.random()})}function fa(a,b){Va.call(this,a,b);this.type="LineSegments"}function Oa(a){W.call(this);this.type="PointsMaterial";this.color=new N(16777215);this.map=null;this.size=1;this.sizeAttenuation=!0;this.lights=!1;this.setValues(a)}function Kb(a,b){G.call(this);this.type="Points";this.geometry=void 0!==a?a:new D;this.material=void 0!==b?b:new Oa({color:16777215*Math.random()})}function Bc(){G.call(this);this.type="Group"}
13189 function kd(a,b,c,d,e,f,g,h,k){function m(){requestAnimationFrame(m);a.readyState>=a.HAVE_CURRENT_DATA&&(x.needsUpdate=!0)}ea.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var x=this;m()}function Lb(a,b,c,d,e,f,g,h,k,m,x,p){ea.call(this,null,f,g,h,k,m,d,e,x,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function ld(a,b,c,d,e,f,g,h,k){ea.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0}function Cc(a,b,c,d,e,f,g,h,k,m){m=void 0!==m?m:1026;if(1026!==m&&1027!==
13190 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);ea.call(this,null,d,e,f,g,h,m,c,k);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 Mb(a){function b(a,b){return a-b}D.call(this);var c=[0,0],d={},e=["a","b","c"];if(a&&a.isGeometry){var f=a.vertices,g=a.faces,h=0,k=new Uint32Array(6*g.length);a=0;for(var m=
13191 g.length;a<m;a++)for(var x=g[a],p=0;3>p;p++){c[0]=x[e[p]];c[1]=x[e[(p+1)%3]];c.sort(b);var n=c.toString();void 0===d[n]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[n]=!0,h++)}c=new Float32Array(6*h);a=0;for(m=h;a<m;a++)for(p=0;2>p;p++)d=f[k[2*a+p]],h=6*a+3*p,c[h+0]=d.x,c[h+1]=d.y,c[h+2]=d.z;this.addAttribute("position",new y(c,3))}else if(a&&a.isBufferGeometry){if(null!==a.index){m=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,m.length);k=new Uint32Array(2*m.length);g=0;for(x=
13192 e.length;g<x;++g){a=e[g];p=a.start;n=a.count;a=p;for(var r=p+n;a<r;a+=3)for(p=0;3>p;p++)c[0]=m[a+p],c[1]=m[a+(p+1)%3],c.sort(b),n=c.toString(),void 0===d[n]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[n]=!0,h++)}c=new Float32Array(6*h);a=0;for(m=h;a<m;a++)for(p=0;2>p;p++)h=6*a+3*p,d=k[2*a+p],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,m=k;a<m;a++)for(p=0;3>p;p++)h=18*a+6*p,k=9*a+3*p,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+
13193 2],d=9*a+(p+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new y(c,3))}}function Nb(a,b,c){D.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f,g,h,k,m,x=b+1;for(f=0;f<=c;f++)for(m=f/c,g=0;g<=b;g++)k=g/b,h=a(k,m),d.push(h.x,h.y,h.z),e.push(k,m);a=[];var p;for(f=0;f<c;f++)for(g=0;g<b;g++)h=f*x+g,k=f*x+g+1,m=(f+1)*x+g+1,p=(f+1)*x+g,a.push(h,k,p),a.push(k,m,p);this.setIndex(new (65535<a.length?Ua:Ra)(a,1));this.addAttribute("position",
13194 new X(d,3));this.addAttribute("uv",new X(e,2));this.computeVertexNormals()}function Dc(a,b,c){S.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Nb(a,b,c));this.mergeVertices()}function xa(a,b,c,d){function e(a){h.push(a.x,a.y,a.z)}function f(b,c){var d=3*b;c.x=a[d+0];c.y=a[d+1];c.z=a[d+2]}function g(a,b,c,d){0>d&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}D.call(this);this.type="PolyhedronBufferGeometry";this.parameters=
13195 {vertices:a,indices:b,radius:c,detail:d};c=c||1;var h=[],k=[];(function(a){for(var c=new q,d=new q,g=new q,h=0;h<b.length;h+=3){f(b[h+0],c);f(b[h+1],d);f(b[h+2],g);var k=c,l=d,F=g,t=Math.pow(2,a),v=[],M,z;for(M=0;M<=t;M++){v[M]=[];var A=k.clone().lerp(F,M/t),I=l.clone().lerp(F,M/t),E=t-M;for(z=0;z<=E;z++)v[M][z]=0===z&&M===t?A:A.clone().lerp(I,z/E)}for(M=0;M<t;M++)for(z=0;z<2*(t-M)-1;z++)k=Math.floor(z/2),0===z%2?(e(v[M][k+1]),e(v[M+1][k]),e(v[M][k])):(e(v[M][k+1]),e(v[M+1][k+1]),e(v[M+1][k]))}})(d||
13196 0);(function(a){for(var b=new q,c=0;c<h.length;c+=3)b.x=h[c+0],b.y=h[c+1],b.z=h[c+2],b.normalize().multiplyScalar(a),h[c+0]=b.x,h[c+1]=b.y,h[c+2]=b.z})(c);(function(){for(var a=new q,b=0;b<h.length;b+=3)a.x=h[b+0],a.y=h[b+1],a.z=h[b+2],k.push(Math.atan2(a.z,-a.x)/2/Math.PI+.5,1-(Math.atan2(-a.y,Math.sqrt(a.x*a.x+a.z*a.z))/Math.PI+.5));for(var a=new q,b=new q,c=new q,d=new q,e=new C,f=new C,l=new C,F=0,t=0;F<h.length;F+=9,t+=6){a.set(h[F+0],h[F+1],h[F+2]);b.set(h[F+3],h[F+4],h[F+5]);c.set(h[F+6],h[F+
13197 7],h[F+8]);e.set(k[t+0],k[t+1]);f.set(k[t+2],k[t+3]);l.set(k[t+4],k[t+5]);d.copy(a).add(b).add(c).divideScalar(3);var v=Math.atan2(d.z,-d.x);g(e,t+0,a,v);g(f,t+2,b,v);g(l,t+4,c,v)}for(a=0;a<k.length;a+=6)b=k[a+0],c=k[a+2],d=k[a+4],e=Math.min(b,c,d),.9<Math.max(b,c,d)&&.1>e&&(.2>b&&(k[a+0]+=1),.2>c&&(k[a+2]+=1),.2>d&&(k[a+4]+=1))})();this.addAttribute("position",new X(h,3));this.addAttribute("normal",new X(h.slice(),3));this.addAttribute("uv",new X(k,2));this.normalizeNormals();this.boundingSphere=
13198 new Fa(new q,c)}function Ob(a,b){xa.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 Ec(a,b){S.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Ob(a,b));this.mergeVertices()}function lb(a,b){xa.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";
13199 this.parameters={radius:a,detail:b}}function Fc(a,b){S.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new lb(a,b));this.mergeVertices()}function Pb(a,b){var c=(1+Math.sqrt(5))/2;xa.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";
13200 this.parameters={radius:a,detail:b}}function Gc(a,b){S.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Pb(a,b));this.mergeVertices()}function Qb(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;xa.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,
13201 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 Hc(a,b){S.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Qb(a,b));this.mergeVertices()}function Ic(a,b,c,d){S.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,
13202 radius:c,detail:d};this.fromBufferGeometry(new xa(a,b,c,d));this.mergeVertices()}function Rb(a,b,c,d,e){function f(e){var f=a.getPointAt(e/b),m=g.normals[e];e=g.binormals[e];for(p=0;p<=d;p++){var x=p/d*Math.PI*2,l=Math.sin(x),x=-Math.cos(x);k.x=x*m.x+l*e.x;k.y=x*m.y+l*e.y;k.z=x*m.z+l*e.z;k.normalize();r.push(k.x,k.y,k.z);h.x=f.x+c*k.x;h.y=f.y+c*k.y;h.z=f.z+c*k.z;n.push(h.x,h.y,h.z)}}D.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};
13203 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 q,k=new q,m=new C,x,p,n=[],r=[],l=[],u=[];for(x=0;x<b;x++)f(x);f(!1===e?b:0);for(x=0;x<=b;x++)for(p=0;p<=d;p++)m.x=x/b,m.y=p/d,l.push(m.x,m.y);(function(){for(p=1;p<=b;p++)for(x=1;x<=d;x++){var a=(d+1)*p+(x-1),c=(d+1)*p+x,e=(d+1)*(p-1)+x;u.push((d+1)*(p-1)+(x-1),a,e);u.push(a,c,e)}})();this.setIndex(new (65535<u.length?Ua:Ra)(u,1));this.addAttribute("position",
13204 new X(n,3));this.addAttribute("normal",new X(r,3));this.addAttribute("uv",new X(l,2))}function Jc(a,b,c,d,e,f){S.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 Rb(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function Sb(a,b,c,d,e,f){function g(a,b,c,d,e){var f=Math.sin(a);
13205 b=c/b*a;c=Math.cos(b);e.x=d*(2+c)*.5*Math.cos(a);e.y=d*(2+c)*f*.5;e.z=d*Math.sin(b)*.5}D.call(this);this.type="TorusKnotBufferGeometry";this.parameters={radius:a,tube:b,tubularSegments:c,radialSegments:d,p:e,q:f};a=a||100;b=b||40;c=Math.floor(c)||64;d=Math.floor(d)||8;e=e||2;f=f||3;var h=(d+1)*(c+1),k=d*c*6,k=new y(new (65535<k?Uint32Array:Uint16Array)(k),1),m=new y(new Float32Array(3*h),3),x=new y(new Float32Array(3*h),3),h=new y(new Float32Array(2*h),2),p,n,r=0,l=0,u=new q,F=new q,t=new C,v=new q,
13206 M=new q,z=new q,A=new q,I=new q;for(p=0;p<=c;++p)for(n=p/c*e*Math.PI*2,g(n,e,f,a,v),g(n+.01,e,f,a,M),A.subVectors(M,v),I.addVectors(M,v),z.crossVectors(A,I),I.crossVectors(z,A),z.normalize(),I.normalize(),n=0;n<=d;++n){var E=n/d*Math.PI*2,K=-b*Math.cos(E),E=b*Math.sin(E);u.x=v.x+(K*I.x+E*z.x);u.y=v.y+(K*I.y+E*z.y);u.z=v.z+(K*I.z+E*z.z);m.setXYZ(r,u.x,u.y,u.z);F.subVectors(u,v).normalize();x.setXYZ(r,F.x,F.y,F.z);t.x=p/c;t.y=n/d;h.setXY(r,t.x,t.y);r++}for(n=1;n<=c;n++)for(p=1;p<=d;p++)a=(d+1)*n+(p-
13207 1),b=(d+1)*n+p,e=(d+1)*(n-1)+p,k.setX(l,(d+1)*(n-1)+(p-1)),l++,k.setX(l,a),l++,k.setX(l,e),l++,k.setX(l,a),l++,k.setX(l,b),l++,k.setX(l,e),l++;this.setIndex(k);this.addAttribute("position",m);this.addAttribute("normal",x);this.addAttribute("uv",h)}function Kc(a,b,c,d,e,f,g){S.call(this);this.type="TorusKnotGeometry";this.parameters={radius:a,tube:b,tubularSegments:c,radialSegments:d,p:e,q:f};void 0!==g&&console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.");
13208 this.fromBufferGeometry(new Sb(a,b,c,d,e,f));this.mergeVertices()}function Tb(a,b,c,d,e){D.call(this);this.type="TorusBufferGeometry";this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,arc:e};a=a||100;b=b||40;c=Math.floor(c)||8;d=Math.floor(d)||6;e=e||2*Math.PI;var f=(c+1)*(d+1),g=c*d*6,g=new (65535<g?Uint32Array:Uint16Array)(g),h=new Float32Array(3*f),k=new Float32Array(3*f),f=new Float32Array(2*f),m=0,x=0,p=0,n=new q,l=new q,w=new q,u,F;for(u=0;u<=c;u++)for(F=0;F<=d;F++){var t=
13209 F/d*e,v=u/c*Math.PI*2;l.x=(a+b*Math.cos(v))*Math.cos(t);l.y=(a+b*Math.cos(v))*Math.sin(t);l.z=b*Math.sin(v);h[m]=l.x;h[m+1]=l.y;h[m+2]=l.z;n.x=a*Math.cos(t);n.y=a*Math.sin(t);w.subVectors(l,n).normalize();k[m]=w.x;k[m+1]=w.y;k[m+2]=w.z;f[x]=F/d;f[x+1]=u/c;m+=3;x+=2}for(u=1;u<=c;u++)for(F=1;F<=d;F++)a=(d+1)*(u-1)+F-1,b=(d+1)*(u-1)+F,e=(d+1)*u+F,g[p]=(d+1)*u+F-1,g[p+1]=a,g[p+2]=e,g[p+3]=a,g[p+4]=b,g[p+5]=e,p+=6;this.setIndex(new y(g,1));this.addAttribute("position",new y(h,3));this.addAttribute("normal",
13210 new y(k,3));this.addAttribute("uv",new y(f,2))}function Lc(a,b,c,d,e){S.call(this);this.type="TorusGeometry";this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,arc:e};this.fromBufferGeometry(new Tb(a,b,c,d,e))}function La(a,b){"undefined"!==typeof a&&(S.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())}function Mc(a,b){b=b||{};var c=b.font;if(!1===(c&&c.isFont))return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."),
13211 new S;c=c.generateShapes(a,b.size,b.curveSegments);b.amount=void 0!==b.height?b.height:50;void 0===b.bevelThickness&&(b.bevelThickness=10);void 0===b.bevelSize&&(b.bevelSize=8);void 0===b.bevelEnabled&&(b.bevelEnabled=!1);La.call(this,c,b);this.type="TextGeometry"}function mb(a,b,c,d,e,f,g){D.call(this);this.type="SphereBufferGeometry";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};a=a||50;b=Math.max(3,Math.floor(b)||8);c=Math.max(2,Math.floor(c)||
13212 6);d=void 0!==d?d:0;e=void 0!==e?e:2*Math.PI;f=void 0!==f?f:0;g=void 0!==g?g:Math.PI;for(var h=f+g,k=(b+1)*(c+1),m=new y(new Float32Array(3*k),3),x=new y(new Float32Array(3*k),3),k=new y(new Float32Array(2*k),2),p=0,n=[],l=new q,w=0;w<=c;w++){for(var u=[],F=w/c,t=0;t<=b;t++){var v=t/b,M=-a*Math.cos(d+v*e)*Math.sin(f+F*g),z=a*Math.cos(f+F*g),A=a*Math.sin(d+v*e)*Math.sin(f+F*g);l.set(M,z,A).normalize();m.setXYZ(p,M,z,A);x.setXYZ(p,l.x,l.y,l.z);k.setXY(p,v,1-F);u.push(p);p++}n.push(u)}d=[];for(w=0;w<
13213 c;w++)for(t=0;t<b;t++)e=n[w][t+1],g=n[w][t],p=n[w+1][t],l=n[w+1][t+1],(0!==w||0<f)&&d.push(e,g,l),(w!==c-1||h<Math.PI)&&d.push(g,p,l);this.setIndex(new (65535<m.count?Ua:Ra)(d,1));this.addAttribute("position",m);this.addAttribute("normal",x);this.addAttribute("uv",k);this.boundingSphere=new Fa(new q,a)}function Nc(a,b,c,d,e,f,g){S.call(this);this.type="SphereGeometry";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};this.fromBufferGeometry(new mb(a,
13214 b,c,d,e,f,g))}function Ub(a,b,c,d,e,f){D.call(this);this.type="RingBufferGeometry";this.parameters={innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};a=a||20;b=b||50;e=void 0!==e?e:0;f=void 0!==f?f:2*Math.PI;c=void 0!==c?Math.max(3,c):8;d=void 0!==d?Math.max(1,d):1;var g=(c+1)*(d+1),h=c*d*6,h=new y(new (65535<h?Uint32Array:Uint16Array)(h),1),k=new y(new Float32Array(3*g),3),m=new y(new Float32Array(3*g),3),g=new y(new Float32Array(2*g),2),x=0,p=0,n,l=a,w=(b-a)/
13215 d,u=new q,F=new C,t;for(a=0;a<=d;a++){for(t=0;t<=c;t++)n=e+t/c*f,u.x=l*Math.cos(n),u.y=l*Math.sin(n),k.setXYZ(x,u.x,u.y,u.z),m.setXYZ(x,0,0,1),F.x=(u.x/b+1)/2,F.y=(u.y/b+1)/2,g.setXY(x,F.x,F.y),x++;l+=w}for(a=0;a<d;a++)for(b=a*(c+1),t=0;t<c;t++)e=n=t+b,f=n+c+1,x=n+c+2,n+=1,h.setX(p,e),p++,h.setX(p,f),p++,h.setX(p,x),p++,h.setX(p,e),p++,h.setX(p,x),p++,h.setX(p,n),p++;this.setIndex(h);this.addAttribute("position",k);this.addAttribute("normal",m);this.addAttribute("uv",g)}function Oc(a,b,c,d,e,f){S.call(this);
13216 this.type="RingGeometry";this.parameters={innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};this.fromBufferGeometry(new Ub(a,b,c,d,e,f))}function Pc(a,b,c,d){S.call(this);this.type="PlaneGeometry";this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};this.fromBufferGeometry(new ib(a,b,c,d))}function Vb(a,b,c,d){D.call(this);this.type="LatheBufferGeometry";this.parameters={points:a,segments:b,phiStart:c,phiLength:d};b=Math.floor(b)||12;c=c||0;d=d||
13217 2*Math.PI;d=Q.clamp(d,0,2*Math.PI);for(var e=(b+1)*a.length,f=b*a.length*6,g=new y(new (65535<f?Uint32Array:Uint16Array)(f),1),h=new y(new Float32Array(3*e),3),k=new y(new Float32Array(2*e),2),m=0,x=0,p=1/b,n=new q,l=new C,e=0;e<=b;e++)for(var f=c+e*p*d,w=Math.sin(f),u=Math.cos(f),f=0;f<=a.length-1;f++)n.x=a[f].x*w,n.y=a[f].y,n.z=a[f].x*u,h.setXYZ(m,n.x,n.y,n.z),l.x=e/b,l.y=f/(a.length-1),k.setXY(m,l.x,l.y),m++;for(e=0;e<b;e++)for(f=0;f<a.length-1;f++)c=f+e*a.length,m=c+a.length,p=c+a.length+1,n=
13218 c+1,g.setX(x,c),x++,g.setX(x,m),x++,g.setX(x,n),x++,g.setX(x,m),x++,g.setX(x,p),x++,g.setX(x,n),x++;this.setIndex(g);this.addAttribute("position",h);this.addAttribute("uv",k);this.computeVertexNormals();if(d===2*Math.PI)for(d=this.attributes.normal.array,g=new q,h=new q,k=new q,c=b*a.length*3,f=e=0;e<a.length;e++,f+=3)g.x=d[f+0],g.y=d[f+1],g.z=d[f+2],h.x=d[c+f+0],h.y=d[c+f+1],h.z=d[c+f+2],k.addVectors(g,h).normalize(),d[f+0]=d[c+f+0]=k.x,d[f+1]=d[c+f+1]=k.y,d[f+2]=d[c+f+2]=k.z}function Qc(a,b,c,d){S.call(this);
13219 this.type="LatheGeometry";this.parameters={points:a,segments:b,phiStart:c,phiLength:d};this.fromBufferGeometry(new Vb(a,b,c,d));this.mergeVertices()}function Wb(a,b){function c(a){var c,h,m=d.length/3;a=a.extractPoints(b);var l=a.shape,u=a.holes;if(!1===pa.isClockWise(l))for(l=l.reverse(),a=0,c=u.length;a<c;a++)h=u[a],!0===pa.isClockWise(h)&&(u[a]=h.reverse());var q=pa.triangulateShape(l,u);a=0;for(c=u.length;a<c;a++)h=u[a],l=l.concat(h);a=0;for(c=l.length;a<c;a++)h=l[a],d.push(h.x,h.y,0),e.push(0,
13220 0,1),f.push(h.x,h.y);a=0;for(c=q.length;a<c;a++)l=q[a],g.push(l[0]+m,l[1]+m,l[2]+m),k+=3}D.call(this);this.type="ShapeBufferGeometry";this.parameters={shapes:a,curveSegments:b};b=b||12;var d=[],e=[],f=[],g=[],h=0,k=0;if(!1===Array.isArray(a))c(a);else for(var m=0;m<a.length;m++)c(a[m]),this.addGroup(h,k,m),h+=k,k=0;this.setIndex(new (65535<g.length?Ua:Ra)(g,1));this.addAttribute("position",new X(d,3));this.addAttribute("normal",new X(e,3));this.addAttribute("uv",new X(f,2))}function Xb(a,b){S.call(this);
13221 this.type="ShapeGeometry";"object"===typeof b&&(console.warn("THREE.ShapeGeometry: Options parameter has been removed."),b=b.curveSegments);this.parameters={shapes:a,curveSegments:b};this.fromBufferGeometry(new Wb(a,b));this.mergeVertices()}function Yb(a,b){function c(a,b){return a-b}D.call(this);var d=Math.cos(Q.DEG2RAD*(void 0!==b?b:1)),e=[0,0],f={},g=["a","b","c"],h;a.isBufferGeometry?(h=new S,h.fromBufferGeometry(a)):h=a.clone();h.mergeVertices();h.computeFaceNormals();var k=h.vertices;h=h.faces;
13222 for(var m=0,l=h.length;m<l;m++)for(var p=h[m],n=0;3>n;n++){e[0]=p[g[n]];e[1]=p[g[(n+1)%3]];e.sort(c);var r=e.toString();void 0===f[r]?f[r]={vert1:e[0],vert2:e[1],face1:m,face2:void 0}:f[r].face2=m}e=[];for(r in f)if(g=f[r],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)m=k[g.vert1],e.push(m.x),e.push(m.y),e.push(m.z),m=k[g.vert2],e.push(m.x),e.push(m.y),e.push(m.z);this.addAttribute("position",new X(e,3))}function Wa(a,b,c,d,e,f,g,h){function k(c){var e,f,k,n=new C,p=new q,l=0,x=!0===
13223 c?a:b,M=!0===c?1:-1;f=t;for(e=1;e<=d;e++)w.setXYZ(t,0,z*M,0),u.setXYZ(t,0,M,0),n.x=.5,n.y=.5,F.setXY(t,n.x,n.y),t++;k=t;for(e=0;e<=d;e++){var y=e/d*h+g,D=Math.cos(y),y=Math.sin(y);p.x=x*y;p.y=z*M;p.z=x*D;w.setXYZ(t,p.x,p.y,p.z);u.setXYZ(t,0,M,0);n.x=.5*D+.5;n.y=.5*y*M+.5;F.setXY(t,n.x,n.y);t++}for(e=0;e<d;e++)n=f+e,p=k+e,!0===c?(r.setX(v,p),v++,r.setX(v,p+1)):(r.setX(v,p+1),v++,r.setX(v,p)),v++,r.setX(v,n),v++,l+=3;m.addGroup(A,l,!0===c?1:2);A+=l}D.call(this);this.type="CylinderBufferGeometry";this.parameters=
13224 {radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};var m=this;a=void 0!==a?a:20;b=void 0!==b?b:20;c=void 0!==c?c:100;d=Math.floor(d)||8;e=Math.floor(e)||1;f=void 0!==f?f:!1;g=void 0!==g?g:0;h=void 0!==h?h:2*Math.PI;var l=0;!1===f&&(0<a&&l++,0<b&&l++);var p=function(){var a=(d+1)*(e+1);!1===f&&(a+=(d+1)*l+d*l);return a}(),n=function(){var a=d*e*6;!1===f&&(a+=d*l*3);return a}(),r=new y(new (65535<n?Uint32Array:Uint16Array)(n),1),w=new y(new Float32Array(3*
13225 p),3),u=new y(new Float32Array(3*p),3),F=new y(new Float32Array(2*p),2),t=0,v=0,M=[],z=c/2,A=0;(function(){var f,k,n=new q,p=new q,l=0,x=(b-a)/c;for(k=0;k<=e;k++){var y=[],C=k/e,D=C*(b-a)+a;for(f=0;f<=d;f++){var G=f/d,P=G*h+g,R=Math.sin(P),P=Math.cos(P);p.x=D*R;p.y=-C*c+z;p.z=D*P;w.setXYZ(t,p.x,p.y,p.z);n.set(R,x,P).normalize();u.setXYZ(t,n.x,n.y,n.z);F.setXY(t,G,1-C);y.push(t);t++}M.push(y)}for(f=0;f<d;f++)for(k=0;k<e;k++)n=M[k+1][f],p=M[k+1][f+1],x=M[k][f+1],r.setX(v,M[k][f]),v++,r.setX(v,n),v++,
13226 r.setX(v,x),v++,r.setX(v,n),v++,r.setX(v,p),v++,r.setX(v,x),v++,l+=6;m.addGroup(A,l,0);A+=l})();!1===f&&(0<a&&k(!0),0<b&&k(!1));this.setIndex(r);this.addAttribute("position",w);this.addAttribute("normal",u);this.addAttribute("uv",F)}function nb(a,b,c,d,e,f,g,h){S.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()}
13227 function Rc(a,b,c,d,e,f,g){nb.call(this,0,a,b,c,d,e,f,g);this.type="ConeGeometry";this.parameters={radius:a,height:b,radialSegments:c,heightSegments:d,openEnded:e,thetaStart:f,thetaLength:g}}function Sc(a,b,c,d,e,f,g){Wa.call(this,0,a,b,c,d,e,f,g);this.type="ConeBufferGeometry";this.parameters={radius:a,height:b,radialSegments:c,heightSegments:d,openEnded:e,thetaStart:f,thetaLength:g}}function Zb(a,b,c,d){D.call(this);this.type="CircleBufferGeometry";this.parameters={radius:a,segments:b,thetaStart:c,
13228 thetaLength:d};a=a||50;b=void 0!==b?Math.max(3,b):8;c=void 0!==c?c:0;d=void 0!==d?d:2*Math.PI;var e=b+2,f=new Float32Array(3*e),g=new Float32Array(3*e),e=new Float32Array(2*e);g[2]=1;e[0]=.5;e[1]=.5;for(var h=0,k=3,m=2;h<=b;h++,k+=3,m+=2){var l=c+h/b*d;f[k]=a*Math.cos(l);f[k+1]=a*Math.sin(l);g[k+2]=1;e[m]=(f[k]/a+1)/2;e[m+1]=(f[k+1]/a+1)/2}c=[];for(k=1;k<=b;k++)c.push(k,k+1,0);this.setIndex(new y(new Uint16Array(c),1));this.addAttribute("position",new y(f,3));this.addAttribute("normal",new y(g,3));
13229 this.addAttribute("uv",new y(e,2));this.boundingSphere=new Fa(new q,a)}function Tc(a,b,c,d){S.call(this);this.type="CircleGeometry";this.parameters={radius:a,segments:b,thetaStart:c,thetaLength:d};this.fromBufferGeometry(new Zb(a,b,c,d))}function $b(a,b,c,d,e,f){S.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new hb(a,b,c,d,e,f));this.mergeVertices()}function ac(){Ia.call(this,{uniforms:Ja.merge([U.lights,
13230 {opacity:{value:1}}]),vertexShader:Z.shadow_vert,fragmentShader:Z.shadow_frag});this.transparent=this.lights=!0;Object.defineProperties(this,{opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(a){this.uniforms.opacity.value=a}}})}function bc(a){Ia.call(this,a);this.type="RawShaderMaterial"}function Uc(a){this.uuid=Q.generateUUID();this.type="MultiMaterial";this.materials=Array.isArray(a)?a:[];this.visible=!0}function Pa(a){W.call(this);this.defines={STANDARD:""};
13231 this.type="MeshStandardMaterial";this.color=new N(16777215);this.metalness=this.roughness=.5;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new N(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new C(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.metalnessMap=this.roughnessMap=null;this.envMapIntensity=1;this.refractionRatio=
13232 .98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)}function ob(a){Pa.call(this);this.defines={PHYSICAL:""};this.type="MeshPhysicalMaterial";this.reflectivity=.5;this.clearCoatRoughness=this.clearCoat=0;this.setValues(a)}function Ca(a){W.call(this);this.type="MeshPhongMaterial";this.color=new N(16777215);this.specular=new N(1118481);this.shininess=30;this.lightMap=this.map=null;
13233 this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new N(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new C(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;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.morphNormals=
13234 this.morphTargets=this.skinning=!1;this.setValues(a)}function pb(a){Ca.call(this);this.defines={TOON:""};this.type="MeshToonMaterial";this.gradientMap=null;this.setValues(a)}function qb(a){W.call(this,a);this.type="MeshNormalMaterial";this.bumpMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new C(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.morphNormals=this.morphTargets=this.skinning=this.lights=this.fog=
13235 !1;this.setValues(a)}function rb(a){W.call(this);this.type="MeshLambertMaterial";this.color=new N(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new N(0);this.emissiveIntensity=1;this.envMap=this.alphaMap=this.specularMap=this.emissiveMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphNormals=this.morphTargets=
13236 this.skinning=!1;this.setValues(a)}function sb(a){W.call(this);this.type="LineDashedMaterial";this.color=new N(16777215);this.scale=this.linewidth=1;this.dashSize=3;this.gapSize=1;this.lights=!1;this.setValues(a)}function Pd(a,b,c){var d=this,e=!1,f=0,g=0;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!==
13237 d.onLoad))d.onLoad()};this.itemError=function(a){if(void 0!==d.onError)d.onError(a)}}function Ma(a){this.manager=void 0!==a?a:va}function Ee(a){this.manager=void 0!==a?a:va;this._parser=null}function Qd(a){this.manager=void 0!==a?a:va;this._parser=null}function Vc(a){this.manager=void 0!==a?a:va}function Rd(a){this.manager=void 0!==a?a:va}function md(a){this.manager=void 0!==a?a:va}function na(a,b){G.call(this);this.type="Light";this.color=new N(a);this.intensity=void 0!==b?b:1;this.receiveShadow=
13238 void 0}function nd(a,b,c){na.call(this,a,c);this.type="HemisphereLight";this.castShadow=void 0;this.position.copy(G.DefaultUp);this.updateMatrix();this.groundColor=new N(b)}function tb(a){this.camera=a;this.bias=0;this.radius=1;this.mapSize=new C(512,512);this.map=null;this.matrix=new H}function od(){tb.call(this,new Ha(50,1,.5,500))}function pd(a,b,c,d,e,f){na.call(this,a,b);this.type="SpotLight";this.position.copy(G.DefaultUp);this.updateMatrix();this.target=new G;Object.defineProperty(this,"power",
13239 {get:function(){return this.intensity*Math.PI},set:function(a){this.intensity=a/Math.PI}});this.distance=void 0!==c?c:0;this.angle=void 0!==d?d:Math.PI/3;this.penumbra=void 0!==e?e:0;this.decay=void 0!==f?f:1;this.shadow=new od}function qd(a,b,c,d){na.call(this,a,b);this.type="PointLight";Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(a){this.intensity=a/(4*Math.PI)}});this.distance=void 0!==c?c:0;this.decay=void 0!==d?d:1;this.shadow=new tb(new Ha(90,
13240 1,.5,500))}function rd(a){tb.call(this,new Hb(-5,5,5,-5,.5,500))}function sd(a,b){na.call(this,a,b);this.type="DirectionalLight";this.position.copy(G.DefaultUp);this.updateMatrix();this.target=new G;this.shadow=new rd}function td(a,b){na.call(this,a,b);this.type="AmbientLight";this.castShadow=void 0}function qa(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c}function ud(a,b,c,d){qa.call(this,a,b,c,d);this._offsetNext=
13241 this._weightNext=this._offsetPrev=this._weightPrev=-0}function Wc(a,b,c,d){qa.call(this,a,b,c,d)}function vd(a,b,c,d){qa.call(this,a,b,c,d)}function ub(a,b,c,d){if(void 0===a)throw Error("track name is undefined");if(void 0===b||0===b.length)throw Error("no keyframes in track named "+a);this.name=a;this.times=ba.convertArray(b,this.TimeBufferType);this.values=ba.convertArray(c,this.ValueBufferType);this.setInterpolation(d||this.DefaultInterpolation);this.validate();this.optimize()}function cc(a,b,
13242 c,d){ub.call(this,a,b,c,d)}function wd(a,b,c,d){qa.call(this,a,b,c,d)}function Xc(a,b,c,d){ub.call(this,a,b,c,d)}function dc(a,b,c,d){ub.call(this,a,b,c,d)}function xd(a,b,c,d){ub.call(this,a,b,c,d)}function yd(a,b,c){ub.call(this,a,b,c)}function zd(a,b,c,d){ub.call(this,a,b,c,d)}function vb(a,b,c,d){ub.apply(this,arguments)}function ta(a,b,c){this.name=a;this.tracks=c;this.duration=void 0!==b?b:-1;this.uuid=Q.generateUUID();0>this.duration&&this.resetDuration();this.optimize()}function Ad(a){this.manager=
13243 void 0!==a?a:va;this.textures={}}function Sd(a){this.manager=void 0!==a?a:va}function wb(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){}}function Td(a){"boolean"===typeof a&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),a=void 0);this.manager=void 0!==a?a:va;this.withCredentials=!1}function Fe(a){this.manager=void 0!==a?a:va;this.texturePath=""}function wa(){}function Qa(a,b){this.v1=a;this.v2=b}function Yc(){this.curves=
13244 [];this.autoClose=!1}function Xa(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0}function xb(a){this.points=void 0===a?[]:a}function yb(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d}function zb(a,b,c){this.v0=a;this.v1=b;this.v2=c}function Ab(){Zc.apply(this,arguments);this.holes=[]}function Zc(a){Yc.call(this);this.currentPoint=new C;a&&this.fromPoints(a)}function Ud(){this.subPaths=[];this.currentPath=
13245 null}function Vd(a){this.data=a}function Ge(a){this.manager=void 0!==a?a:va}function Wd(a){this.manager=void 0!==a?a:va}function Xd(a,b,c,d){na.call(this,a,b);this.type="RectAreaLight";this.position.set(0,1,0);this.updateMatrix();this.width=void 0!==c?c:10;this.height=void 0!==d?d:10}function He(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new Ha;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new Ha;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=
13246 !1}function Bd(a,b,c){G.call(this);this.type="CubeCamera";var d=new Ha(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new q(1,0,0));this.add(d);var e=new Ha(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new q(-1,0,0));this.add(e);var f=new Ha(90,1,a,b);f.up.set(0,0,1);f.lookAt(new q(0,1,0));this.add(f);var g=new Ha(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new q(0,-1,0));this.add(g);var h=new Ha(90,1,a,b);h.up.set(0,-1,0);h.lookAt(new q(0,0,1));this.add(h);var k=new Ha(90,1,a,b);k.up.set(0,-1,0);k.lookAt(new q(0,0,-1));this.add(k);
13247 this.renderTarget=new Eb(c,c,{format:1022,magFilter:1006,minFilter:1006});this.updateCubeMap=function(a,b){null===this.parent&&this.updateMatrixWorld();var c=this.renderTarget,n=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=n;c.activeCubeFace=5;a.render(b,k,c);a.setRenderTarget(null)}}function Yd(){G.call(this);
13248 this.type="AudioListener";this.context=Zd.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function ec(a){G.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.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filters=[]}function $d(a){ec.call(this,a);this.panner=
13249 this.context.createPanner();this.panner.connect(this.gain)}function ae(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 Cd(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=
13250 this.useCount=this.cumulativeWeight=0}function ka(a,b,c){this.path=b;this.parsedPath=c||ka.parseTrackName(b);this.node=ka.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function be(a){this.uuid=Q.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var b={};this._indicesByUUID=b;for(var c=0,d=arguments.length;c!==d;++c)b[arguments[c].uuid]=c;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var e=this;this.stats={objects:{get total(){return e._objects.length},
13251 get inUse(){return this.total-e.nCachedObjects_}},get bindingsPerObject(){return e._bindings.length}}}function ce(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=
13252 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 de(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function Dd(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function Bb(){D.call(this);
13253 this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function ee(a,b,c,d){this.uuid=Q.generateUUID();this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0===d}function fc(a,b){this.uuid=Q.generateUUID();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.onUploadCallback=function(){};this.version=0}function gc(a,b,c){fc.call(this,a,b);this.meshPerAttribute=c||1}function hc(a,b,c){y.call(this,a,b);this.meshPerAttribute=
13254 c||1}function fe(a,b,c,d){this.ray=new bb(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 Ie(a,b){return a.distance-b.distance}function ge(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e=a.length;d<e;d++)ge(a[d],b,c,!0)}}function he(a){this.autoStart=
13255 void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function ie(a,b,c){this.radius=void 0!==a?a:1;this.phi=void 0!==b?b:0;this.theta=void 0!==c?c:0;return this}function je(a,b,c){this.radius=void 0!==a?a:1;this.theta=void 0!==b?b:0;this.y=void 0!==c?c:0;return this}function ua(a,b){Ba.call(this,a,b);this.animationsMap={};this.animationsList=[];var c=this.geometry.morphTargets.length;this.createAnimation("__default",0,c-1,c/1);this.setAnimationWeight("__default",1)}function $c(a){G.call(this);
13256 this.material=a;this.render=function(a){}}function ad(a,b,c,d){this.object=a;this.size=void 0!==b?b:1;a=void 0!==c?c:16711680;d=void 0!==d?d:1;b=0;(c=this.object.geometry)&&c.isGeometry?b=3*c.faces.length:c&&c.isBufferGeometry&&(b=c.attributes.normal.count);c=new D;b=new X(6*b,3);c.addAttribute("position",b);fa.call(this,c,new ia({color:a,linewidth:d}));this.matrixAutoUpdate=!1;this.update()}function ic(a){G.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=
13257 !1;a=new D;for(var b=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1],c=0,d=1;32>c;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 X(b,3));b=new ia({fog:!1});this.cone=new fa(a,b);this.add(this.cone);this.update()}function jc(a){this.bones=this.getBoneList(a);for(var b=new D,c=[],d=[],e=new N(0,0,1),f=new N(0,1,0),g=0;g<this.bones.length;g++){var h=this.bones[g];h.parent&&h.parent.isBone&&(c.push(0,
13258 0,0),c.push(0,0,0),d.push(e.r,e.g,e.b),d.push(f.r,f.g,f.b))}b.addAttribute("position",new X(c,3));b.addAttribute("color",new X(d,3));c=new ia({vertexColors:2,depthTest:!1,depthWrite:!1,transparent:!0});fa.call(this,b,c);this.root=a;this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.update()}function kc(a,b){this.light=a;this.light.updateMatrixWorld();var c=new mb(b,4,2),d=new Ka({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);Ba.call(this,c,d);this.matrix=
13259 this.light.matrixWorld;this.matrixAutoUpdate=!1}function lc(a){G.call(this);this.light=a;this.light.updateMatrixWorld();var b=new Ka({color:a.color,fog:!1});a=new Ka({color:a.color,fog:!1,wireframe:!0});var c=new D;c.addAttribute("position",new y(new Float32Array(18),3));this.add(new Ba(c,b));this.add(new Ba(c,a));this.update()}function mc(a,b){G.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;var c=new lb(b);c.rotateY(.5*Math.PI);var d=new Ka({vertexColors:2,
13260 wireframe:!0}),e=c.getAttribute("position"),e=new Float32Array(3*e.count);c.addAttribute("color",new y(e,3));this.add(new Ba(c,d));this.update()}function bd(a,b,c,d){a=a||10;b=b||10;c=new N(void 0!==c?c:4473924);d=new N(void 0!==d?d:8947848);for(var e=b/2,f=2*a/b,g=[],h=[],k=0,m=0,l=-a;k<=b;k++,l+=f){g.push(-a,0,l,a,0,l);g.push(l,0,-a,l,0,a);var p=k===e?c:d;p.toArray(h,m);m+=3;p.toArray(h,m);m+=3;p.toArray(h,m);m+=3;p.toArray(h,m);m+=3}a=new D;a.addAttribute("position",new X(g,3));a.addAttribute("color",
13261 new X(h,3));g=new ia({vertexColors:2});fa.call(this,a,g)}function Ed(a,b,c,d,e,f){a=a||10;b=b||16;c=c||8;d=d||64;e=new N(void 0!==e?e:4473924);f=new N(void 0!==f?f:8947848);var g=[],h=[],k,m,l,p,n;for(l=0;l<=b;l++)m=l/b*2*Math.PI,k=Math.sin(m)*a,m=Math.cos(m)*a,g.push(0,0,0),g.push(k,0,m),n=l&1?e:f,h.push(n.r,n.g,n.b),h.push(n.r,n.g,n.b);for(l=0;l<=c;l++)for(n=l&1?e:f,p=a-a/c*l,b=0;b<d;b++)m=b/d*2*Math.PI,k=Math.sin(m)*p,m=Math.cos(m)*p,g.push(k,0,m),h.push(n.r,n.g,n.b),m=(b+1)/d*2*Math.PI,k=Math.sin(m)*
13262 p,m=Math.cos(m)*p,g.push(k,0,m),h.push(n.r,n.g,n.b);a=new D;a.addAttribute("position",new X(g,3));a.addAttribute("color",new X(h,3));g=new ia({vertexColors:2});fa.call(this,a,g)}function cd(a,b,c,d){this.object=a;this.size=void 0!==b?b:1;a=void 0!==c?c:16776960;d=void 0!==d?d:1;b=0;(c=this.object.geometry)&&c.isGeometry?b=c.faces.length:console.warn("THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.");c=new D;b=new X(6*b,3);c.addAttribute("position",
13263 b);fa.call(this,c,new ia({color:a,linewidth:d}));this.matrixAutoUpdate=!1;this.update()}function nc(a,b){G.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;void 0===b&&(b=1);var c=new D;c.addAttribute("position",new X([-b,b,0,b,b,0,b,-b,0,-b,-b,0,-b,b,0],3));var d=new ia({fog:!1});this.add(new Va(c,d));c=new D;c.addAttribute("position",new X([0,0,0,0,0,1],3));this.add(new Va(c,d));this.update()}function dd(a){function b(a,b,d){c(a,d);c(b,d)}
13264 function c(a,b){f.push(0,0,0);g.push(b.r,b.g,b.b);void 0===h[a]&&(h[a]=[]);h[a].push(f.length/3-1)}var d=new D,e=new ia({color:16777215,vertexColors:1}),f=[],g=[],h={},k=new N(16755200),m=new N(16711680),l=new N(43775),p=new N(16777215),n=new N(3355443);b("n1","n2",k);b("n2","n4",k);b("n4","n3",k);b("n3","n1",k);b("f1","f2",k);b("f2","f4",k);b("f4","f3",k);b("f3","f1",k);b("n1","f1",k);b("n2","f2",k);b("n3","f3",k);b("n4","f4",k);b("p","n1",m);b("p","n2",m);b("p","n3",m);b("p","n4",m);b("u1","u2",
13265 l);b("u2","u3",l);b("u3","u1",l);b("c","t",p);b("p","c",n);b("cn1","cn2",n);b("cn3","cn4",n);b("cf1","cf2",n);b("cf3","cf4",n);d.addAttribute("position",new X(f,3));d.addAttribute("color",new X(g,3));fa.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=h;this.update()}function oc(a,b){void 0===b&&(b=16776960);var c=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),
13266 d=new Float32Array(24),e=new D;e.setIndex(new y(c,1));e.addAttribute("position",new y(d,3));fa.call(this,e,new ia({color:b}));void 0!==a&&this.update(a)}function Cb(a,b,c,d,e,f){G.call(this);void 0===d&&(d=16776960);void 0===c&&(c=1);void 0===e&&(e=.2*c);void 0===f&&(f=.2*e);this.position.copy(b);this.line=new Va(Je,new ia({color:d}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new Ba(Ke,new Ka({color:d}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(a);this.setLength(c,
13267 e,f)}function Fd(a){a=a||1;var b=[0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a];a=new D;a.addAttribute("position",new X(b,3));a.addAttribute("color",new X([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));b=new ia({vertexColors:2});fa.call(this,a,b)}function Gd(a,b,c,d,e,f){Xa.call(this,a,b,c,c,d,e,f)}function Le(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");ke.call(this,a);this.type="catmullrom";this.closed=!0}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,
13268 -52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0<a?1:+a});void 0===Function.prototype.name&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}});void 0===Object.assign&&function(){Object.assign=function(a){if(void 0===a||null===a)throw new TypeError("Cannot convert undefined or null to object");for(var b=Object(a),c=1;c<arguments.length;c++){var d=arguments[c];if(void 0!==d&&null!==d)for(var e in d)Object.prototype.hasOwnProperty.call(d,
13269 e)&&(b[e]=d[e])}return b}}();Object.assign(oa.prototype,{addEventListener:function(a,b){void 0===this._listeners&&(this._listeners={});var c=this._listeners;void 0===c[a]&&(c[a]=[]);-1===c[a].indexOf(b)&&c[a].push(b)},hasEventListener:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;return void 0!==c[a]&&-1!==c[a].indexOf(b)},removeEventListener:function(a,b){if(void 0!==this._listeners){var c=this._listeners[a];if(void 0!==c){var d=c.indexOf(b);-1!==d&&c.splice(d,1)}}},dispatchEvent:function(a){if(void 0!==
13270 this._listeners){var b=this._listeners[a.type];if(void 0!==b){a.target=this;var c=[],d,e=b.length;for(d=0;d<e;d++)c[d]=b[d];for(d=0;d<e;d++)c[d].call(this,a)}}}});var Me={NoBlending:0,NormalBlending:1,AdditiveBlending:2,SubtractiveBlending:3,MultiplyBlending:4,CustomBlending:5},Ne={UVMapping:300,CubeReflectionMapping:301,CubeRefractionMapping:302,EquirectangularReflectionMapping:303,EquirectangularRefractionMapping:304,SphericalReflectionMapping:305,CubeUVReflectionMapping:306,CubeUVRefractionMapping:307},
13271 le={RepeatWrapping:1E3,ClampToEdgeWrapping:1001,MirroredRepeatWrapping:1002},me={NearestFilter:1003,NearestMipMapNearestFilter:1004,NearestMipMapLinearFilter:1005,LinearFilter:1006,LinearMipMapNearestFilter:1007,LinearMipMapLinearFilter:1008},Q={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),b=Array(36),c=0,d;return function(){for(var e=0;36>e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":
13272 (2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),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)+
13273 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*Q.DEG2RAD},radToDeg:function(a){return a*Q.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};C.prototype={constructor:C,
13274 isVector2:!0,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},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;
13275 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,
13276 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){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;
13277 return this},divide:function(a){this.x/=a.x;this.y/=a.y;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);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,b;return function(c,d){void 0===a&&(a=new C,b=new C);a.set(c,
13278 c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.multiplyScalar(Math.max(a,Math.min(b,c))/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);
13279 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},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},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))},
13280 distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},distanceToManhattan:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.multiplyScalar(a/this.length())},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+
13281 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},fromAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromAttribute().");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};var Oe=0;ea.DEFAULT_IMAGE=void 0;ea.DEFAULT_MAPPING=300;ea.prototype={constructor:ea,isTexture:!0,
13282 set needsUpdate(a){!0===a&&this.version++},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.image=a.image;this.mipmaps=a.mipmaps.slice(0);this.mapping=a.mapping;this.wrapS=a.wrapS;this.wrapT=a.wrapT;this.magFilter=a.magFilter;this.minFilter=a.minFilter;this.anisotropy=a.anisotropy;this.format=a.format;this.type=a.type;this.offset.copy(a.offset);this.repeat.copy(a.repeat);this.generateMipmaps=a.generateMipmaps;this.premultiplyAlpha=a.premultiplyAlpha;this.flipY=a.flipY;
13283 this.unpackAlignment=a.unpackAlignment;this.encoding=a.encoding;return this},toJSON:function(a){if(void 0!==a.textures[this.uuid])return a.textures[this.uuid];var b={metadata:{version:4.4,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var c=
13284 this.image;void 0===c.uuid&&(c.uuid=Q.generateUUID());if(void 0===a.images[c.uuid]){var d=a.images,e=c.uuid,f=c.uuid,g;void 0!==c.toDataURL?g=c:(g=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),g.width=c.width,g.height=c.height,g.getContext("2d").drawImage(c,0,0,c.width,c.height));g=2048<g.width||2048<g.height?g.toDataURL("image/jpeg",.6):g.toDataURL("image/png");d[e]={uuid:f,url:g}}b.image=c.uuid}return a.textures[this.uuid]=b},dispose:function(){this.dispatchEvent({type:"dispose"})},
13285 transformUv:function(a){if(300===this.mapping){a.multiply(this.repeat);a.add(this.offset);if(0>a.x||1<a.x)switch(this.wrapS){case 1E3:a.x-=Math.floor(a.x);break;case 1001:a.x=0>a.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||1<a.y)switch(this.wrapT){case 1E3:a.y-=Math.floor(a.y);break;case 1001:a.y=0>a.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.assign(ea.prototype,
13286 oa.prototype);ga.prototype={constructor:ga,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: "+
13287 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,
13288 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-=
13289 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){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;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=
13290 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){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var m=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>
13291 Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+m-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;m=(m+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>m?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>m?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>m?(c=b=.707106781,d=0):(d=Math.sqrt(m),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/
13292 a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+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));
13293 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 ga,b=new ga);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),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);
13294 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*
13295 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)},lengthManhattan: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())},setLength:function(a){return this.multiplyScalar(a/this.length())},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,
13296 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},fromAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromAttribute().");this.x=a.getX(b);
13297 this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}};Object.assign(Db.prototype,oa.prototype,{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=
13298 a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Eb.prototype=Object.create(Db.prototype);Eb.prototype.constructor=Eb;Eb.prototype.isWebGLRenderTargetCube=!0;da.prototype={constructor:da,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get w(){return this._w},set w(a){this._w=
13299 a;this.onChangeCallback()},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(!1===(a&&a.isEuler))throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c=Math.cos(a._x/2),d=Math.cos(a._y/
13300 2),e=Math.cos(a._z/2),f=Math.sin(a._x/2),g=Math.sin(a._y/2),h=Math.sin(a._z/2),k=a.order;"XYZ"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e-f*g*h):"YXZ"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e+f*g*h):"ZXY"===k?(this._x=f*d*e-c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e-f*g*h):"ZYX"===k?(this._x=f*d*e-c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e+f*g*h):"YZX"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e+
13301 f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e-f*g*h):"XZY"===k&&(this._x=f*d*e-c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e+f*g*h);if(!1!==b)this.onChangeCallback();return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this._x=a.x*d;this._y=a.y*d;this._z=a.z*d;this._w=Math.cos(c);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],m=c+f+b;0<m?(c=.5/Math.sqrt(m+1),this._w=
13302 .25/c,this._x=(k-g)*c,this._y=(d-h)*c,this._z=(e-a)*c):c>f&&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,b;return function(c,d){void 0===a&&(a=new q);b=c.dot(d)+1;1E-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,
13303 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()}}(),inverse:function(){return this.conjugate().normalize()},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+
13304 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,
13305 b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,m=b._w;this._x=c*m+f*g+d*k-e*h;this._y=d*m+f*h+e*g-c*k;this._z=e*m+f*k+c*h-d*g;this._w=f*m-c*g-d*h-e*k;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;var h=Math.sqrt(1-g*g);
13306 if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;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];
13307 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(da,{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 l=e[f+1],p=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==l||m!==p){f=1-g;var n=h*d+k*l+m*p+c*e,r=0<=
13308 n?1:-1,w=1-n*n;w>Number.EPSILON&&(w=Math.sqrt(w),n=Math.atan2(w,n*r),f=Math.sin(f*n)/w,g=Math.sin(g*n)/w);r*=g;h=h*f+d*r;k=k*f+l*r;m=m*f+p*r;c=c*f+e*r;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}});q.prototype={constructor:q,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=
13309 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."),
13310 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;
13311 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){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,
13312 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;return function(b){!1===(b&&b.isEuler)&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new da);return this.applyQuaternion(a.setFromEuler(b))}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new da);return this.applyQuaternion(a.setFromAxisAngle(b,c))}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;
13313 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;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection: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]*
13314 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;return function(b){void 0===a&&(a=new H);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new H);
13315 a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(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,
13316 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,b;return function(c,d){void 0===a&&(a=new q,b=new q);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.multiplyScalar(Math.max(a,
13317 Math.min(b,c))/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):
13318 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)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/
13319 this.length())},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){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=
13320 a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(a){var b=a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new q);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new q);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*
13321 a.lengthSq());return Math.acos(Q.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},distanceToManhattan: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=
13322 a.radius*Math.sin(a.theta);this.y=a.y;this.z=a.radius*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},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){if("number"===typeof a){console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index ).");var c=
13323 a;a=b;b=c}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},fromAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}};
13324 H.prototype={constructor:H,isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,m,l,p,n,r,w,u){var q=this.elements;q[0]=a;q[4]=b;q[8]=c;q[12]=d;q[1]=e;q[5]=f;q[9]=g;q[13]=h;q[2]=k;q[6]=m;q[10]=l;q[14]=p;q[3]=n;q[7]=r;q[11]=w;q[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 H).fromArray(this.elements)},copy:function(a){this.elements.set(a.elements);return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=
13325 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;return function(b){void 0===a&&(a=new q);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;
13326 c[1]=d[1]*e;c[2]=d[2]*e;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]*f;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*b;return this}}(),makeRotationFromEuler:function(a){!1===(a&&a.isEuler)&&console.error("THREE.Matrix: .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),g=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);if("XYZ"===a.order){a=f*h;var k=f*e,m=c*h,l=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=k+m*d;b[5]=a-
13327 l*d;b[9]=-c*g;b[2]=l-a*d;b[6]=m+k*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a+l*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]=l+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a-l*c,b[4]=-f*e,b[8]=m+k*c,b[1]=k+m*c,b[5]=f*h,b[9]=l-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,l=c*e,b[0]=g*h,b[4]=m*d-k,b[8]=a*d+l,b[1]=g*e,b[5]=l*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,l=c*d,b[0]=g*h,b[4]=l-
13328 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-l*e):"XZY"===a.order&&(a=f*g,k=f*d,m=c*g,l=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+l,b[5]=f*h,b[9]=k*e-m,b[2]=m*e-k,b[6]=c*h,b[10]=l*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(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,k=e+e;a=c*g;var m=c*h,c=c*k,l=d*h,d=d*k,e=e*k,g=f*g,h=f*h,f=f*k;b[0]=1-(l+e);b[4]=m-f;b[8]=c+h;b[1]=m+f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-
13329 h;b[6]=d+g;b[10]=1-(a+l);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},lookAt:function(){var a,b,c;return function(d,e,f){void 0===a&&(a=new q,b=new q,c=new q);var g=this.elements;c.subVectors(d,e).normalize();0===c.lengthSq()&&(c.z=1);a.crossVectors(f,c).normalize();0===a.lengthSq()&&(c.z+=1E-4,a.crossVectors(f,c).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!==
13330 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,e=this.elements,f=c[0],g=c[4],h=c[8],k=c[12],m=c[1],l=c[5],p=c[9],n=c[13],r=c[2],w=c[6],u=c[10],q=c[14],t=c[3],v=c[7],M=c[11],c=c[15],z=d[0],A=d[4],I=d[8],E=d[12],K=d[1],y=d[5],J=d[9],C=d[13],D=d[2],G=d[6],
13331 H=d[10],O=d[14],P=d[3],R=d[7],T=d[11],d=d[15];e[0]=f*z+g*K+h*D+k*P;e[4]=f*A+g*y+h*G+k*R;e[8]=f*I+g*J+h*H+k*T;e[12]=f*E+g*C+h*O+k*d;e[1]=m*z+l*K+p*D+n*P;e[5]=m*A+l*y+p*G+n*R;e[9]=m*I+l*J+p*H+n*T;e[13]=m*E+l*C+p*O+n*d;e[2]=r*z+w*K+u*D+q*P;e[6]=r*A+w*y+u*G+q*R;e[10]=r*I+w*J+u*H+q*T;e[14]=r*E+w*C+u*O+q*d;e[3]=t*z+v*K+M*D+c*P;e[7]=t*A+v*y+M*G+c*R;e[11]=t*I+v*J+M*H+c*T;e[15]=t*E+v*C+M*O+c*d;return this},multiplyToArray:function(a,b,c){var d=this.elements;this.multiplyMatrices(a,b);c[0]=d[0];c[1]=d[1];c[2]=
13332 d[2];c[3]=d[3];c[4]=d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12];c[13]=d[13];c[14]=d[14];c[15]=d[15];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},applyToVector3Array:function(){var a;return function(b,c,d){void 0===a&&(a=new q);void 0===c&&(c=0);void 0===d&&(d=b.length);for(var e=0;e<d;e+=3,c+=
13333 3)a.fromArray(b,c),a.applyMatrix4(this),a.toArray(b,c);return b}}(),applyToBufferAttribute:function(){var a;return function(b){void 0===a&&(a=new q);for(var c=0,d=b.count;c<d;c++)a.x=b.getX(c),a.y=b.getY(c),a.z=b.getZ(c),a.applyMatrix4(this),b.setXYZ(c,a.x,a.y,a.z);return b}}(),determinant:function(){var a=this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],k=a[13],m=a[2],l=a[6],p=a[10],n=a[14];return a[3]*(+e*h*l-d*k*l-e*g*p+c*k*p+d*g*n-c*h*n)+a[7]*(+b*h*n-b*k*p+e*f*p-d*f*n+d*k*m-e*h*
13334 m)+a[11]*(+b*k*l-b*g*n-e*f*l+c*f*n+e*g*m-c*k*m)+a[15]*(-d*g*m-b*h*l+b*g*p+d*f*l-c*f*p+c*h*m)},transpose:function(){var a=this.elements,b;b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},setPosition:function(a){var b=this.elements;b[12]=a.x;b[13]=a.y;b[14]=a.z;return this},getInverse:function(a,b){var c=this.elements,d=a.elements,e=d[0],f=d[1],g=d[2],h=d[3],k=d[4],m=d[5],l=d[6],p=d[7],
13335 n=d[8],r=d[9],w=d[10],u=d[11],q=d[12],t=d[13],v=d[14],d=d[15],M=r*v*p-t*w*p+t*l*u-m*v*u-r*l*d+m*w*d,z=q*w*p-n*v*p-q*l*u+k*v*u+n*l*d-k*w*d,A=n*t*p-q*r*p+q*m*u-k*t*u-n*m*d+k*r*d,I=q*r*l-n*t*l-q*m*w+k*t*w+n*m*v-k*r*v,E=e*M+f*z+g*A+h*I;if(0===E){if(!0===b)throw Error("THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0");console.warn("THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0");return this.identity()}E=1/E;c[0]=M*E;c[1]=(t*w*h-r*v*h-t*g*u+f*v*u+r*g*d-f*w*d)*E;c[2]=
13336 (m*v*h-t*l*h+t*g*p-f*v*p-m*g*d+f*l*d)*E;c[3]=(r*l*h-m*w*h-r*g*p+f*w*p+m*g*u-f*l*u)*E;c[4]=z*E;c[5]=(n*v*h-q*w*h+q*g*u-e*v*u-n*g*d+e*w*d)*E;c[6]=(q*l*h-k*v*h-q*g*p+e*v*p+k*g*d-e*l*d)*E;c[7]=(k*w*h-n*l*h+n*g*p-e*w*p-k*g*u+e*l*u)*E;c[8]=A*E;c[9]=(q*r*h-n*t*h-q*f*u+e*t*u+n*f*d-e*r*d)*E;c[10]=(k*t*h-q*m*h+q*f*p-e*t*p-k*f*d+e*m*d)*E;c[11]=(n*m*h-k*r*h-n*f*p+e*r*p+k*f*u-e*m*u)*E;c[12]=I*E;c[13]=(n*t*g-q*r*g+q*f*w-e*t*w-n*f*v+e*r*v)*E;c[14]=(q*m*g-k*t*g-q*f*l+e*t*l+k*f*v-e*m*v)*E;c[15]=(k*r*g-n*m*g+n*f*l-
13337 e*r*l-k*f*w+e*m*w)*E;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],a[4]*a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10]))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a);
13338 a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,f=a.x,g=a.y,h=a.z,k=e*f,m=e*g;this.set(k*f+c,k*g-d*h,k*h+d*g,0,k*g+d*h,m*g+c,m*h-d*f,0,k*h-d*g,m*h+d*f,e*h*h+c,0,0,0,0,1);return this},
13339 makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeShear:function(a,b,c){this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1);return this},compose:function(a,b,c){this.makeRotationFromQuaternion(b);this.scale(c);this.setPosition(a);return this},decompose:function(){var a,b;return function(c,d,e){void 0===a&&(a=new q,b=new H);var f=this.elements,g=a.set(f[0],f[1],f[2]).length(),h=a.set(f[4],f[5],f[6]).length(),k=a.set(f[8],f[9],f[10]).length();0>this.determinant()&&(g=-g);c.x=
13340 f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,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}}(),makeFrustum:function(a,b,c,d,e,f){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/(d-c);g[9]=(d+c)/(d-c);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]=
13341 0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(Q.DEG2RAD*a*.5);var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},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},
13342 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}};Za.prototype=Object.create(ea.prototype);Za.prototype.constructor=Za;Za.prototype.isCubeTexture=!0;Object.defineProperty(Za.prototype,
13343 "images",{get:function(){return this.image},set:function(a){this.image=a}});var se=new ea,te=new Za,pe=[],re=[];xe.prototype.setValue=function(a,b){for(var c=this.seq,d=0,e=c.length;d!==e;++d){var f=c[d];f.setValue(a,b[f.id])}};var Id=/([\w\d_]+)(\])?(\[|\.)?/g;$a.prototype.setValue=function(a,b,c){b=this.map[b];void 0!==b&&b.setValue(a,c,this.renderer)};$a.prototype.set=function(a,b,c){var d=this.map[c];void 0!==d&&d.setValue(a,b[c],this.renderer)};$a.prototype.setOptional=function(a,b,c){b=b[c];
13344 void 0!==b&&this.setValue(a,c,b)};$a.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)}};$a.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 Ja={merge:function(a){for(var b={},c=0;c<a.length;c++){var d=this.clone(a[c]),e;for(e in d)b[e]=d[e]}return b},clone:function(a){var b={},c;for(c in a){b[c]={};for(var d in a[c]){var e=a[c][d];e&&(e.isColor||e.isMatrix3||e.isMatrix4||
13345 e.isVector2||e.isVector3||e.isVector4||e.isTexture)?b[c][d]=e.clone():Array.isArray(e)?b[c][d]=e.slice():b[c][d]=e}}return b}},Z={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",
13346 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\t\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t\t}\n\t\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 ltcTextureCoords( const in GeometricContext geometry, 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\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tfloat theta = acos( dot( N, V ) );\n\tvec2 uv = vec2(\n\t\tsqrt( saturate( roughness ) ),\n\t\tsaturate( theta / ( 0.5 * PI ) ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nvoid clipQuadToHorizon( inout vec3 L[5], out int n ) {\n\tint config = 0;\n\tif ( L[0].z > 0.0 ) config += 1;\n\tif ( L[1].z > 0.0 ) config += 2;\n\tif ( L[2].z > 0.0 ) config += 4;\n\tif ( L[3].z > 0.0 ) config += 8;\n\tn = 0;\n\tif ( config == 0 ) {\n\t} else if ( config == 1 ) {\n\t\tn = 3;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 2 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 3 ) {\n\t\tn = 4;\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t\tL[3] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 4 ) {\n\t\tn = 3;\n\t\tL[0] = -L[3].z * L[2] + L[2].z * L[3];\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t} else if ( config == 5 ) {\n\t\tn = 0;\n\t} else if ( config == 6 ) {\n\t\tn = 4;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 7 ) {\n\t\tn = 5;\n\t\tL[4] = -L[3].z * L[0] + L[0].z * L[3];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 8 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[1] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] = L[3];\n\t} else if ( config == 9 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[2].z * L[3] + L[3].z * L[2];\n\t} else if ( config == 10 ) {\n\t\tn = 0;\n\t} else if ( config == 11 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 12 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t} else if ( config == 13 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = L[2];\n\t\tL[2] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t} else if ( config == 14 ) {\n\t\tn = 5;\n\t\tL[4] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t} else if ( config == 15 ) {\n\t\tn = 4;\n\t}\n\tif ( n == 3 )\n\t\tL[3] = L[0];\n\tif ( n == 4 )\n\t\tL[4] = L[0];\n}\nfloat integrateLtcBrdfOverRectEdge( vec3 v1, vec3 v2 ) {\n\tfloat cosTheta = dot( v1, v2 );\n\tfloat theta = acos( cosTheta );\n\tfloat res = cross( v1, v2 ).z * ( ( theta > 0.001 ) ? theta / sin( theta ) : 1.0 );\n\treturn res;\n}\nvoid initRectPoints( const in vec3 pos, const in vec3 halfWidth, const in vec3 halfHeight, out vec3 rectPoints[4] ) {\n\trectPoints[0] = pos - halfWidth - halfHeight;\n\trectPoints[1] = pos + halfWidth - halfHeight;\n\trectPoints[2] = pos + halfWidth + halfHeight;\n\trectPoints[3] = pos - halfWidth + halfHeight;\n}\nvec3 integrateLtcBrdfOverRect( const in GeometricContext geometry, const in mat3 brdfMat, const in vec3 rectPoints[4] ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tvec3 T1, T2;\n\tT1 = normalize(V - N * dot( V, N ));\n\tT2 = - cross( N, T1 );\n\tmat3 brdfWrtSurface = brdfMat * transpose( mat3( T1, T2, N ) );\n\tvec3 clippedRect[5];\n\tclippedRect[0] = brdfWrtSurface * ( rectPoints[0] - P );\n\tclippedRect[1] = brdfWrtSurface * ( rectPoints[1] - P );\n\tclippedRect[2] = brdfWrtSurface * ( rectPoints[2] - P );\n\tclippedRect[3] = brdfWrtSurface * ( rectPoints[3] - P );\n\tint n;\n\tclipQuadToHorizon(clippedRect, n);\n\tif ( n == 0 )\n\t\treturn vec3( 0, 0, 0 );\n\tclippedRect[0] = normalize( clippedRect[0] );\n\tclippedRect[1] = normalize( clippedRect[1] );\n\tclippedRect[2] = normalize( clippedRect[2] );\n\tclippedRect[3] = normalize( clippedRect[3] );\n\tclippedRect[4] = normalize( clippedRect[4] );\n\tfloat sum = 0.0;\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[0], clippedRect[1] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[1], clippedRect[2] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[2], clippedRect[3] );\n\tif (n >= 4)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[3], clippedRect[4] );\n\tif (n == 5)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[4], clippedRect[0] );\n\tsum = max( 0.0, sum );\n\tvec3 Lo_i = vec3( sum, sum, sum );\n\treturn Lo_i;\n}\nvec3 Rect_Area_Light_Specular_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight,\n\t\tconst in float roughness,\n\t\tconst in sampler2D ltcMat, const in sampler2D ltcMag ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tvec2 uv = ltcTextureCoords( geometry, roughness );\n\tvec4 brdfLtcApproxParams, t;\n\tbrdfLtcApproxParams = texture2D( ltcMat, uv );\n\tt = texture2D( ltcMat, uv );\n\tfloat brdfLtcScalar = texture2D( ltcMag, uv ).a;\n\tmat3 brdfLtcApproxMat = mat3(\n\t\tvec3( 1, 0, t.y ),\n\t\tvec3( 0, t.z, 0 ),\n\t\tvec3( t.w, 0, t.x )\n\t);\n\tvec3 specularReflectance = integrateLtcBrdfOverRect( geometry, brdfLtcApproxMat, rectPoints );\n\tspecularReflectance *= brdfLtcScalar;\n\treturn specularReflectance;\n}\nvec3 Rect_Area_Light_Diffuse_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tmat3 diffuseBrdfMat = mat3(1);\n\tvec3 diffuseReflectance = integrateLtcBrdfOverRect( geometry, diffuseBrdfMat, rectPoints );\n\treturn diffuseReflectance;\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",
13347 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 = dFdx( surf_pos );\n\t\tvec3 vSigmaY = dFdy( surf_pos );\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\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n",
13348 clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n\t\tvec4 plane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t\t\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n\t\t\tvec4 plane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t\n\t#endif\n#endif\n",
13349 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",
13350 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 transpose( const in mat3 v ) {\n\tmat3 tmp;\n\ttmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n\ttmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n\ttmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n\treturn tmp;\n}\n",
13351 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(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",
13352 defaultnormal_vertex:"#ifdef FLIP_SIDED\n\tobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\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 += normal * ( 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",
13353 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 return value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n return 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 return 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 return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n float maxComponent = max( max( value.r, value.g ), value.b );\n float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n M = ceil( M * 255.0 ) / 255.0;\n return vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float D = max( maxRange / maxRGB, 1.0 );\n D = min( floor( D ) / 255.0, 1.0 );\n return 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 vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n vec4 vResult;\n vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n vResult.w = fract(Le);\n vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n return 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 float Le = value.z * 255.0 + value.w;\n vec3 Xp_Y_XYZp;\n Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n return vec4( max(vRGB, 0.0), 1.0 );\n}\n",
13354 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, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\tvec3 reflectView = flipNormal * 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",
13355 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\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",
13356 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_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",
13357 fog_fragment:"#ifdef USE_FOG\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\t#else\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#endif\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\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\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",
13358 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",
13359 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\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\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_RECT_AREA_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\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\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",
13360 lights_pars:"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};\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 ltcMat;\tuniform sampler2D ltcMag;\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#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( 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(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = saturate( reflectVec.y * 0.5 + 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",
13361 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};\n#if NUM_RECT_AREA_LIGHTS > 0\n void RE_Direct_RectArea_BlinnPhong( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 matDiffColor = material.diffuseColor;\n vec3 matSpecColor = material.specularColor;\n vec3 lightColor = rectAreaLight.color;\n float roughness = BlinnExponentToGGXRoughness( material.specularShininess );\n vec3 spec = Rect_Area_Light_Specular_Reflectance(\n geometry,\n rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n roughness,\n ltcMat, ltcMag );\n vec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n geometry,\n rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n reflectedLight.directSpecular += lightColor * matSpecColor * spec / PI2;\n reflectedLight.directDiffuse += lightColor * matDiffColor * diff / PI2;\n }\n#endif\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_Direct_RectArea\t\tRE_Direct_RectArea_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n",
13362 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",
13363 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 void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 matDiffColor = material.diffuseColor;\n vec3 matSpecColor = material.specularColor;\n vec3 lightColor = rectAreaLight.color;\n float roughness = material.specularRoughness;\n vec3 spec = Rect_Area_Light_Specular_Reflectance(\n geometry,\n rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n roughness,\n ltcMat, ltcMag );\n vec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n geometry,\n rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n reflectedLight.directSpecular += lightColor * matSpecColor * spec;\n reflectedLight.directDiffuse += lightColor * matDiffColor * diff;\n }\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",
13364 lights_template:"\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\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 ] ) : 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\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\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\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#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 ( NUM_HEMI_LIGHTS > 0 )\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\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t \tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n\t#ifndef STANDARD\n\t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n\t#else\n\t\tvec3 clearCoatRadiance = vec3( 0.0 );\n\t#endif\n\t\t\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n",
13365 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\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\t#endif\n#endif\n",
13366 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\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n#endif\n",
13367 metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.r;\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",
13368 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",
13369 normal_flip:"#ifdef DOUBLE_SIDED\n\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n#else\n\tfloat flipNormal = 1.0;\n#endif\n",normal_fragment:"#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 ) * flipNormal;\n#endif\n#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n",
13370 normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n",
13371 packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n return 1.0 - 2.0 * rgb.xyz;\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 return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n return linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n return (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n return ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n",
13372 premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"#ifdef USE_SKINNING\n\tvec4 mvPosition = modelViewMatrix * skinned;\n#else\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.r;\n#endif\n",
13373 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 #if NUM_RECT_AREA_LIGHTS > 0\n #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\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\treturn (\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\treturn (\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\treturn texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn 1.0;\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 ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\tfloat dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\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",
13374 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 #if NUM_RECT_AREA_LIGHTS > 0\n #endif\n#endif\n",
13375 shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\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\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\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n #if NUM_RECT_AREA_LIGHTS > 0\n #endif\n#endif\n",
13376 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\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\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\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 ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\t#endif\n\t#endif\n\treturn shadow;\n}\n",
13377 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 boneTextureWidth;\n\t\tuniform int boneTextureHeight;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\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",
13378 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\tskinned = bindMatrixInverse * skinned;\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",
13379 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:"#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return 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 color *= toneMappingExposure;\n return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n",
13380 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 vec4 offsetRepeat;\n#endif\n",
13381 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 = uv * offsetRepeat.zw + offsetRepeat.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",
13382 uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\t#ifdef USE_SKINNING\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\t#else\n\t\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n\t#endif\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n",
13383 cube_vert:"varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <logdepthbuf_fragment>\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n",
13384 depth_vert:"#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n}\n",
13385 distanceRGBA_frag:"uniform vec3 lightPos;\nvarying vec4 vWorldPosition;\n#include <common>\n#include <packing>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tgl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\n}\n",distanceRGBA_vert:"varying vec4 vWorldPosition;\n#include <common>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <skinbase_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition;\n}\n",
13386 equirect_frag:"uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = saturate( tFlip * direction.y * -0.5 + 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 <common>\nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}\n",
13387 linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\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 <logdepthbuf_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",
13388 linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n}\n",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\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 <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <normal_flip>\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",
13389 meshbasic_vert:"#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_ENVMAP\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <envmap_vertex>\n}\n",
13390 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 <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <bsdfs>\n#include <lights_pars>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\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 <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <emissivemap_fragment>\n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include <lightmap_fragment>\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 <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <normal_flip>\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",
13391 meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <bsdfs>\n#include <lights_pars>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <lights_lambert_vertex>\n\t#include <shadowmap_vertex>\n}\n",
13392 meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\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 <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_flip>\n\t#include <normal_fragment>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_template>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",
13393 meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n}\n",
13394 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 <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <cube_uv_reflection_fragment>\n#include <lights_pars>\n#include <lights_physical_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\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 <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_flip>\n\t#include <normal_fragment>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_template>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",
13395 meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n}\n",
13396 normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\nvoid main() {\n\t#include <logdepthbuf_fragment>\n\t#include <normal_flip>\n\t#include <normal_fragment>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#include <premultiplied_alpha_fragment>\n\t#include <encodings_fragment>\n}\n",
13397 normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n",
13398 points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",
13399 points_vert:"uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <project_vertex>\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 <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n}\n",
13400 shadow_frag:"uniform float opacity;\n#include <common>\n#include <packing>\n#include <bsdfs>\n#include <lights_pars>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\tgl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0 - getShadowMask() ) );\n}\n",shadow_vert:"#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n}\n"};N.prototype={constructor:N,
13401 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(){function a(a,c,d){0>d&&(d+=1);1<d&&--d;return d<1/6?a+6*(c-a)*d:.5>d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,
13402 c,d){b=Q.euclideanModulo(b,1);c=Q.clamp(c,0,1);d=Q.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=
13403 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)){var d=parseFloat(c[1])/
13404 360,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&&0<a.length&&(c=Lf[a],void 0!==
13405 c?this.setHex(c):console.warn("THREE.Color: Unknown color "+a));return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a,b){void 0===b&&(b=2);this.r=Math.pow(a.r,b);this.g=Math.pow(a.g,b);this.b=Math.pow(a.b,b);return this},copyLinearToGamma:function(a,b){void 0===b&&(b=2);var c=0<b?1/b:1;this.r=Math.pow(a.r,c);this.g=Math.pow(a.g,c);this.b=Math.pow(a.b,c);return this},convertGammaToLinear:function(){var a=
13406 this.r,b=this.g,c=this.b;this.r=a*a;this.g=b*b;this.b=c*c;return this},convertLinearToGamma:function(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g);this.b=Math.sqrt(this.b);return this},getHex:function(){return 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){a=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):
13407 k/(2-e-f);switch(e){case b:g=(c-d)/k+(c<d?6:0);break;case c:g=(d-b)/k+2;break;case d:g=(b-c)/k+4}g/=6}a.h=g;a.s=f;a.l=h;return a},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:function(a,b,c){var d=this.getHSL();d.h+=a;d.s+=b;d.l+=c;this.setHSL(d.h,d.s,d.l);return this},add:function(a){this.r+=a.r;this.g+=a.g;this.b+=a.b;return this},addColors:function(a,b){this.r=a.r+b.r;this.g=a.g+b.g;this.b=a.b+b.b;return this},addScalar:function(a){this.r+=
13408 a;this.g+=a;this.b+=a;return this},sub:function(a){this.r=Math.max(0,this.r-a.r);this.g=Math.max(0,this.g-a.g);this.b=Math.max(0,this.b-a.b);return this},multiply:function(a){this.r*=a.r;this.g*=a.g;this.b*=a.b;return this},multiplyScalar:function(a){this.r*=a;this.g*=a;this.b*=a;return this},lerp:function(a,b){this.r+=(a.r-this.r)*b;this.g+=(a.g-this.g)*b;this.b+=(a.b-this.b)*b;return this},equals:function(a){return a.r===this.r&&a.g===this.g&&a.b===this.b},fromArray:function(a,b){void 0===b&&(b=
13409 0);this.r=a[b];this.g=a[b+1];this.b=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.r;a[b+1]=this.g;a[b+2]=this.b;return a},toJSON:function(){return this.getHex()}};var Lf={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,
13410 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,
13411 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,
13412 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,
13413 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,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,
13414 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};db.prototype=Object.create(ea.prototype);db.prototype.constructor=db;db.prototype.isDataTexture=!0;var U={common:{diffuse:{value:new N(15658734)},opacity:{value:1},map:{value:null},offsetRepeat:{value:new ga(0,
13415 0,1,1)},specularMap:{value:null},alphaMap:{value:null},envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98}},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 C(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},
13416 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 N(16777215)}},lights:{ambientLightColor:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},
13417 direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},
13418 width:{},height:{}}}},points:{diffuse:{value:new N(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},offsetRepeat:{value:new ga(0,0,1,1)}}},Gb={basic:{uniforms:Ja.merge([U.common,U.aomap,U.lightmap,U.fog]),vertexShader:Z.meshbasic_vert,fragmentShader:Z.meshbasic_frag},lambert:{uniforms:Ja.merge([U.common,U.aomap,U.lightmap,U.emissivemap,U.fog,U.lights,{emissive:{value:new N(0)}}]),vertexShader:Z.meshlambert_vert,fragmentShader:Z.meshlambert_frag},phong:{uniforms:Ja.merge([U.common,
13419 U.aomap,U.lightmap,U.emissivemap,U.bumpmap,U.normalmap,U.displacementmap,U.gradientmap,U.fog,U.lights,{emissive:{value:new N(0)},specular:{value:new N(1118481)},shininess:{value:30}}]),vertexShader:Z.meshphong_vert,fragmentShader:Z.meshphong_frag},standard:{uniforms:Ja.merge([U.common,U.aomap,U.lightmap,U.emissivemap,U.bumpmap,U.normalmap,U.displacementmap,U.roughnessmap,U.metalnessmap,U.fog,U.lights,{emissive:{value:new N(0)},roughness:{value:.5},metalness:{value:0},envMapIntensity:{value:1}}]),
13420 vertexShader:Z.meshphysical_vert,fragmentShader:Z.meshphysical_frag},points:{uniforms:Ja.merge([U.points,U.fog]),vertexShader:Z.points_vert,fragmentShader:Z.points_frag},dashed:{uniforms:Ja.merge([U.common,U.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Z.linedashed_vert,fragmentShader:Z.linedashed_frag},depth:{uniforms:Ja.merge([U.common,U.displacementmap]),vertexShader:Z.depth_vert,fragmentShader:Z.depth_frag},normal:{uniforms:Ja.merge([U.common,U.bumpmap,U.normalmap,
13421 U.displacementmap,{opacity:{value:1}}]),vertexShader:Z.normal_vert,fragmentShader:Z.normal_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Z.cube_vert,fragmentShader:Z.cube_frag},equirect:{uniforms:{tEquirect:{value:null},tFlip:{value:-1}},vertexShader:Z.equirect_vert,fragmentShader:Z.equirect_frag},distanceRGBA:{uniforms:{lightPos:{value:new q}},vertexShader:Z.distanceRGBA_vert,fragmentShader:Z.distanceRGBA_frag}};Gb.physical={uniforms:Ja.merge([Gb.standard.uniforms,
13422 {clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:Z.meshphysical_vert,fragmentShader:Z.meshphysical_frag};pc.prototype={constructor:pc,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;b<c;b++)this.expandByPoint(a[b]);return this},setFromCenterAndSize:function(){var a=new C;return function(b,c){var d=a.copy(c).multiplyScalar(.5);this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),clone:function(){return(new this.constructor).copy(this)},
13423 copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=Infinity;this.max.x=this.max.y=-Infinity;return this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},getCenter:function(a){a=a||new C;return this.isEmpty()?a.set(0,0):a.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(a){a=a||new C;return this.isEmpty()?a.set(0,0):a.subVectors(this.max,this.min)},expandByPoint:function(a){this.min.min(a);this.max.max(a);
13424 return this},expandByVector:function(a){this.min.sub(a);this.max.add(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},containsPoint:function(a){return a.x<this.min.x||a.x>this.max.x||a.y<this.min.y||a.y>this.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){return(b||new C).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-
13425 this.min.y))},intersectsBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y?!1:!0},clampPoint:function(a,b){return(b||new C).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new C;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);
13426 this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};var pf=0;W.prototype={constructor:W,isMaterial:!0,get needsUpdate(){return this._needsUpdate},set needsUpdate(a){!0===a&&this.update();this._needsUpdate=a},setValues:function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0===c)console.warn("THREE.Material: '"+b+"' parameter is undefined.");else{var d=this[b];void 0===d?console.warn("THREE."+this.type+": '"+b+"' is not a property of this material."):
13427 d&&d.isColor?d.set(c):d&&d.isVector3&&c&&c.isVector3?d.copy(c):this[b]="overdraw"===b?Number(c):c}}},toJSON:function(a){function b(a){var b=[],c;for(c in a){var d=a[c];delete d.metadata;b.push(d)}return b}var c=void 0===a;c&&(a={textures:{},images:{}});var d={metadata:{version:4.4,type:"Material",generator:"Material.toJSON"}};d.uuid=this.uuid;d.type=this.type;""!==this.name&&(d.name=this.name);this.color&&this.color.isColor&&(d.color=this.color.getHex());void 0!==this.roughness&&(d.roughness=this.roughness);
13428 void 0!==this.metalness&&(d.metalness=this.metalness);this.emissive&&this.emissive.isColor&&(d.emissive=this.emissive.getHex());this.specular&&this.specular.isColor&&(d.specular=this.specular.getHex());void 0!==this.shininess&&(d.shininess=this.shininess);void 0!==this.clearCoat&&(d.clearCoat=this.clearCoat);void 0!==this.clearCoatRoughness&&(d.clearCoatRoughness=this.clearCoatRoughness);this.map&&this.map.isTexture&&(d.map=this.map.toJSON(a).uuid);this.alphaMap&&this.alphaMap.isTexture&&(d.alphaMap=
13429 this.alphaMap.toJSON(a).uuid);this.lightMap&&this.lightMap.isTexture&&(d.lightMap=this.lightMap.toJSON(a).uuid);this.bumpMap&&this.bumpMap.isTexture&&(d.bumpMap=this.bumpMap.toJSON(a).uuid,d.bumpScale=this.bumpScale);this.normalMap&&this.normalMap.isTexture&&(d.normalMap=this.normalMap.toJSON(a).uuid,d.normalScale=this.normalScale.toArray());this.displacementMap&&this.displacementMap.isTexture&&(d.displacementMap=this.displacementMap.toJSON(a).uuid,d.displacementScale=this.displacementScale,d.displacementBias=
13430 this.displacementBias);this.roughnessMap&&this.roughnessMap.isTexture&&(d.roughnessMap=this.roughnessMap.toJSON(a).uuid);this.metalnessMap&&this.metalnessMap.isTexture&&(d.metalnessMap=this.metalnessMap.toJSON(a).uuid);this.emissiveMap&&this.emissiveMap.isTexture&&(d.emissiveMap=this.emissiveMap.toJSON(a).uuid);this.specularMap&&this.specularMap.isTexture&&(d.specularMap=this.specularMap.toJSON(a).uuid);this.envMap&&this.envMap.isTexture&&(d.envMap=this.envMap.toJSON(a).uuid,d.reflectivity=this.reflectivity);
13431 this.gradientMap&&this.gradientMap.isTexture&&(d.gradientMap=this.gradientMap.toJSON(a).uuid);void 0!==this.size&&(d.size=this.size);void 0!==this.sizeAttenuation&&(d.sizeAttenuation=this.sizeAttenuation);1!==this.blending&&(d.blending=this.blending);2!==this.shading&&(d.shading=this.shading);0!==this.side&&(d.side=this.side);0!==this.vertexColors&&(d.vertexColors=this.vertexColors);1>this.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;
13432 d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;0<this.alphaTest&&(d.alphaTest=this.alphaTest);!0===this.premultipliedAlpha&&(d.premultipliedAlpha=this.premultipliedAlpha);!0===this.wireframe&&(d.wireframe=this.wireframe);1<this.wireframeLinewidth&&(d.wireframeLinewidth=this.wireframeLinewidth);"round"!==this.wireframeLinecap&&(d.wireframeLinecap=this.wireframeLinecap);"round"!==this.wireframeLinejoin&&(d.wireframeLinejoin=this.wireframeLinejoin);d.skinning=this.skinning;d.morphTargets=this.morphTargets;
13433 c&&(c=b(a.textures),a=b(a.images),0<c.length&&(d.textures=c),0<a.length&&(d.images=a));return d},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.name=a.name;this.fog=a.fog;this.lights=a.lights;this.blending=a.blending;this.side=a.side;this.shading=a.shading;this.vertexColors=a.vertexColors;this.opacity=a.opacity;this.transparent=a.transparent;this.blendSrc=a.blendSrc;this.blendDst=a.blendDst;this.blendEquation=a.blendEquation;this.blendSrcAlpha=a.blendSrcAlpha;this.blendDstAlpha=
13434 a.blendDstAlpha;this.blendEquationAlpha=a.blendEquationAlpha;this.depthFunc=a.depthFunc;this.depthTest=a.depthTest;this.depthWrite=a.depthWrite;this.colorWrite=a.colorWrite;this.precision=a.precision;this.polygonOffset=a.polygonOffset;this.polygonOffsetFactor=a.polygonOffsetFactor;this.polygonOffsetUnits=a.polygonOffsetUnits;this.alphaTest=a.alphaTest;this.premultipliedAlpha=a.premultipliedAlpha;this.overdraw=a.overdraw;this.visible=a.visible;this.clipShadows=a.clipShadows;this.clipIntersection=a.clipIntersection;
13435 a=a.clippingPlanes;var b=null;if(null!==a)for(var c=a.length,b=Array(c),d=0;d!==c;++d)b[d]=a[d].clone();this.clippingPlanes=b;return this},update:function(){this.dispatchEvent({type:"update"})},dispose:function(){this.dispatchEvent({type:"dispose"})}};Object.assign(W.prototype,oa.prototype);Ia.prototype=Object.create(W.prototype);Ia.prototype.constructor=Ia;Ia.prototype.isShaderMaterial=!0;Ia.prototype.copy=function(a){W.prototype.copy.call(this,a);this.fragmentShader=a.fragmentShader;this.vertexShader=
13436 a.vertexShader;this.uniforms=Ja.clone(a.uniforms);this.defines=a.defines;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.lights=a.lights;this.clipping=a.clipping;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.extensions=a.extensions;return this};Ia.prototype.toJSON=function(a){a=W.prototype.toJSON.call(this,a);a.uniforms=this.uniforms;a.vertexShader=this.vertexShader;a.fragmentShader=this.fragmentShader;return a};ab.prototype=
13437 Object.create(W.prototype);ab.prototype.constructor=ab;ab.prototype.isMeshDepthMaterial=!0;ab.prototype.copy=function(a){W.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};ya.prototype=
13438 {constructor:ya,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;h<k;h+=3){var m=a[h],l=a[h+1],p=a[h+2];m<b&&(b=m);l<c&&(c=l);p<d&&(d=p);m>e&&(e=m);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.count;h<k;h++){var m=a.getX(h),
13439 l=a.getY(h),p=a.getZ(h);m<b&&(b=m);l<c&&(c=l);p<d&&(d=p);m>e&&(e=m);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;b<c;b++)this.expandByPoint(a[b]);return this},setFromCenterAndSize:function(){var a=new q;return function(b,c){var d=a.copy(c).multiplyScalar(.5);this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),setFromObject:function(){var a=new q;return function(b){var c=this;b.updateMatrixWorld(!0);this.makeEmpty();
13440 b.traverse(function(b){var e,f;e=b.geometry;if(void 0!==e)if(e.isGeometry){var g=e.vertices;e=0;for(f=g.length;e<f;e++)a.copy(g[e]),a.applyMatrix4(b.matrixWorld),c.expandByPoint(a)}else if(e.isBufferGeometry&&(g=e.attributes.position,void 0!==g))for(e=0,f=g.count;e<f;e++)a.fromAttribute(g,e).applyMatrix4(b.matrixWorld),c.expandByPoint(a)});return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=
13441 this.min.y=this.min.z=Infinity;this.max.x=this.max.y=this.max.z=-Infinity;return this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},getCenter:function(a){a=a||new q;return this.isEmpty()?a.set(0,0,0):a.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(a){a=a||new q;return this.isEmpty()?a.set(0,0,0):a.subVectors(this.max,this.min)},expandByPoint:function(a){this.min.min(a);this.max.max(a);return this},expandByVector:function(a){this.min.sub(a);
13442 this.max.add(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},containsPoint:function(a){return a.x<this.min.x||a.x>this.max.x||a.y<this.min.y||a.y>this.max.y||a.z<this.min.z||a.z>this.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){return(b||new q).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/
13443 (this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y||a.max.z<this.min.z||a.min.z>this.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new q);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0<a.normal.x?(b=a.normal.x*this.min.x,c=a.normal.x*this.max.x):(b=a.normal.x*
13444 this.max.x,c=a.normal.x*this.min.x);0<a.normal.y?(b+=a.normal.y*this.min.y,c+=a.normal.y*this.max.y):(b+=a.normal.y*this.max.y,c+=a.normal.y*this.min.y);0<a.normal.z?(b+=a.normal.z*this.min.z,c+=a.normal.z*this.max.z):(b+=a.normal.z*this.max.z,c+=a.normal.z*this.min.z);return b<=a.constant&&c>=a.constant},clampPoint:function(a,b){return(b||new q).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new q;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),
13445 getBoundingSphere:function(){var a=new q;return function(b){b=b||new Fa;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(){var a=[new q,new q,new q,new q,new q,new q,new q,new q];return function(b){if(this.isEmpty())return this;a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);
13446 a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);
13447 return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};Fa.prototype={constructor:Fa,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new ya;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).getCenter(d);for(var e=0,f=0,g=b.length;f<g;f++)e=Math.max(e,d.distanceToSquared(b[f]));this.radius=Math.sqrt(e);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.center.copy(a.center);
13448 this.radius=a.radius;return this},empty:function(){return 0>=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(this.center.dot(a.normal)-a.constant)<=this.radius},
13449 clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new q;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new ya;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)&&
13450 a.radius===this.radius}};za.prototype={constructor:za,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){a=a.elements;this.set(a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],
13451 a[2],a[6],a[10]);return this},applyToVector3Array:function(){var a;return function(b,c,d){void 0===a&&(a=new q);void 0===c&&(c=0);void 0===d&&(d=b.length);for(var e=0;e<d;e+=3,c+=3)a.fromArray(b,c),a.applyMatrix3(this),a.toArray(b,c);return b}}(),applyToBufferAttribute:function(){var a;return function(b){void 0===a&&(a=new q);for(var c=0,d=b.count;c<d;c++)a.x=b.getX(c),a.y=b.getY(c),a.z=b.getZ(c),a.applyMatrix3(this),b.setXYZ(c,a.x,a.y,a.z);return b}}(),multiplyScalar:function(a){var b=this.elements;
13452 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],k=a[7],a=a[8];return b*f*a-b*g*k-c*e*a+c*g*h+d*e*k-d*f*h},getInverse:function(a,b){a&&a.isMatrix4&&console.error("THREE.Matrix3.getInverse no longer takes a Matrix4 argument.");var c=a.elements,d=this.elements,e=c[0],f=c[1],g=c[2],h=c[3],k=c[4],m=c[5],l=c[6],p=c[7],c=c[8],n=c*k-m*p,r=m*l-c*h,w=p*h-k*l,q=e*n+f*r+g*w;if(0===
13453 q){if(!0===b)throw Error("THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0");console.warn("THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0");return this.identity()}q=1/q;d[0]=n*q;d[1]=(g*p-c*f)*q;d[2]=(m*f-g*k)*q;d[3]=r*q;d[4]=(c*e-g*l)*q;d[5]=(g*h-m*e)*q;d[6]=w*q;d[7]=(f*l-p*e)*q;d[8]=(k*e-f*h)*q;return this},transpose:function(){var a,b=this.elements;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()},
13454 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},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}};ma.prototype={constructor:ma,set:function(a,b){this.normal.copy(a);
13455 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 q,b=new q;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);
13456 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){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||
13457 new q).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new q;return function(b,c){var d=c||new q,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1<f?void 0:d.copy(e).multiplyScalar(f).add(b.start)}}(),intersectsLine:function(a){var b=this.distanceToPoint(a.start);a=this.distanceToPoint(a.end);return 0>b&&0<a||0>a&&0<b},intersectsBox:function(a){return a.intersectsPlane(this)},
13458 intersectsSphere:function(a){return a.intersectsPlane(this)},coplanarPoint:function(a){return(a||new q).copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var a=new q,b=new za;return function(c,d){var e=this.coplanarPoint(a).applyMatrix4(c),f=d||b.getNormalMatrix(c),f=this.normal.applyMatrix3(f).normalize();this.constant=-e.dot(f);return this}}(),translate:function(a){this.constant-=a.dot(this.normal);return this},equals:function(a){return a.normal.equals(this.normal)&&a.constant===
13459 this.constant}};qc.prototype={constructor:qc,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},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],p=c[9],n=c[10],r=c[11],q=c[12],u=c[13],F=c[14],c=c[15];
13460 b[0].setComponents(f-a,m-g,r-l,c-q).normalize();b[1].setComponents(f+a,m+g,r+l,c+q).normalize();b[2].setComponents(f+d,m+h,r+p,c+u).normalize();b[3].setComponents(f-d,m-h,r-p,c-u).normalize();b[4].setComponents(f-e,m-k,r-n,c-F).normalize();b[5].setComponents(f+e,m+k,r+n,c+F).normalize();return this},intersectsObject:function(){var a=new Fa;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),
13461 intersectsSprite:function(){var a=new Fa;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)<a)return!1;return!0},intersectsBox:function(){var a=new q,b=new q;return function(c){for(var d=this.planes,e=0;6>e;e++){var f=d[e];a.x=0<f.normal.x?c.min.x:c.max.x;b.x=0<f.normal.x?c.max.x:c.min.x;a.y=0<f.normal.y?
13462 c.min.y:c.max.y;b.y=0<f.normal.y?c.max.y:c.min.y;a.z=0<f.normal.z?c.min.z:c.max.z;b.z=0<f.normal.z?c.max.z:c.min.z;var g=f.distanceToPoint(a),f=f.distanceToPoint(b);if(0>g&&0>f)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}};bb.prototype={constructor:bb,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);
13463 this.direction.copy(a.direction);return this},at:function(a,b){return(b||new q).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(){var a=new q;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new q;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},
13464 distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new q;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 q,b=new q,c=new q;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);
13465 var h=.5*d.distanceTo(e),k=-this.direction.dot(b),m=c.dot(this.direction),l=-c.dot(b),p=c.lengthSq(),n=Math.abs(1-k*k),r;0<n?(d=k*l-m,e=k*m-l,r=h*n,0<=d?e>=-r?e<=r?(h=1/n,d*=h,e*=h,k=d*(d+k*e+2*m)+e*(k*d+e+2*l)+p):(e=h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+p):(e=-h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+p):e<=-r?(d=Math.max(0,-(-k*h+m)),e=0<d?-h:Math.min(Math.max(-h,-l),h),k=-d*d+e*(e+2*l)+p):e<=r?(d=0,e=Math.min(Math.max(-h,-l),h),k=e*(e+2*l)+p):(d=Math.max(0,-(k*h+m)),e=0<d?h:Math.min(Math.max(-h,
13466 -l),h),k=-d*d+e*(e+2*l)+p)):(e=0<k?-h:h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+p);f&&f.copy(this.direction).multiplyScalar(d).add(this.origin);g&&g.copy(b).multiplyScalar(e).add(a);return k}}(),intersectSphere:function(){var a=new q;return function(b,c){a.subVectors(b.center,this.origin);var d=a.dot(this.direction),e=a.dot(a)-d*d,f=b.radius*b.radius;if(e>f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=
13467 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){var c=this.distanceToPlane(a);return null===c?null:this.at(c,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,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;
13468 var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(f<d||d!==d)d=f;0<=g?(e=(a.min.z-h.z)*g,g*=a.max.z-h.z):(e=(a.max.z-h.z)*g,g*=a.min.z-h.z);if(c>g||e>d)return null;if(e>c||c!==c)c=e;if(g<d||d!==d)d=g;return 0>d?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new q;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=
13469 new q,b=new q,c=new q,d=new q;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(0<f){if(h)return null;h=1}else if(0>f)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.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);
13470 this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};cb.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");cb.DefaultOrder="XYZ";cb.prototype={constructor:cb,isEuler:!0,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},
13471 set order(a){this._order=a;this.onChangeCallback()},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=Q.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],m=e[9],l=e[2],p=e[6],e=e[10];b=b||
13472 this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-m,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(p,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(p,-1,1)),.99999>Math.abs(p)?(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>
13473 Math.abs(l)?(this._x=Math.atan2(p,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(p,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();
13474 return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new H);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 da;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];
13475 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 q(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};gd.prototype={constructor:gd,set:function(a){this.mask=1<<a},enable:function(a){this.mask|=1<<a},toggle:function(a){this.mask^=
13476 1<<a},disable:function(a){this.mask&=~(1<<a)},test:function(a){return 0!==(this.mask&a.mask)}};var qf=0;G.DefaultUp=new q(0,1,0);G.DefaultMatrixAutoUpdate=!0;Object.assign(G.prototype,oa.prototype,{isObject3D:!0,applyMatrix:function(a){this.matrix.multiplyMatrices(a,this.matrix);this.matrix.decompose(this.position,this.quaternion,this.scale)},setRotationFromAxisAngle:function(a,b){this.quaternion.setFromAxisAngle(a,b)},setRotationFromEuler:function(a){this.quaternion.setFromEuler(a,!0)},setRotationFromMatrix:function(a){this.quaternion.setFromRotationMatrix(a)},
13477 setRotationFromQuaternion:function(a){this.quaternion.copy(a)},rotateOnAxis:function(){var a=new da;return function(b,c){a.setFromAxisAngle(b,c);this.quaternion.multiply(a);return this}}(),rotateX:function(){var a=new q(1,0,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateY:function(){var a=new q(0,1,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateZ:function(){var a=new q(0,0,1);return function(b){return this.rotateOnAxis(a,b)}}(),translateOnAxis:function(){var a=new q;
13478 return function(b,c){a.copy(b).applyQuaternion(this.quaternion);this.position.add(a.multiplyScalar(c));return this}}(),translateX:function(){var a=new q(1,0,0);return function(b){return this.translateOnAxis(a,b)}}(),translateY:function(){var a=new q(0,1,0);return function(b){return this.translateOnAxis(a,b)}}(),translateZ:function(){var a=new q(0,0,1);return function(b){return this.translateOnAxis(a,b)}}(),localToWorld:function(a){return a.applyMatrix4(this.matrixWorld)},worldToLocal:function(){var a=
13479 new H;return function(b){return b.applyMatrix4(a.getInverse(this.matrixWorld))}}(),lookAt:function(){var a=new H;return function(b){a.lookAt(b,this.position,this.up);this.quaternion.setFromRotationMatrix(a)}}(),add:function(a){if(1<arguments.length){for(var b=0;b<arguments.length;b++)this.add(arguments[b]);return this}if(a===this)return console.error("THREE.Object3D.add: object can't be added as a child of itself.",a),this;a&&a.isObject3D?(null!==a.parent&&a.parent.remove(a),a.parent=this,a.dispatchEvent({type:"added"}),
13480 this.children.push(a)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",a);return this},remove:function(a){if(1<arguments.length)for(var b=0;b<arguments.length;b++)this.remove(arguments[b]);b=this.children.indexOf(a);-1!==b&&(a.parent=null,a.dispatchEvent({type:"removed"}),this.children.splice(b,1))},getObjectById:function(a){return this.getObjectByProperty("id",a)},getObjectByName:function(a){return this.getObjectByProperty("name",a)},getObjectByProperty:function(a,b){if(this[a]===
13481 b)return this;for(var c=0,d=this.children.length;c<d;c++){var e=this.children[c].getObjectByProperty(a,b);if(void 0!==e)return e}},getWorldPosition:function(a){a=a||new q;this.updateMatrixWorld(!0);return a.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(){var a=new q,b=new q;return function(c){c=c||new da;this.updateMatrixWorld(!0);this.matrixWorld.decompose(a,c,b);return c}}(),getWorldRotation:function(){var a=new da;return function(b){b=b||new cb;this.getWorldQuaternion(a);
13482 return b.setFromQuaternion(a,this.rotation.order,!1)}}(),getWorldScale:function(){var a=new q,b=new da;return function(c){c=c||new q;this.updateMatrixWorld(!0);this.matrixWorld.decompose(a,b,c);return c}}(),getWorldDirection:function(){var a=new da;return function(b){b=b||new q;this.getWorldQuaternion(a);return b.set(0,0,1).applyQuaternion(a)}}(),raycast:function(){},traverse:function(a){a(this);for(var b=this.children,c=0,d=b.length;c<d;c++)b[c].traverse(a)},traverseVisible:function(a){if(!1!==this.visible){a(this);
13483 for(var b=this.children,c=0,d=b.length;c<d;c++)b[c].traverseVisible(a)}},traverseAncestors:function(a){var b=this.parent;null!==b&&(a(b),b.traverseAncestors(a))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale);this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(a){!0===this.matrixAutoUpdate&&this.updateMatrix();if(!0===this.matrixWorldNeedsUpdate||!0===a)null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,
13484 this.matrix),this.matrixWorldNeedsUpdate=!1,a=!0;for(var b=this.children,c=0,d=b.length;c<d;c++)b[c].updateMatrixWorld(a)},toJSON:function(a){function b(a){var b=[],c;for(c in a){var d=a[c];delete d.metadata;b.push(d)}return b}var c=void 0===a||""===a,d={};c&&(a={geometries:{},materials:{},textures:{},images:{}},d.metadata={version:4.4,type:"Object",generator:"Object3D.toJSON"});var e={};e.uuid=this.uuid;e.type=this.type;""!==this.name&&(e.name=this.name);"{}"!==JSON.stringify(this.userData)&&(e.userData=
13485 this.userData);!0===this.castShadow&&(e.castShadow=!0);!0===this.receiveShadow&&(e.receiveShadow=!0);!1===this.visible&&(e.visible=!1);e.matrix=this.matrix.toArray();void 0!==this.geometry&&(void 0===a.geometries[this.geometry.uuid]&&(a.geometries[this.geometry.uuid]=this.geometry.toJSON(a)),e.geometry=this.geometry.uuid);void 0!==this.material&&(void 0===a.materials[this.material.uuid]&&(a.materials[this.material.uuid]=this.material.toJSON(a)),e.material=this.material.uuid);if(0<this.children.length){e.children=
13486 [];for(var f=0;f<this.children.length;f++)e.children.push(this.children[f].toJSON(a).object)}if(c){var c=b(a.geometries),f=b(a.materials),g=b(a.textures);a=b(a.images);0<c.length&&(d.geometries=c);0<f.length&&(d.materials=f);0<g.length&&(d.textures=g);0<a.length&&(d.images=a)}d.object=e;return d},clone:function(a){return(new this.constructor).copy(this,a)},copy:function(a,b){void 0===b&&(b=!0);this.name=a.name;this.up.copy(a.up);this.position.copy(a.position);this.quaternion.copy(a.quaternion);this.scale.copy(a.scale);
13487 this.matrix.copy(a.matrix);this.matrixWorld.copy(a.matrixWorld);this.matrixAutoUpdate=a.matrixAutoUpdate;this.matrixWorldNeedsUpdate=a.matrixWorldNeedsUpdate;this.layers.mask=a.layers.mask;this.visible=a.visible;this.castShadow=a.castShadow;this.receiveShadow=a.receiveShadow;this.frustumCulled=a.frustumCulled;this.renderOrder=a.renderOrder;this.userData=JSON.parse(JSON.stringify(a.userData));if(!0===b)for(var c=0;c<a.children.length;c++)this.add(a.children[c].clone());return this}});gb.prototype=
13488 {constructor:gb,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){return(a||new q).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new q).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},
13489 at:function(a,b){var c=b||new q;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new q,b=new q;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=Q.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new q;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);
13490 return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};Aa.normal=function(){var a=new q;return function(b,c,d,e){e=e||new q;e.subVectors(d,c);a.subVectors(b,c);e.cross(a);b=e.lengthSq();return 0<b?e.multiplyScalar(1/Math.sqrt(b)):e.set(0,0,0)}}();Aa.barycoordFromPoint=function(){var a=new q,b=new q,c=new q;return function(d,e,f,g,h){a.subVectors(g,e);b.subVectors(f,e);c.subVectors(d,e);d=a.dot(a);e=a.dot(b);f=a.dot(c);var k=b.dot(b);g=b.dot(c);var m=d*k-e*e;h=
13491 h||new q;if(0===m)return h.set(-2,-1,-1);m=1/m;k=(k*f-e*g)*m;d=(d*g-e*f)*m;return h.set(1-k-d,d,k)}}();Aa.containsPoint=function(){var a=new q;return function(b,c,d,e){b=Aa.barycoordFromPoint(b,c,d,e,a);return 0<=b.x&&0<=b.y&&1>=b.x+b.y}}();Aa.prototype={constructor:Aa,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)},
13492 copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new q,b=new q;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new q).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return Aa.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new ma).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return Aa.barycoordFromPoint(a,
13493 this.a,this.b,this.c,b)},containsPoint:function(a){return Aa.containsPoint(a,this.a,this.b,this.c)},closestPointToPoint:function(){var a,b,c,d;return function(e,f){void 0===a&&(a=new ma,b=[new gb,new gb,new gb],c=new q,d=new q);var g=f||new q,h=Infinity;a.setFromCoplanarPoints(this.a,this.b,this.c);a.projectPoint(e,c);if(!0===this.containsPoint(c))g.copy(c);else{b[0].set(this.a,this.b);b[1].set(this.b,this.c);b[2].set(this.c,this.a);for(var k=0;k<b.length;k++){b[k].closestPointToPoint(c,!0,d);var m=
13494 c.distanceToSquared(d);m<h&&(h=m,g.copy(d))}}return g}}(),equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};ha.prototype={constructor:ha,clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a=a.a;this.b=a.b;this.c=a.c;this.normal.copy(a.normal);this.color.copy(a.color);this.materialIndex=a.materialIndex;for(var b=0,c=a.vertexNormals.length;b<c;b++)this.vertexNormals[b]=a.vertexNormals[b].clone();b=0;for(c=a.vertexColors.length;b<c;b++)this.vertexColors[b]=
13495 a.vertexColors[b].clone();return this}};Ka.prototype=Object.create(W.prototype);Ka.prototype.constructor=Ka;Ka.prototype.isMeshBasicMaterial=!0;Ka.prototype.copy=function(a){W.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.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;
13496 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;return this};y.prototype={constructor:y,isBufferAttribute:!0,set needsUpdate(a){!0===a&&this.version++},setArray:function(a){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.count=void 0!==a?a.length/
13497 this.itemSize:0;this.array=a},setDynamic:function(a){this.dynamic=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.itemSize=a.itemSize;this.count=a.count;this.normalized=a.normalized;this.dynamic=a.dynamic;return this},copyAt:function(a,b,c){a*=this.itemSize;c*=b.itemSize;for(var d=0,e=this.itemSize;d<e;d++)this.array[a+d]=b.array[c+d];return this},copyArray:function(a){this.array.set(a);return this},copyColorsArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<
13498 e;d++){var f=a[d];void 0===f&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",d),f=new N);b[c++]=f.r;b[c++]=f.g;b[c++]=f.b}return this},copyIndicesArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];b[c++]=f.a;b[c++]=f.b;b[c++]=f.c}return this},copyVector2sArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",d),f=new C);b[c++]=f.x;
13499 b[c++]=f.y}return this},copyVector3sArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",d),f=new q);b[c++]=f.x;b[c++]=f.y;b[c++]=f.z}return this},copyVector4sArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",d),f=new ga);b[c++]=f.x;b[c++]=f.y;b[c++]=f.z;b[c++]=f.w}return this},
13500 set:function(a,b){void 0===b&&(b=0);this.array.set(a,b);return this},getX:function(a){return this.array[a*this.itemSize]},setX:function(a,b){this.array[a*this.itemSize]=b;return this},getY:function(a){return this.array[a*this.itemSize+1]},setY:function(a,b){this.array[a*this.itemSize+1]=b;return this},getZ:function(a){return this.array[a*this.itemSize+2]},setZ:function(a,b){this.array[a*this.itemSize+2]=b;return this},getW:function(a){return this.array[a*this.itemSize+3]},setW:function(a,b){this.array[a*
13501 this.itemSize+3]=b;return this},setXY:function(a,b,c){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;return this},setXYZ:function(a,b,c,d){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;this.array[a+2]=d;return this},setXYZW:function(a,b,c,d,e){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;this.array[a+2]=d;this.array[a+3]=e;return this},onUpload:function(a){this.onUploadCallback=a;return this},clone:function(){return(new this.constructor).copy(this)}};rc.prototype=Object.create(y.prototype);
13502 rc.prototype.constructor=rc;sc.prototype=Object.create(y.prototype);sc.prototype.constructor=sc;tc.prototype=Object.create(y.prototype);tc.prototype.constructor=tc;uc.prototype=Object.create(y.prototype);uc.prototype.constructor=uc;Ra.prototype=Object.create(y.prototype);Ra.prototype.constructor=Ra;vc.prototype=Object.create(y.prototype);vc.prototype.constructor=vc;Ua.prototype=Object.create(y.prototype);Ua.prototype.constructor=Ua;X.prototype=Object.create(y.prototype);X.prototype.constructor=X;
13503 wc.prototype=Object.create(y.prototype);wc.prototype.constructor=wc;Object.assign(ze.prototype,{computeGroups:function(a){var b,c=[],d=void 0;a=a.faces;for(var e=0;e<a.length;e++){var f=a[e];f.materialIndex!==d&&(d=f.materialIndex,void 0!==b&&(b.count=3*e-b.start,c.push(b)),b={start:3*e,materialIndex:d})}void 0!==b&&(b.count=3*e-b.start,c.push(b));this.groups=c},fromGeometry:function(a){var b=a.faces,c=a.vertices,d=a.faceVertexUvs,e=d[0]&&0<d[0].length,f=d[1]&&0<d[1].length,g=a.morphTargets,h=g.length,
13504 k;if(0<h){k=[];for(var m=0;m<h;m++)k[m]=[];this.morphTargets.position=k}var l=a.morphNormals,p=l.length,n;if(0<p){n=[];for(m=0;m<p;m++)n[m]=[];this.morphTargets.normal=n}for(var r=a.skinIndices,q=a.skinWeights,u=r.length===c.length,F=q.length===c.length,m=0;m<b.length;m++){var t=b[m];this.vertices.push(c[t.a],c[t.b],c[t.c]);var v=t.vertexNormals;3===v.length?this.normals.push(v[0],v[1],v[2]):(v=t.normal,this.normals.push(v,v,v));v=t.vertexColors;3===v.length?this.colors.push(v[0],v[1],v[2]):(v=t.color,
13505 this.colors.push(v,v,v));!0===e&&(v=d[0][m],void 0!==v?this.uvs.push(v[0],v[1],v[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",m),this.uvs.push(new C,new C,new C)));!0===f&&(v=d[1][m],void 0!==v?this.uvs2.push(v[0],v[1],v[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",m),this.uvs2.push(new C,new C,new C)));for(v=0;v<h;v++){var M=g[v].vertices;k[v].push(M[t.a],M[t.b],M[t.c])}for(v=0;v<p;v++)M=l[v].vertexNormals[m],n[v].push(M.a,M.b,M.c);
13506 u&&this.skinIndices.push(r[t.a],r[t.b],r[t.c]);F&&this.skinWeights.push(q[t.a],q[t.b],q[t.c])}this.computeGroups(a);this.verticesNeedUpdate=a.verticesNeedUpdate;this.normalsNeedUpdate=a.normalsNeedUpdate;this.colorsNeedUpdate=a.colorsNeedUpdate;this.uvsNeedUpdate=a.uvsNeedUpdate;this.groupsNeedUpdate=a.groupsNeedUpdate;return this}});Object.assign(S.prototype,oa.prototype,{isGeometry:!0,applyMatrix:function(a){for(var b=(new za).getNormalMatrix(a),c=0,d=this.vertices.length;c<d;c++)this.vertices[c].applyMatrix4(a);
13507 c=0;for(d=this.faces.length;c<d;c++){a=this.faces[c];a.normal.applyMatrix3(b).normalize();for(var e=0,f=a.vertexNormals.length;e<f;e++)a.vertexNormals[e].applyMatrix3(b).normalize()}null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();this.normalsNeedUpdate=this.verticesNeedUpdate=!0;return this},rotateX:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationX(b);this.applyMatrix(a);return this}}(),rotateY:function(){var a;return function(b){void 0===
13508 a&&(a=new H);a.makeRotationY(b);this.applyMatrix(a);return this}}(),rotateZ:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationZ(b);this.applyMatrix(a);return this}}(),translate:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeTranslation(b,c,d);this.applyMatrix(a);return this}}(),scale:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeScale(b,c,d);this.applyMatrix(a);return this}}(),lookAt:function(){var a;return function(b){void 0===a&&(a=
13509 new G);a.lookAt(b);a.updateMatrix();this.applyMatrix(a.matrix)}}(),fromBufferGeometry:function(a){function b(a,b,d,e){var f=void 0!==g?[l[a].clone(),l[b].clone(),l[d].clone()]:[],r=void 0!==h?[c.colors[a].clone(),c.colors[b].clone(),c.colors[d].clone()]:[];e=new ha(a,b,d,f,r,e);c.faces.push(e);void 0!==k&&c.faceVertexUvs[0].push([p[a].clone(),p[b].clone(),p[d].clone()]);void 0!==m&&c.faceVertexUvs[1].push([n[a].clone(),n[b].clone(),n[d].clone()])}var c=this,d=null!==a.index?a.index.array:void 0,e=
13510 a.attributes,f=e.position.array,g=void 0!==e.normal?e.normal.array:void 0,h=void 0!==e.color?e.color.array:void 0,k=void 0!==e.uv?e.uv.array:void 0,m=void 0!==e.uv2?e.uv2.array:void 0;void 0!==m&&(this.faceVertexUvs[1]=[]);for(var l=[],p=[],n=[],r=e=0;e<f.length;e+=3,r+=2)c.vertices.push(new q(f[e],f[e+1],f[e+2])),void 0!==g&&l.push(new q(g[e],g[e+1],g[e+2])),void 0!==h&&c.colors.push(new N(h[e],h[e+1],h[e+2])),void 0!==k&&p.push(new C(k[r],k[r+1])),void 0!==m&&n.push(new C(m[r],m[r+1]));if(void 0!==
13511 d)if(f=a.groups,0<f.length)for(e=0;e<f.length;e++)for(var w=f[e],u=w.start,F=w.count,r=u,u=u+F;r<u;r+=3)b(d[r],d[r+1],d[r+2],w.materialIndex);else for(e=0;e<d.length;e+=3)b(d[e],d[e+1],d[e+2]);else for(e=0;e<f.length/3;e+=3)b(e,e+1,e+2);this.computeFaceNormals();null!==a.boundingBox&&(this.boundingBox=a.boundingBox.clone());null!==a.boundingSphere&&(this.boundingSphere=a.boundingSphere.clone());return this},center:function(){this.computeBoundingBox();var a=this.boundingBox.getCenter().negate();this.translate(a.x,
13512 a.y,a.z);return a},normalize:function(){this.computeBoundingSphere();var a=this.boundingSphere.center,b=this.boundingSphere.radius,b=0===b?1:1/b,c=new H;c.set(b,0,0,-b*a.x,0,b,0,-b*a.y,0,0,b,-b*a.z,0,0,0,1);this.applyMatrix(c);return this},computeFaceNormals:function(){for(var a=new q,b=new q,c=0,d=this.faces.length;c<d;c++){var e=this.faces[c],f=this.vertices[e.a],g=this.vertices[e.b];a.subVectors(this.vertices[e.c],g);b.subVectors(f,g);a.cross(b);a.normalize();e.normal.copy(a)}},computeVertexNormals:function(a){void 0===
13513 a&&(a=!0);var b,c,d;d=Array(this.vertices.length);b=0;for(c=this.vertices.length;b<c;b++)d[b]=new q;if(a){var e,f,g,h=new q,k=new q;a=0;for(b=this.faces.length;a<b;a++)c=this.faces[a],e=this.vertices[c.a],f=this.vertices[c.b],g=this.vertices[c.c],h.subVectors(g,f),k.subVectors(e,f),h.cross(k),d[c.a].add(h),d[c.b].add(h),d[c.c].add(h)}else for(this.computeFaceNormals(),a=0,b=this.faces.length;a<b;a++)c=this.faces[a],d[c.a].add(c.normal),d[c.b].add(c.normal),d[c.c].add(c.normal);b=0;for(c=this.vertices.length;b<
13514 c;b++)d[b].normalize();a=0;for(b=this.faces.length;a<b;a++)c=this.faces[a],e=c.vertexNormals,3===e.length?(e[0].copy(d[c.a]),e[1].copy(d[c.b]),e[2].copy(d[c.c])):(e[0]=d[c.a].clone(),e[1]=d[c.b].clone(),e[2]=d[c.c].clone());0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var a,b,c;this.computeFaceNormals();a=0;for(b=this.faces.length;a<b;a++){c=this.faces[a];var d=c.vertexNormals;3===d.length?(d[0].copy(c.normal),d[1].copy(c.normal),d[2].copy(c.normal)):(d[0]=
13515 c.normal.clone(),d[1]=c.normal.clone(),d[2]=c.normal.clone())}0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var a,b,c,d,e;c=0;for(d=this.faces.length;c<d;c++)for(e=this.faces[c],e.__originalFaceNormal?e.__originalFaceNormal.copy(e.normal):e.__originalFaceNormal=e.normal.clone(),e.__originalVertexNormals||(e.__originalVertexNormals=[]),a=0,b=e.vertexNormals.length;a<b;a++)e.__originalVertexNormals[a]?e.__originalVertexNormals[a].copy(e.vertexNormals[a]):e.__originalVertexNormals[a]=
13516 e.vertexNormals[a].clone();var f=new S;f.faces=this.faces;a=0;for(b=this.morphTargets.length;a<b;a++){if(!this.morphNormals[a]){this.morphNormals[a]={};this.morphNormals[a].faceNormals=[];this.morphNormals[a].vertexNormals=[];e=this.morphNormals[a].faceNormals;var g=this.morphNormals[a].vertexNormals,h,k;c=0;for(d=this.faces.length;c<d;c++)h=new q,k={a:new q,b:new q,c:new q},e.push(h),g.push(k)}g=this.morphNormals[a];f.vertices=this.morphTargets[a].vertices;f.computeFaceNormals();f.computeVertexNormals();
13517 c=0;for(d=this.faces.length;c<d;c++)e=this.faces[c],h=g.faceNormals[c],k=g.vertexNormals[c],h.copy(e.normal),k.a.copy(e.vertexNormals[0]),k.b.copy(e.vertexNormals[1]),k.c.copy(e.vertexNormals[2])}c=0;for(d=this.faces.length;c<d;c++)e=this.faces[c],e.normal=e.__originalFaceNormal,e.vertexNormals=e.__originalVertexNormals},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;c<d;c++)0<c&&(a+=b[c].distanceTo(b[c-1])),this.lineDistances[c]=a},computeBoundingBox:function(){null===
13518 this.boundingBox&&(this.boundingBox=new ya);this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new Fa);this.boundingSphere.setFromPoints(this.vertices)},merge:function(a,b,c){if(!1===(a&&a.isGeometry))console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",a);else{var d,e=this.vertices.length,f=this.vertices,g=a.vertices,h=this.faces,k=a.faces,m=this.faceVertexUvs[0],l=a.faceVertexUvs[0],p=this.colors,
13519 n=a.colors;void 0===c&&(c=0);void 0!==b&&(d=(new za).getNormalMatrix(b));a=0;for(var r=g.length;a<r;a++){var q=g[a].clone();void 0!==b&&q.applyMatrix4(b);f.push(q)}a=0;for(r=n.length;a<r;a++)p.push(n[a].clone());a=0;for(r=k.length;a<r;a++){var g=k[a],u=g.vertexNormals,n=g.vertexColors,p=new ha(g.a+e,g.b+e,g.c+e);p.normal.copy(g.normal);void 0!==d&&p.normal.applyMatrix3(d).normalize();b=0;for(f=u.length;b<f;b++)q=u[b].clone(),void 0!==d&&q.applyMatrix3(d).normalize(),p.vertexNormals.push(q);p.color.copy(g.color);
13520 b=0;for(f=n.length;b<f;b++)q=n[b],p.vertexColors.push(q.clone());p.materialIndex=g.materialIndex+c;h.push(p)}a=0;for(r=l.length;a<r;a++)if(c=l[a],d=[],void 0!==c){b=0;for(f=c.length;b<f;b++)d.push(c[b].clone());m.push(d)}}},mergeMesh:function(a){!1===(a&&a.isMesh)?console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",a):(a.matrixAutoUpdate&&a.updateMatrix(),this.merge(a.geometry,a.matrix))},mergeVertices:function(){var a={},b=[],c=[],d,e=Math.pow(10,4),f,g;f=0;for(g=this.vertices.length;f<
13521 g;f++)d=this.vertices[f],d=Math.round(d.x*e)+"_"+Math.round(d.y*e)+"_"+Math.round(d.z*e),void 0===a[d]?(a[d]=f,b.push(this.vertices[f]),c[f]=b.length-1):c[f]=c[a[d]];a=[];f=0;for(g=this.faces.length;f<g;f++)for(e=this.faces[f],e.a=c[e.a],e.b=c[e.b],e.c=c[e.c],e=[e.a,e.b,e.c],d=0;3>d;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;c<g;c++)this.faceVertexUvs[c].splice(e,1);f=this.vertices.length-b.length;this.vertices=
13522 b;return f},sortFacesByMaterialIndex:function(){for(var a=this.faces,b=a.length,c=0;c<b;c++)a[c]._id=c;a.sort(function(a,b){return a.materialIndex-b.materialIndex});var d=this.faceVertexUvs[0],e=this.faceVertexUvs[1],f,g;d&&d.length===b&&(f=[]);e&&e.length===b&&(g=[]);for(c=0;c<b;c++){var h=a[c]._id;f&&f.push(d[h]);g&&g.push(e[h])}f&&(this.faceVertexUvs[0]=f);g&&(this.faceVertexUvs[1]=g)},toJSON:function(){function a(a,b,c){return c?a|1<<b:a&~(1<<b)}function b(a){var b=a.x.toString()+a.y.toString()+
13523 a.z.toString();if(void 0!==m[b])return m[b];m[b]=k.length/3;k.push(a.x,a.y,a.z);return m[b]}function c(a){var b=a.r.toString()+a.g.toString()+a.b.toString();if(void 0!==p[b])return p[b];p[b]=l.length;l.push(a.getHex());return p[b]}function d(a){var b=a.x.toString()+a.y.toString();if(void 0!==r[b])return r[b];r[b]=n.length/2;n.push(a.x,a.y);return r[b]}var e={metadata:{version:4.4,type:"Geometry",generator:"Geometry.toJSON"}};e.uuid=this.uuid;e.type=this.type;""!==this.name&&(e.name=this.name);if(void 0!==
13524 this.parameters){var f=this.parameters,g;for(g in f)void 0!==f[g]&&(e[g]=f[g]);return e}f=[];for(g=0;g<this.vertices.length;g++){var h=this.vertices[g];f.push(h.x,h.y,h.z)}var h=[],k=[],m={},l=[],p={},n=[],r={};for(g=0;g<this.faces.length;g++){var q=this.faces[g],u=void 0!==this.faceVertexUvs[0][g],F=0<q.normal.length(),t=0<q.vertexNormals.length,v=1!==q.color.r||1!==q.color.g||1!==q.color.b,M=0<q.vertexColors.length,z=0,z=a(z,0,0),z=a(z,1,!0),z=a(z,2,!1),z=a(z,3,u),z=a(z,4,F),z=a(z,5,t),z=a(z,6,
13525 v),z=a(z,7,M);h.push(z);h.push(q.a,q.b,q.c);h.push(q.materialIndex);u&&(u=this.faceVertexUvs[0][g],h.push(d(u[0]),d(u[1]),d(u[2])));F&&h.push(b(q.normal));t&&(F=q.vertexNormals,h.push(b(F[0]),b(F[1]),b(F[2])));v&&h.push(c(q.color));M&&(q=q.vertexColors,h.push(c(q[0]),c(q[1]),c(q[2])))}e.data={};e.data.vertices=f;e.data.normals=k;0<l.length&&(e.data.colors=l);0<n.length&&(e.data.uvs=[n]);e.data.faces=h;return e},clone:function(){return(new S).copy(this)},copy:function(a){this.vertices=[];this.faces=
13526 [];this.faceVertexUvs=[[]];this.colors=[];for(var b=a.vertices,c=0,d=b.length;c<d;c++)this.vertices.push(b[c].clone());b=a.colors;c=0;for(d=b.length;c<d;c++)this.colors.push(b[c].clone());b=a.faces;c=0;for(d=b.length;c<d;c++)this.faces.push(b[c].clone());c=0;for(d=a.faceVertexUvs.length;c<d;c++){b=a.faceVertexUvs[c];void 0===this.faceVertexUvs[c]&&(this.faceVertexUvs[c]=[]);for(var e=0,f=b.length;e<f;e++){for(var g=b[e],h=[],k=0,m=g.length;k<m;k++)h.push(g[k].clone());this.faceVertexUvs[c].push(h)}}return this},
13527 dispose:function(){this.dispatchEvent({type:"dispose"})}});var Kd=0;Object.assign(D.prototype,oa.prototype,{isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(a){this.index=a},addAttribute:function(a,b,c){if(!1===(b&&b.isBufferAttribute)&&!1===(b&&b.isInterleavedBufferAttribute))console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.addAttribute(a,new y(b,c));else if("index"===a)console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),
13528 this.setIndex(b);else return this.attributes[a]=b,this},getAttribute:function(a){return this.attributes[a]},removeAttribute:function(a){delete this.attributes[a];return this},addGroup:function(a,b,c){this.groups.push({start:a,count:b,materialIndex:void 0!==c?c:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(a,b){this.drawRange.start=a;this.drawRange.count=b},applyMatrix:function(a){var b=this.attributes.position;void 0!==b&&(a.applyToVector3Array(b.array),b.needsUpdate=!0);b=this.attributes.normal;
13529 void 0!==b&&((new za).getNormalMatrix(a).applyToVector3Array(b.array),b.needsUpdate=!0);null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();return this},rotateX:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationX(b);this.applyMatrix(a);return this}}(),rotateY:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationY(b);this.applyMatrix(a);return this}}(),rotateZ:function(){var a;return function(b){void 0===
13530 a&&(a=new H);a.makeRotationZ(b);this.applyMatrix(a);return this}}(),translate:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeTranslation(b,c,d);this.applyMatrix(a);return this}}(),scale:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeScale(b,c,d);this.applyMatrix(a);return this}}(),lookAt:function(){var a;return function(b){void 0===a&&(a=new G);a.lookAt(b);a.updateMatrix();this.applyMatrix(a.matrix)}}(),center:function(){this.computeBoundingBox();var a=this.boundingBox.getCenter().negate();
13531 this.translate(a.x,a.y,a.z);return a},setFromObject:function(a){var b=a.geometry;if(a.isPoints||a.isLine){a=new X(3*b.vertices.length,3);var c=new X(3*b.colors.length,3);this.addAttribute("position",a.copyVector3sArray(b.vertices));this.addAttribute("color",c.copyColorsArray(b.colors));b.lineDistances&&b.lineDistances.length===b.vertices.length&&(a=new X(b.lineDistances.length,1),this.addAttribute("lineDistance",a.copyArray(b.lineDistances)));null!==b.boundingSphere&&(this.boundingSphere=b.boundingSphere.clone());
13532 null!==b.boundingBox&&(this.boundingBox=b.boundingBox.clone())}else a.isMesh&&b&&b.isGeometry&&this.fromGeometry(b);return this},updateFromObject:function(a){var b=a.geometry;if(a.isMesh){var c=b.__directGeometry;!0===b.elementsNeedUpdate&&(c=void 0,b.elementsNeedUpdate=!1);if(void 0===c)return this.fromGeometry(b);c.verticesNeedUpdate=b.verticesNeedUpdate;c.normalsNeedUpdate=b.normalsNeedUpdate;c.colorsNeedUpdate=b.colorsNeedUpdate;c.uvsNeedUpdate=b.uvsNeedUpdate;c.groupsNeedUpdate=b.groupsNeedUpdate;
13533 b.verticesNeedUpdate=!1;b.normalsNeedUpdate=!1;b.colorsNeedUpdate=!1;b.uvsNeedUpdate=!1;b.groupsNeedUpdate=!1;b=c}!0===b.verticesNeedUpdate&&(c=this.attributes.position,void 0!==c&&(c.copyVector3sArray(b.vertices),c.needsUpdate=!0),b.verticesNeedUpdate=!1);!0===b.normalsNeedUpdate&&(c=this.attributes.normal,void 0!==c&&(c.copyVector3sArray(b.normals),c.needsUpdate=!0),b.normalsNeedUpdate=!1);!0===b.colorsNeedUpdate&&(c=this.attributes.color,void 0!==c&&(c.copyColorsArray(b.colors),c.needsUpdate=!0),
13534 b.colorsNeedUpdate=!1);b.uvsNeedUpdate&&(c=this.attributes.uv,void 0!==c&&(c.copyVector2sArray(b.uvs),c.needsUpdate=!0),b.uvsNeedUpdate=!1);b.lineDistancesNeedUpdate&&(c=this.attributes.lineDistance,void 0!==c&&(c.copyArray(b.lineDistances),c.needsUpdate=!0),b.lineDistancesNeedUpdate=!1);b.groupsNeedUpdate&&(b.computeGroups(a.geometry),this.groups=b.groups,b.groupsNeedUpdate=!1);return this},fromGeometry:function(a){a.__directGeometry=(new ze).fromGeometry(a);return this.fromDirectGeometry(a.__directGeometry)},
13535 fromDirectGeometry:function(a){var b=new Float32Array(3*a.vertices.length);this.addAttribute("position",(new y(b,3)).copyVector3sArray(a.vertices));0<a.normals.length&&(b=new Float32Array(3*a.normals.length),this.addAttribute("normal",(new y(b,3)).copyVector3sArray(a.normals)));0<a.colors.length&&(b=new Float32Array(3*a.colors.length),this.addAttribute("color",(new y(b,3)).copyColorsArray(a.colors)));0<a.uvs.length&&(b=new Float32Array(2*a.uvs.length),this.addAttribute("uv",(new y(b,2)).copyVector2sArray(a.uvs)));
13536 0<a.uvs2.length&&(b=new Float32Array(2*a.uvs2.length),this.addAttribute("uv2",(new y(b,2)).copyVector2sArray(a.uvs2)));0<a.indices.length&&(b=new (65535<a.vertices.length?Uint32Array:Uint16Array)(3*a.indices.length),this.setIndex((new y(b,1)).copyIndicesArray(a.indices)));this.groups=a.groups;for(var c in a.morphTargets){for(var b=[],d=a.morphTargets[c],e=0,f=d.length;e<f;e++){var g=d[e],h=new X(3*g.length,3);b.push(h.copyVector3sArray(g))}this.morphAttributes[c]=b}0<a.skinIndices.length&&(c=new X(4*
13537 a.skinIndices.length,4),this.addAttribute("skinIndex",c.copyVector4sArray(a.skinIndices)));0<a.skinWeights.length&&(c=new X(4*a.skinWeights.length,4),this.addAttribute("skinWeight",c.copyVector4sArray(a.skinWeights)));null!==a.boundingSphere&&(this.boundingSphere=a.boundingSphere.clone());null!==a.boundingBox&&(this.boundingBox=a.boundingBox.clone());return this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new ya);var a=this.attributes.position;void 0!==a?this.boundingBox.setFromBufferAttribute(a):
13538 this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)},computeBoundingSphere:function(){var a=new ya,b=new q;return function(){null===this.boundingSphere&&(this.boundingSphere=new Fa);var c=this.attributes.position;if(c){var d=this.boundingSphere.center;a.setFromBufferAttribute(c);
13539 a.getCenter(d);for(var e=0,f=0,g=c.count;f<g;f++)b.x=c.getX(f),b.y=c.getY(f),b.z=c.getZ(f),e=Math.max(e,d.distanceToSquared(b));this.boundingSphere.radius=Math.sqrt(e);isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}}(),computeFaceNormals:function(){},computeVertexNormals:function(){var a=this.index,b=this.attributes,c=this.groups;if(b.position){var d=b.position.array;
13540 if(void 0===b.normal)this.addAttribute("normal",new y(new Float32Array(d.length),3));else for(var e=b.normal.array,f=0,g=e.length;f<g;f++)e[f]=0;var e=b.normal.array,h,k,m,l=new q,p=new q,n=new q,r=new q,w=new q;if(a){a=a.array;0===c.length&&this.addGroup(0,a.length);for(var u=0,F=c.length;u<F;++u)for(f=c[u],g=f.start,h=f.count,f=g,g+=h;f<g;f+=3)h=3*a[f+0],k=3*a[f+1],m=3*a[f+2],l.fromArray(d,h),p.fromArray(d,k),n.fromArray(d,m),r.subVectors(n,p),w.subVectors(l,p),r.cross(w),e[h]+=r.x,e[h+1]+=r.y,
13541 e[h+2]+=r.z,e[k]+=r.x,e[k+1]+=r.y,e[k+2]+=r.z,e[m]+=r.x,e[m+1]+=r.y,e[m+2]+=r.z}else for(f=0,g=d.length;f<g;f+=9)l.fromArray(d,f),p.fromArray(d,f+3),n.fromArray(d,f+6),r.subVectors(n,p),w.subVectors(l,p),r.cross(w),e[f]=r.x,e[f+1]=r.y,e[f+2]=r.z,e[f+3]=r.x,e[f+4]=r.y,e[f+5]=r.z,e[f+6]=r.x,e[f+7]=r.y,e[f+8]=r.z;this.normalizeNormals();b.normal.needsUpdate=!0}},merge:function(a,b){if(!1===(a&&a.isBufferGeometry))console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",
13542 a);else{void 0===b&&(b=0);var c=this.attributes,d;for(d in c)if(void 0!==a.attributes[d])for(var e=c[d].array,f=a.attributes[d],g=f.array,h=0,f=f.itemSize*b;h<g.length;h++,f++)e[f]=g[h];return this}},normalizeNormals:function(){for(var a=this.attributes.normal.array,b,c,d,e=0,f=a.length;e<f;e+=3)b=a[e],c=a[e+1],d=a[e+2],b=1/Math.sqrt(b*b+c*c+d*d),a[e]*=b,a[e+1]*=b,a[e+2]*=b},toNonIndexed:function(){if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."),
13543 this;var a=new D,b=this.index.array,c=this.attributes,d;for(d in c){for(var e=c[d],f=e.array,e=e.itemSize,g=new f.constructor(b.length*e),h,k=0,m=0,l=b.length;m<l;m++){h=b[m]*e;for(var p=0;p<e;p++)g[k++]=f[h++]}a.addAttribute(d,new y(g,e))}return a},toJSON:function(){var a={metadata:{version:4.4,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};a.uuid=this.uuid;a.type=this.type;""!==this.name&&(a.name=this.name);if(void 0!==this.parameters){var b=this.parameters,c;for(c in b)void 0!==b[c]&&
13544 (a[c]=b[c]);return a}a.data={attributes:{}};var d=this.index;null!==d&&(b=Array.prototype.slice.call(d.array),a.data.index={type:d.array.constructor.name,array:b});d=this.attributes;for(c in d){var e=d[c],b=Array.prototype.slice.call(e.array);a.data.attributes[c]={itemSize:e.itemSize,type:e.array.constructor.name,array:b,normalized:e.normalized}}c=this.groups;0<c.length&&(a.data.groups=JSON.parse(JSON.stringify(c)));c=this.boundingSphere;null!==c&&(a.data.boundingSphere={center:c.center.toArray(),
13545 radius:c.radius});return a},clone:function(){return(new D).copy(this)},copy:function(a){var b=a.index;null!==b&&this.setIndex(b.clone());var b=a.attributes,c;for(c in b)this.addAttribute(c,b[c].clone());a=a.groups;c=0;for(b=a.length;c<b;c++){var d=a[c];this.addGroup(d.start,d.count,d.materialIndex)}return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});D.MaxIndex=65535;Ba.prototype=Object.assign(Object.create(G.prototype),{constructor:Ba,isMesh:!0,setDrawMode:function(a){this.drawMode=
13546 a},copy:function(a){G.prototype.copy.call(this,a);this.drawMode=a.drawMode;return this},updateMorphTargets:function(){var a=this.geometry.morphTargets;if(void 0!==a&&0<a.length){this.morphTargetInfluences=[];this.morphTargetDictionary={};for(var b=0,c=a.length;b<c;b++)this.morphTargetInfluences.push(0),this.morphTargetDictionary[a[b].name]=b}},raycast:function(){function a(a,b,c,d,e,f,g){Aa.barycoordFromPoint(a,b,c,d,u);e.multiplyScalar(u.x);f.multiplyScalar(u.y);g.multiplyScalar(u.z);e.add(f).add(g);
13547 return e.clone()}function b(a,b,c,d,e,f,g){var h=a.material;if(null===(1===h.side?c.intersectTriangle(f,e,d,!0,g):c.intersectTriangle(d,e,f,2!==h.side,g)))return null;t.copy(g);t.applyMatrix4(a.matrixWorld);c=b.ray.origin.distanceTo(t);return c<b.near||c>b.far?null:{distance:c,point:t.clone(),object:a}}function c(c,d,e,f,m,l,p,q){g.fromArray(f,3*l);h.fromArray(f,3*p);k.fromArray(f,3*q);if(c=b(c,d,e,g,h,k,F))m&&(n.fromArray(m,2*l),r.fromArray(m,2*p),w.fromArray(m,2*q),c.uv=a(F,g,h,k,n,r,w)),c.face=
13548 new ha(l,p,q,Aa.normal(g,h,k)),c.faceIndex=l;return c}var d=new H,e=new bb,f=new Fa,g=new q,h=new q,k=new q,m=new q,l=new q,p=new q,n=new C,r=new C,w=new C,u=new q,F=new q,t=new q;return function(q,u){var t=this.geometry,A=this.material,I=this.matrixWorld;if(void 0!==A&&(null===t.boundingSphere&&t.computeBoundingSphere(),f.copy(t.boundingSphere),f.applyMatrix4(I),!1!==q.ray.intersectsSphere(f)&&(d.getInverse(I),e.copy(q.ray).applyMatrix4(d),null===t.boundingBox||!1!==e.intersectsBox(t.boundingBox)))){var E,
13549 K;if(t.isBufferGeometry){var y,J,A=t.index,I=t.attributes,t=I.position.array;void 0!==I.uv&&(E=I.uv.array);if(null!==A)for(var I=A.array,C=0,D=I.length;C<D;C+=3){if(A=I[C],y=I[C+1],J=I[C+2],K=c(this,q,e,t,E,A,y,J))K.faceIndex=Math.floor(C/3),u.push(K)}else for(C=0,D=t.length;C<D;C+=9)if(A=C/3,y=A+1,J=A+2,K=c(this,q,e,t,E,A,y,J))K.index=A,u.push(K)}else if(t.isGeometry){var G,H,I=A&&A.isMultiMaterial,C=!0===I?A.materials:null,D=t.vertices;y=t.faces;J=t.faceVertexUvs[0];0<J.length&&(E=J);for(var O=
13550 0,P=y.length;O<P;O++){var R=y[O];K=!0===I?C[R.materialIndex]:A;if(void 0!==K){J=D[R.a];G=D[R.b];H=D[R.c];if(!0===K.morphTargets){K=t.morphTargets;var T=this.morphTargetInfluences;g.set(0,0,0);h.set(0,0,0);k.set(0,0,0);for(var N=0,V=K.length;N<V;N++){var S=T[N];if(0!==S){var L=K[N].vertices;g.addScaledVector(m.subVectors(L[R.a],J),S);h.addScaledVector(l.subVectors(L[R.b],G),S);k.addScaledVector(p.subVectors(L[R.c],H),S)}}g.add(J);h.add(G);k.add(H);J=g;G=h;H=k}if(K=b(this,q,e,J,G,H,F))E&&(T=E[O],n.copy(T[0]),
13551 r.copy(T[1]),w.copy(T[2]),K.uv=a(F,J,G,H,n,r,w)),K.face=R,K.faceIndex=O,u.push(K)}}}}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});hb.prototype=Object.create(D.prototype);hb.prototype.constructor=hb;ib.prototype=Object.create(D.prototype);ib.prototype.constructor=ib;sa.prototype=Object.create(G.prototype);sa.prototype.constructor=sa;sa.prototype.isCamera=!0;sa.prototype.getWorldDirection=function(){var a=new da;return function(b){b=b||new q;this.getWorldQuaternion(a);
13552 return b.set(0,0,-1).applyQuaternion(a)}}();sa.prototype.lookAt=function(){var a=new H;return function(b){a.lookAt(this.position,b,this.up);this.quaternion.setFromRotationMatrix(a)}}();sa.prototype.clone=function(){return(new this.constructor).copy(this)};sa.prototype.copy=function(a){G.prototype.copy.call(this,a);this.matrixWorldInverse.copy(a.matrixWorldInverse);this.projectionMatrix.copy(a.projectionMatrix);return this};Ha.prototype=Object.assign(Object.create(sa.prototype),{constructor:Ha,isPerspectiveCamera:!0,
13553 copy:function(a){sa.prototype.copy.call(this,a);this.fov=a.fov;this.zoom=a.zoom;this.near=a.near;this.far=a.far;this.focus=a.focus;this.aspect=a.aspect;this.view=null===a.view?null:Object.assign({},a.view);this.filmGauge=a.filmGauge;this.filmOffset=a.filmOffset;return this},setFocalLength:function(a){a=.5*this.getFilmHeight()/a;this.fov=2*Q.RAD2DEG*Math.atan(a);this.updateProjectionMatrix()},getFocalLength:function(){var a=Math.tan(.5*Q.DEG2RAD*this.fov);return.5*this.getFilmHeight()/a},getEffectiveFOV:function(){return 2*
13554 Q.RAD2DEG*Math.atan(Math.tan(.5*Q.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(a,b,c,d,e,f){this.aspect=a/b;this.view={fullWidth:a,fullHeight:b,offsetX:c,offsetY:d,width:e,height:f};this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null;this.updateProjectionMatrix()},updateProjectionMatrix:function(){var a=this.near,b=a*Math.tan(.5*
13555 Q.DEG2RAD*this.fov)/this.zoom,c=2*b,d=this.aspect*c,e=-.5*d,f=this.view;if(null!==f)var g=f.fullWidth,h=f.fullHeight,e=e+f.offsetX*d/g,b=b-f.offsetY*c/h,d=f.width/g*d,c=f.height/h*c;f=this.filmOffset;0!==f&&(e+=a*f/this.getFilmWidth());this.projectionMatrix.makeFrustum(e,e+d,b-c,b,a,this.far)},toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.fov=this.fov;a.object.zoom=this.zoom;a.object.near=this.near;a.object.far=this.far;a.object.focus=this.focus;a.object.aspect=this.aspect;null!==
13556 this.view&&(a.object.view=Object.assign({},this.view));a.object.filmGauge=this.filmGauge;a.object.filmOffset=this.filmOffset;return a}});Hb.prototype=Object.assign(Object.create(sa.prototype),{constructor:Hb,isOrthographicCamera:!0,copy:function(a){sa.prototype.copy.call(this,a);this.left=a.left;this.right=a.right;this.top=a.top;this.bottom=a.bottom;this.near=a.near;this.far=a.far;this.zoom=a.zoom;this.view=null===a.view?null:Object.assign({},a.view);return this},setViewOffset:function(a,b,c,d,e,
13557 f){this.view={fullWidth:a,fullHeight:b,offsetX:c,offsetY:d,width:e,height:f};this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null;this.updateProjectionMatrix()},updateProjectionMatrix:function(){var a=(this.right-this.left)/(2*this.zoom),b=(this.top-this.bottom)/(2*this.zoom),c=(this.right+this.left)/2,d=(this.top+this.bottom)/2,e=c-a,c=c+a,a=d+b,b=d-b;if(null!==this.view)var c=this.zoom/(this.view.width/this.view.fullWidth),b=this.zoom/(this.view.height/this.view.fullHeight),
13558 f=(this.right-this.left)/this.view.width,d=(this.top-this.bottom)/this.view.height,e=e+this.view.offsetX/c*f,c=e+this.view.width/c*f,a=a-this.view.offsetY/b*d,b=a-this.view.height/b*d;this.projectionMatrix.makeOrthographic(e,c,a,b,this.near,this.far)},toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.zoom=this.zoom;a.object.left=this.left;a.object.right=this.right;a.object.top=this.top;a.object.bottom=this.bottom;a.object.near=this.near;a.object.far=this.far;null!==this.view&&(a.object.view=
13559 Object.assign({},this.view));return a}});var Af=0;Ib.prototype.isFogExp2=!0;Ib.prototype.clone=function(){return new Ib(this.color.getHex(),this.density)};Ib.prototype.toJSON=function(a){return{type:"FogExp2",color:this.color.getHex(),density:this.density}};Jb.prototype.isFog=!0;Jb.prototype.clone=function(){return new Jb(this.color.getHex(),this.near,this.far)};Jb.prototype.toJSON=function(a){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}};jb.prototype=Object.create(G.prototype);
13560 jb.prototype.constructor=jb;jb.prototype.copy=function(a,b){G.prototype.copy.call(this,a,b);null!==a.background&&(this.background=a.background.clone());null!==a.fog&&(this.fog=a.fog.clone());null!==a.overrideMaterial&&(this.overrideMaterial=a.overrideMaterial.clone());this.autoUpdate=a.autoUpdate;this.matrixAutoUpdate=a.matrixAutoUpdate;return this};jb.prototype.toJSON=function(a){var b=G.prototype.toJSON.call(this,a);null!==this.background&&(b.object.background=this.background.toJSON(a));null!==
13561 this.fog&&(b.object.fog=this.fog.toJSON());return b};Od.prototype=Object.assign(Object.create(G.prototype),{constructor:Od,isLensFlare:!0,copy:function(a){G.prototype.copy.call(this,a);this.positionScreen.copy(a.positionScreen);this.customUpdateCallback=a.customUpdateCallback;for(var b=0,c=a.lensFlares.length;b<c;b++)this.lensFlares.push(a.lensFlares[b]);return this},add:function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new N(16777215));void 0===d&&(d=1);
13562 c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})},updateLensFlares:function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a<b;a++)c=this.lensFlares[a],c.x=this.positionScreen.x+d*c.distance,c.y=this.positionScreen.y+e*c.distance,c.wantedRotation=c.x*Math.PI*.25,c.rotation+=.25*(c.wantedRotation-c.rotation)}});kb.prototype=Object.create(W.prototype);kb.prototype.constructor=
13563 kb;kb.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.rotation=a.rotation;return this};zc.prototype=Object.assign(Object.create(G.prototype),{constructor:zc,isSprite:!0,raycast:function(){var a=new q;return function(b,c){a.setFromMatrixPosition(this.matrixWorld);var d=b.ray.distanceSqToPoint(a);d>this.scale.x*this.scale.y/4||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}(),clone:function(){return(new this.constructor(this.material)).copy(this)}});
13564 Ac.prototype=Object.assign(Object.create(G.prototype),{constructor:Ac,copy:function(a){G.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b<c;b++){var d=a[b];this.addLevel(d.object.clone(),d.distance)}return this},addLevel:function(a,b){void 0===b&&(b=0);b=Math.abs(b);for(var c=this.levels,d=0;d<c.length&&!(b<c[d].distance);d++);c.splice(d,0,{distance:b,object:a});this.add(a)},getObjectForDistance:function(a){for(var b=this.levels,c=1,d=b.length;c<d&&!(a<b[c].distance);c++);return b[c-
13565 1].object},raycast:function(){var a=new q;return function(b,c){a.setFromMatrixPosition(this.matrixWorld);var d=b.ray.origin.distanceTo(a);this.getObjectForDistance(d).raycast(b,c)}}(),update:function(){var a=new q,b=new q;return function(c){var d=this.levels;if(1<d.length){a.setFromMatrixPosition(c.matrixWorld);b.setFromMatrixPosition(this.matrixWorld);c=a.distanceTo(b);d[0].object.visible=!0;for(var e=1,f=d.length;e<f;e++)if(c>=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;
13566 for(;e<f;e++)d[e].object.visible=!1}}}(),toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.levels=[];for(var b=this.levels,c=0,d=b.length;c<d;c++){var e=b[c];a.object.levels.push({object:e.object.uuid,distance:e.distance})}return a}});Object.assign(hd.prototype,{calculateInverses:function(){this.boneInverses=[];for(var a=0,b=this.bones.length;a<b;a++){var c=new H;this.bones[a]&&c.getInverse(this.bones[a].matrixWorld);this.boneInverses.push(c)}},pose:function(){for(var a,b=0,c=this.bones.length;b<
13567 c;b++)(a=this.bones[b])&&a.matrixWorld.getInverse(this.boneInverses[b]);b=0;for(c=this.bones.length;b<c;b++)if(a=this.bones[b])a.parent&&a.parent.isBone?(a.matrix.getInverse(a.parent.matrixWorld),a.matrix.multiply(a.matrixWorld)):a.matrix.copy(a.matrixWorld),a.matrix.decompose(a.position,a.quaternion,a.scale)},update:function(){var a=new H;return function(){for(var b=0,c=this.bones.length;b<c;b++)a.multiplyMatrices(this.bones[b]?this.bones[b].matrixWorld:this.identityMatrix,this.boneInverses[b]),
13568 a.toArray(this.boneMatrices,16*b);this.useVertexTexture&&(this.boneTexture.needsUpdate=!0)}}(),clone:function(){return new hd(this.bones,this.boneInverses,this.useVertexTexture)}});id.prototype=Object.assign(Object.create(G.prototype),{constructor:id,isBone:!0});jd.prototype=Object.assign(Object.create(Ba.prototype),{constructor:jd,isSkinnedMesh:!0,bind:function(a,b){this.skeleton=a;void 0===b&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),b=this.matrixWorld);this.bindMatrix.copy(b);
13569 this.bindMatrixInverse.getInverse(b)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){if(this.geometry&&this.geometry.isGeometry)for(var a=0;a<this.geometry.skinWeights.length;a++){var b=this.geometry.skinWeights[a],c=1/b.lengthManhattan();Infinity!==c?b.multiplyScalar(c):b.set(1,0,0,0)}else if(this.geometry&&this.geometry.isBufferGeometry)for(var b=new ga,d=this.geometry.attributes.skinWeight,a=0;a<d.count;a++)b.x=d.getX(a),b.y=d.getY(a),b.z=d.getZ(a),b.w=d.getW(a),c=1/b.lengthManhattan(),
13570 Infinity!==c?b.multiplyScalar(c):b.set(1,0,0,0),d.setXYZW(a,b.x,b.y,b.z,b.w)},updateMatrixWorld:function(a){Ba.prototype.updateMatrixWorld.call(this,!0);"attached"===this.bindMode?this.bindMatrixInverse.getInverse(this.matrixWorld):"detached"===this.bindMode?this.bindMatrixInverse.getInverse(this.bindMatrix):console.warn("THREE.SkinnedMesh unrecognized bindMode: "+this.bindMode)},clone:function(){return(new this.constructor(this.geometry,this.material,this.skeleton.useVertexTexture)).copy(this)}});
13571 ia.prototype=Object.create(W.prototype);ia.prototype.constructor=ia;ia.prototype.isLineBasicMaterial=!0;ia.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.linewidth=a.linewidth;this.linecap=a.linecap;this.linejoin=a.linejoin;return this};Va.prototype=Object.assign(Object.create(G.prototype),{constructor:Va,isLine:!0,raycast:function(){var a=new H,b=new bb,c=new Fa;return function(d,e){var f=d.linePrecision,f=f*f,g=this.geometry,h=this.matrixWorld;null===g.boundingSphere&&
13572 g.computeBoundingSphere();c.copy(g.boundingSphere);c.applyMatrix4(h);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(h);b.copy(d.ray).applyMatrix4(a);var k=new q,m=new q,h=new q,l=new q,p=this&&this.isLineSegments?2:1;if(g.isBufferGeometry){var n=g.index,r=g.attributes.position.array;if(null!==n)for(var n=n.array,g=0,w=n.length-1;g<w;g+=p){var u=n[g+1];k.fromArray(r,3*n[g]);m.fromArray(r,3*u);u=b.distanceSqToSegment(k,m,l,h);u>f||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),u<d.near||
13573 u>d.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,w=r.length/3-1;g<w;g+=p)k.fromArray(r,3*g),m.fromArray(r,3*g+3),u=b.distanceSqToSegment(k,m,l,h),u>f||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),u<d.near||u>d.far||e.push({distance:u,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;g<m-1;g+=p)u=b.distanceSqToSegment(k[g],
13574 k[g+1],l,h),u>f||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),u<d.near||u>d.far||e.push({distance:u,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)}});fa.prototype=Object.assign(Object.create(Va.prototype),{constructor:fa,isLineSegments:!0});Oa.prototype=Object.create(W.prototype);Oa.prototype.constructor=Oa;Oa.prototype.isPointsMaterial=!0;Oa.prototype.copy=
13575 function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.size=a.size;this.sizeAttenuation=a.sizeAttenuation;return this};Kb.prototype=Object.assign(Object.create(G.prototype),{constructor:Kb,isPoints:!0,raycast:function(){var a=new H,b=new bb,c=new Fa;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(f<l){var h=b.closestPointToPoint(a);h.applyMatrix4(k);var m=d.ray.origin.distanceTo(h);m<d.near||m>d.far||e.push({distance:m,distanceToRay:Math.sqrt(f),
13576 point:h.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);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var m=m/((this.scale.x+this.scale.y+this.scale.z)/3),l=m*m,m=new q;if(h.isBufferGeometry){var p=h.index,h=h.attributes.position.array;if(null!==p)for(var n=p.array,p=0,r=n.length;p<r;p++){var w=n[p];m.fromArray(h,
13577 3*w);f(m,w)}else for(p=0,n=h.length/3;p<n;p++)m.fromArray(h,3*p),f(m,p)}else for(m=h.vertices,p=0,n=m.length;p<n;p++)f(m[p],p)}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});Bc.prototype=Object.assign(Object.create(G.prototype),{constructor:Bc});kd.prototype=Object.create(ea.prototype);kd.prototype.constructor=kd;Lb.prototype=Object.create(ea.prototype);Lb.prototype.constructor=Lb;Lb.prototype.isCompressedTexture=!0;ld.prototype=Object.create(ea.prototype);
13578 ld.prototype.constructor=ld;Cc.prototype=Object.create(ea.prototype);Cc.prototype.constructor=Cc;Cc.prototype.isDepthTexture=!0;Mb.prototype=Object.create(D.prototype);Mb.prototype.constructor=Mb;Nb.prototype=Object.create(D.prototype);Nb.prototype.constructor=Nb;Dc.prototype=Object.create(S.prototype);Dc.prototype.constructor=Dc;xa.prototype=Object.create(D.prototype);xa.prototype.constructor=xa;Ob.prototype=Object.create(xa.prototype);Ob.prototype.constructor=Ob;Ec.prototype=Object.create(S.prototype);
13579 Ec.prototype.constructor=Ec;lb.prototype=Object.create(xa.prototype);lb.prototype.constructor=lb;Fc.prototype=Object.create(S.prototype);Fc.prototype.constructor=Fc;Pb.prototype=Object.create(xa.prototype);Pb.prototype.constructor=Pb;Gc.prototype=Object.create(S.prototype);Gc.prototype.constructor=Gc;Qb.prototype=Object.create(xa.prototype);Qb.prototype.constructor=Qb;Hc.prototype=Object.create(S.prototype);Hc.prototype.constructor=Hc;Ic.prototype=Object.create(S.prototype);Ic.prototype.constructor=
13580 Ic;Rb.prototype=Object.create(D.prototype);Rb.prototype.constructor=Rb;Jc.prototype=Object.create(S.prototype);Jc.prototype.constructor=Jc;Sb.prototype=Object.create(D.prototype);Sb.prototype.constructor=Sb;Kc.prototype=Object.create(S.prototype);Kc.prototype.constructor=Kc;Tb.prototype=Object.create(D.prototype);Tb.prototype.constructor=Tb;Lc.prototype=Object.create(S.prototype);Lc.prototype.constructor=Lc;var pa={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;e<b;d=e++)c+=a[d].x*a[e].y-a[e].x*
13581 a[d].y;return.5*c},triangulate:function(){return function(a,b){var c=a.length;if(3>c)return null;var d=[],e=[],f=[],g,h,k;if(0<pa.area(a))for(h=0;h<c;h++)e[h]=h;else for(h=0;h<c;h++)e[h]=c-1-h;var m=2*c;for(h=c-1;2<c;){if(0>=m--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var l;a:{var p,n,r,q,u,F,t,v;p=a[e[g]].x;n=a[e[g]].y;r=a[e[h]].x;q=a[e[h]].y;u=a[e[k]].x;F=a[e[k]].y;if(0>=(r-p)*(F-n)-(q-n)*(u-p))l=
13582 !1;else{var M,z,A,I,E,K,y,C,D,G;M=u-r;z=F-q;A=p-u;I=n-F;E=r-p;K=q-n;for(l=0;l<c;l++)if(t=a[e[l]].x,v=a[e[l]].y,!(t===p&&v===n||t===r&&v===q||t===u&&v===F)&&(y=t-p,C=v-n,D=t-r,G=v-q,t-=u,v-=F,D=M*G-z*D,y=E*C-K*y,C=A*v-I*t,D>=-Number.EPSILON&&C>=-Number.EPSILON&&y>=-Number.EPSILON)){l=!1;break a}l=!0}}if(l){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;k<c;g++,k++)e[g]=e[k];c--;m=2*c}}return b?f:d}}(),triangulateShape:function(a,b){function c(a){var b=a.length;2<b&&a[b-1].equals(a[0])&&
13583 a.pop()}function d(a,b,c){return a.x!==b.x?a.x<b.x?a.x<=c.x&&c.x<=b.x:b.x<=c.x&&c.x<=a.x:a.y<b.y?a.y<=c.y&&c.y<=b.y:b.y<=c.y&&c.y<=a.y}function e(a,b,c,e,f){var g=b.x-a.x,h=b.y-a.y,k=e.x-c.x,m=e.y-c.y,l=a.x-c.x,n=a.y-c.y,p=h*k-g*m,q=h*l-g*n;if(Math.abs(p)>Number.EPSILON){if(0<p){if(0>q||q>p)return[];k=m*l-k*n;if(0>k||k>p)return[]}else{if(0<q||q<p)return[];k=m*l-k*n;if(0<k||k<p)return[]}if(0===k)return!f||0!==q&&q!==p?[a]:[];if(k===p)return!f||0!==q&&q!==p?[b]:[];if(0===q)return[c];if(q===p)return[e];
13584 f=k/p;return[{x:a.x+f*g,y:a.y+f*h}]}if(0!==q||m*l!==k*n)return[];h=0===g&&0===h;k=0===k&&0===m;if(h&&k)return a.x!==c.x||a.y!==c.y?[]:[a];if(h)return d(c,e,a)?[a]:[];if(k)return d(a,b,c)?[c]:[];0!==g?(a.x<b.x?(g=a,k=a.x,h=b,a=b.x):(g=b,k=b.x,h=a,a=a.x),c.x<e.x?(b=c,p=c.x,m=e,c=e.x):(b=e,p=e.x,m=c,c=c.x)):(a.y<b.y?(g=a,k=a.y,h=b,a=b.y):(g=b,k=b.y,h=a,a=a.y),c.y<e.y?(b=c,p=c.y,m=e,c=e.y):(b=e,p=e.y,m=c,c=c.y));return k<=p?a<p?[]:a===p?f?[]:[b]:a<=c?[b,h]:[b,m]:k>c?[]:k===c?f?[]:[g]:a<=c?[g,h]:[g,m]}
13585 function f(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0<a?0<=e&&0<=b:0<=e||0<=b):0<e}c(a);b.forEach(c);var g,h,k,m,l,p={};k=a.concat();g=0;for(h=b.length;g<h;g++)Array.prototype.push.apply(k,b[g]);g=0;for(h=k.length;g<h;g++)l=k[g].x+":"+k[g].y,void 0!==p[l]&&console.warn("THREE.ShapeUtils: Duplicate point",l,g),p[l]=g;g=function(a,b){function c(a,b){var d=h.length-1,e=a-1;0>e&&(e=d);var g=a+1;g>d&&(g=
13586 0);d=f(h[a],h[e],h[g],k[b]);if(!d)return!1;d=k.length-1;e=b-1;0>e&&(e=d);g=b+1;g>d&&(g=0);return(d=f(k[b],k[e],k[g],h[a]))?!0:!1}function d(a,b){var c,f;for(c=0;c<h.length;c++)if(f=c+1,f%=h.length,f=e(a,b,h[c],h[f],!0),0<f.length)return!0;return!1}function g(a,c){var d,f,h,k;for(d=0;d<m.length;d++)for(f=b[m[d]],h=0;h<f.length;h++)if(k=h+1,k%=f.length,k=e(a,c,f[h],f[k],!0),0<k.length)return!0;return!1}var h=a.concat(),k,m=[],l,n,p,q,x,y=[],C,D,G,H=0;for(l=b.length;H<l;H++)m.push(H);C=0;for(var O=2*
13587 m.length;0<m.length;){O--;if(0>O){console.log("Infinite Loop! Holes left:"+m.length+", Probably Hole outside Shape!");break}for(n=C;n<h.length;n++){p=h[n];l=-1;for(H=0;H<m.length;H++)if(q=m[H],x=p.x+":"+p.y+":"+q,void 0===y[x]){k=b[q];for(D=0;D<k.length;D++)if(q=k[D],c(n,D)&&!d(p,q)&&!g(p,q)){l=D;m.splice(H,1);C=h.slice(0,n+1);q=h.slice(n);D=k.slice(l);G=k.slice(0,l+1);h=C.concat(D).concat(G).concat(q);C=n;break}if(0<=l)break;y[x]=!0}if(0<=l)break}}return h}(a,b);var n=pa.triangulate(g,!1);g=0;for(h=
13588 n.length;g<h;g++)for(m=n[g],k=0;3>k;k++)l=m[k].x+":"+m[k].y,l=p[l],void 0!==l&&(m[k]=l);return n.concat()},isClockWise:function(a){return 0>pa.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};La.prototype=Object.create(S.prototype);La.prototype.constructor=La;La.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;d<c;d++)this.addShape(a[d],
13589 b)};La.prototype.addShape=function(a,b){function c(a,b,c){b||console.error("THREE.ExtrudeGeometry: vec does not exist");return b.clone().multiplyScalar(c).add(a)}function d(a,b,c){var d,e,f;e=a.x-b.x;f=a.y-b.y;d=c.x-a.x;var g=c.y-a.y,h=e*e+f*f;if(Math.abs(e*g-f*d)>Number.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(d*d+g*g),h=b.x-f/k;b=b.y+e/k;g=((c.x-g/m-h)*g-(c.y+d/m-b)*d)/(e*g-f*d);d=h+e*g-a.x;e=b+f*g-a.y;f=d*d+e*e;if(2>=f)return new C(d,e);f=Math.sqrt(f/2)}else a=!1,e>Number.EPSILON?d>Number.EPSILON&&
13590 (a=!0):e<-Number.EPSILON?d<-Number.EPSILON&&(a=!0):Math.sign(f)===Math.sign(g)&&(a=!0),a?(d=-f,f=Math.sqrt(h)):(d=e,e=f,f=Math.sqrt(h/2));return new C(d/f,e/f)}function e(a,b){var c,d;for(L=a.length;0<=--L;){c=L;d=L-1;0>d&&(d=a.length-1);var e,f=r+2*l;for(e=0;e<f;e++){var g=U*e,h=U*(e+1),k=b+c+g,g=b+d+g,m=b+d+h,h=b+c+h,k=k+J,g=g+J,m=m+J,h=h+J;G.faces.push(new ha(k,g,h,null,null,1));G.faces.push(new ha(g,m,h,null,null,1));k=t.generateSideWallUV(G,k,g,m,h);G.faceVertexUvs[0].push([k[0],k[1],k[3]]);
13591 G.faceVertexUvs[0].push([k[1],k[2],k[3]])}}}function f(a,b,c){G.vertices.push(new q(a,b,c))}function g(a,b,c){a+=J;b+=J;c+=J;G.faces.push(new ha(a,b,c,null,null,0));a=t.generateTopUV(G,a,b,c);G.faceVertexUvs[0].push(a)}var h=void 0!==b.amount?b.amount:100,k=void 0!==b.bevelThickness?b.bevelThickness:6,m=void 0!==b.bevelSize?b.bevelSize:k-2,l=void 0!==b.bevelSegments?b.bevelSegments:3,p=void 0!==b.bevelEnabled?b.bevelEnabled:!0,n=void 0!==b.curveSegments?b.curveSegments:12,r=void 0!==b.steps?b.steps:
13592 1,w=b.extrudePath,u,F=!1,t=void 0!==b.UVGenerator?b.UVGenerator:La.WorldUVGenerator,v,y,z,A;w&&(u=w.getSpacedPoints(r),F=!0,p=!1,v=void 0!==b.frames?b.frames:w.computeFrenetFrames(r,!1),y=new q,z=new q,A=new q);p||(m=k=l=0);var I,E,D,G=this,J=this.vertices.length,w=a.extractPoints(n),n=w.shape,H=w.holes;if(w=!pa.isClockWise(n)){n=n.reverse();E=0;for(D=H.length;E<D;E++)I=H[E],pa.isClockWise(I)&&(H[E]=I.reverse());w=!1}var N=pa.triangulateShape(n,H),S=n;E=0;for(D=H.length;E<D;E++)I=H[E],n=n.concat(I);
13593 var Q,O,P,R,T,U=n.length,V,W=N.length,w=[],L=0;P=S.length;Q=P-1;for(O=L+1;L<P;L++,Q++,O++)Q===P&&(Q=0),O===P&&(O=0),w[L]=d(S[L],S[Q],S[O]);var X=[],Z,ba=w.concat();E=0;for(D=H.length;E<D;E++){I=H[E];Z=[];L=0;P=I.length;Q=P-1;for(O=L+1;L<P;L++,Q++,O++)Q===P&&(Q=0),O===P&&(O=0),Z[L]=d(I[L],I[Q],I[O]);X.push(Z);ba=ba.concat(Z)}for(Q=0;Q<l;Q++){P=Q/l;R=k*Math.cos(P*Math.PI/2);O=m*Math.sin(P*Math.PI/2);L=0;for(P=S.length;L<P;L++)T=c(S[L],w[L],O),f(T.x,T.y,-R);E=0;for(D=H.length;E<D;E++)for(I=H[E],Z=X[E],
13594 L=0,P=I.length;L<P;L++)T=c(I[L],Z[L],O),f(T.x,T.y,-R)}O=m;for(L=0;L<U;L++)T=p?c(n[L],ba[L],O):n[L],F?(z.copy(v.normals[0]).multiplyScalar(T.x),y.copy(v.binormals[0]).multiplyScalar(T.y),A.copy(u[0]).add(z).add(y),f(A.x,A.y,A.z)):f(T.x,T.y,0);for(P=1;P<=r;P++)for(L=0;L<U;L++)T=p?c(n[L],ba[L],O):n[L],F?(z.copy(v.normals[P]).multiplyScalar(T.x),y.copy(v.binormals[P]).multiplyScalar(T.y),A.copy(u[P]).add(z).add(y),f(A.x,A.y,A.z)):f(T.x,T.y,h/r*P);for(Q=l-1;0<=Q;Q--){P=Q/l;R=k*Math.cos(P*Math.PI/2);O=
13595 m*Math.sin(P*Math.PI/2);L=0;for(P=S.length;L<P;L++)T=c(S[L],w[L],O),f(T.x,T.y,h+R);E=0;for(D=H.length;E<D;E++)for(I=H[E],Z=X[E],L=0,P=I.length;L<P;L++)T=c(I[L],Z[L],O),F?f(T.x,T.y+u[r-1].y,u[r-1].x+R):f(T.x,T.y,h+R)}(function(){if(p){var a=0*U;for(L=0;L<W;L++)V=N[L],g(V[2]+a,V[1]+a,V[0]+a);a=U*(r+2*l);for(L=0;L<W;L++)V=N[L],g(V[0]+a,V[1]+a,V[2]+a)}else{for(L=0;L<W;L++)V=N[L],g(V[2],V[1],V[0]);for(L=0;L<W;L++)V=N[L],g(V[0]+U*r,V[1]+U*r,V[2]+U*r)}})();(function(){var a=0;e(S,a);a+=S.length;E=0;for(D=
13596 H.length;E<D;E++)I=H[E],e(I,a),a+=I.length})()};La.WorldUVGenerator={generateTopUV:function(a,b,c,d){a=a.vertices;b=a[b];c=a[c];d=a[d];return[new C(b.x,b.y),new C(c.x,c.y),new C(d.x,d.y)]},generateSideWallUV:function(a,b,c,d,e){a=a.vertices;b=a[b];c=a[c];d=a[d];e=a[e];return.01>Math.abs(b.y-c.y)?[new C(b.x,1-b.z),new C(c.x,1-c.z),new C(d.x,1-d.z),new C(e.x,1-e.z)]:[new C(b.y,1-b.z),new C(c.y,1-c.z),new C(d.y,1-d.z),new C(e.y,1-e.z)]}};Mc.prototype=Object.create(La.prototype);Mc.prototype.constructor=
13597 Mc;mb.prototype=Object.create(D.prototype);mb.prototype.constructor=mb;Nc.prototype=Object.create(S.prototype);Nc.prototype.constructor=Nc;Ub.prototype=Object.create(D.prototype);Ub.prototype.constructor=Ub;Oc.prototype=Object.create(S.prototype);Oc.prototype.constructor=Oc;Pc.prototype=Object.create(S.prototype);Pc.prototype.constructor=Pc;Vb.prototype=Object.create(D.prototype);Vb.prototype.constructor=Vb;Qc.prototype=Object.create(S.prototype);Qc.prototype.constructor=Qc;Wb.prototype=Object.create(D.prototype);
13598 Wb.prototype.constructor=Wb;Xb.prototype=Object.create(S.prototype);Xb.prototype.constructor=Xb;Yb.prototype=Object.create(D.prototype);Yb.prototype.constructor=Yb;Wa.prototype=Object.create(D.prototype);Wa.prototype.constructor=Wa;nb.prototype=Object.create(S.prototype);nb.prototype.constructor=nb;Rc.prototype=Object.create(nb.prototype);Rc.prototype.constructor=Rc;Sc.prototype=Object.create(Wa.prototype);Sc.prototype.constructor=Sc;Zb.prototype=Object.create(D.prototype);Zb.prototype.constructor=
13599 Zb;Tc.prototype=Object.create(S.prototype);Tc.prototype.constructor=Tc;$b.prototype=Object.create(S.prototype);$b.prototype.constructor=$b;var Ea=Object.freeze({WireframeGeometry:Mb,ParametricGeometry:Dc,ParametricBufferGeometry:Nb,TetrahedronGeometry:Ec,TetrahedronBufferGeometry:Ob,OctahedronGeometry:Fc,OctahedronBufferGeometry:lb,IcosahedronGeometry:Gc,IcosahedronBufferGeometry:Pb,DodecahedronGeometry:Hc,DodecahedronBufferGeometry:Qb,PolyhedronGeometry:Ic,PolyhedronBufferGeometry:xa,TubeGeometry:Jc,
13600 TubeBufferGeometry:Rb,TorusKnotGeometry:Kc,TorusKnotBufferGeometry:Sb,TorusGeometry:Lc,TorusBufferGeometry:Tb,TextGeometry:Mc,SphereBufferGeometry:mb,SphereGeometry:Nc,RingGeometry:Oc,RingBufferGeometry:Ub,PlaneBufferGeometry:ib,PlaneGeometry:Pc,LatheGeometry:Qc,LatheBufferGeometry:Vb,ShapeGeometry:Xb,ShapeBufferGeometry:Wb,ExtrudeGeometry:La,EdgesGeometry:Yb,ConeGeometry:Rc,ConeBufferGeometry:Sc,CylinderGeometry:nb,CylinderBufferGeometry:Wa,CircleBufferGeometry:Zb,CircleGeometry:Tc,BoxBufferGeometry:hb,
13601 BoxGeometry:$b});ac.prototype=Object.create(Ia.prototype);ac.prototype.constructor=ac;ac.prototype.isShadowMaterial=!0;bc.prototype=Object.create(Ia.prototype);bc.prototype.constructor=bc;bc.prototype.isRawShaderMaterial=!0;Uc.prototype={constructor:Uc,isMultiMaterial:!0,toJSON:function(a){for(var b={metadata:{version:4.2,type:"material",generator:"MaterialExporter"},uuid:this.uuid,type:this.type,materials:[]},c=this.materials,d=0,e=c.length;d<e;d++){var f=c[d].toJSON(a);delete f.metadata;b.materials.push(f)}b.visible=
13602 this.visible;return b},clone:function(){for(var a=new this.constructor,b=0;b<this.materials.length;b++)a.materials.push(this.materials[b].clone());a.visible=this.visible;return a}};Pa.prototype=Object.create(W.prototype);Pa.prototype.constructor=Pa;Pa.prototype.isMeshStandardMaterial=!0;Pa.prototype.copy=function(a){W.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=
13603 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.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;
13604 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};ob.prototype=Object.create(Pa.prototype);ob.prototype.constructor=ob;ob.prototype.isMeshPhysicalMaterial=!0;ob.prototype.copy=function(a){Pa.prototype.copy.call(this,
13605 a);this.defines={PHYSICAL:""};this.reflectivity=a.reflectivity;this.clearCoat=a.clearCoat;this.clearCoatRoughness=a.clearCoatRoughness;return this};Ca.prototype=Object.create(W.prototype);Ca.prototype.constructor=Ca;Ca.prototype.isMeshPhongMaterial=!0;Ca.prototype.copy=function(a){W.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=
13606 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.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=
13607 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};pb.prototype=Object.create(Ca.prototype);pb.prototype.constructor=pb;pb.prototype.isMeshToonMaterial=!0;pb.prototype.copy=function(a){Ca.prototype.copy.call(this,a);this.gradientMap=a.gradientMap;return this};qb.prototype=Object.create(W.prototype);
13608 qb.prototype.constructor=qb;qb.prototype.isMeshNormalMaterial=!0;qb.prototype.copy=function(a){W.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;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=
13609 a.morphNormals;return this};rb.prototype=Object.create(W.prototype);rb.prototype.constructor=rb;rb.prototype.isMeshLambertMaterial=!0;rb.prototype.copy=function(a){W.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=
13610 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};sb.prototype=Object.create(W.prototype);sb.prototype.constructor=sb;sb.prototype.isLineDashedMaterial=!0;sb.prototype.copy=
13611 function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.linewidth=a.linewidth;this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Mf=Object.freeze({ShadowMaterial:ac,SpriteMaterial:kb,RawShaderMaterial:bc,ShaderMaterial:Ia,PointsMaterial:Oa,MultiMaterial:Uc,MeshPhysicalMaterial:ob,MeshStandardMaterial:Pa,MeshPhongMaterial:Ca,MeshToonMaterial:pb,MeshNormalMaterial:qb,MeshLambertMaterial:rb,MeshDepthMaterial:ab,MeshBasicMaterial:Ka,LineDashedMaterial:sb,
13612 LineBasicMaterial:ia,Material:W}),ne={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={}}},va=new Pd;Object.assign(Ma.prototype,{load:function(a,b,c,d){void 0===a&&(a="");void 0!==this.path&&(a=this.path+a);var e=this,f=ne.get(a);if(void 0!==f)return e.manager.itemStart(a),setTimeout(function(){b&&b(f);e.manager.itemEnd(a)},0),f;var g=a.match(/^data:(.*?)(;base64)?,(.*)$/);
13613 if(g){var h=g[1],k=!!g[2],g=g[3],g=window.decodeURIComponent(g);k&&(g=window.atob(g));try{var m,l=(this.responseType||"").toLowerCase();switch(l){case "arraybuffer":case "blob":m=new ArrayBuffer(g.length);for(var p=new Uint8Array(m),k=0;k<g.length;k++)p[k]=g.charCodeAt(k);"blob"===l&&(m=new Blob([m],{type:h}));break;case "document":m=(new DOMParser).parseFromString(g,h);break;case "json":m=JSON.parse(g);break;default:m=g}window.setTimeout(function(){b&&b(m);e.manager.itemEnd(a)},0)}catch(q){window.setTimeout(function(){d&&
13614 d(q);e.manager.itemError(a)},0)}}else{var n=new XMLHttpRequest;n.open("GET",a,!0);n.addEventListener("load",function(c){var f=c.target.response;ne.add(a,f);200===this.status?(b&&b(f),e.manager.itemEnd(a)):0===this.status?(console.warn("THREE.FileLoader: HTTP Status 0 received."),b&&b(f),e.manager.itemEnd(a)):(d&&d(c),e.manager.itemError(a))},!1);void 0!==c&&n.addEventListener("progress",function(a){c(a)},!1);n.addEventListener("error",function(b){d&&d(b);e.manager.itemError(a)},!1);void 0!==this.responseType&&
13615 (n.responseType=this.responseType);void 0!==this.withCredentials&&(n.withCredentials=this.withCredentials);n.overrideMimeType&&n.overrideMimeType(void 0!==this.mimeType?this.mimeType:"text/plain");n.send(null)}e.manager.itemStart(a);return n},setPath:function(a){this.path=a;return this},setResponseType:function(a){this.responseType=a;return this},setWithCredentials:function(a){this.withCredentials=a;return this},setMimeType:function(a){this.mimeType=a;return this}});Object.assign(Ee.prototype,{load:function(a,
13616 b,c,d){function e(e){k.load(a[e],function(a){a=f._parser(a,!0);g[e]={width:a.width,height:a.height,format:a.format,mipmaps:a.mipmaps};m+=1;6===m&&(1===a.mipmapCount&&(h.minFilter=1006),h.format=a.format,h.needsUpdate=!0,b&&b(h))},c,d)}var f=this,g=[],h=new Lb;h.image=g;var k=new Ma(this.manager);k.setPath(this.path);k.setResponseType("arraybuffer");if(Array.isArray(a))for(var m=0,l=0,p=a.length;l<p;++l)e(l);else k.load(a,function(a){a=f._parser(a,!0);if(a.isCubemap)for(var c=a.mipmaps.length/a.mipmapCount,
13617 d=0;d<c;d++){g[d]={mipmaps:[]};for(var e=0;e<a.mipmapCount;e++)g[d].mipmaps.push(a.mipmaps[d*a.mipmapCount+e]),g[d].format=a.format,g[d].width=a.width,g[d].height=a.height}else h.image.width=a.width,h.image.height=a.height,h.mipmaps=a.mipmaps;1===a.mipmapCount&&(h.minFilter=1006);h.format=a.format;h.needsUpdate=!0;b&&b(h)},c,d);return h},setPath:function(a){this.path=a;return this}});Object.assign(Qd.prototype,{load:function(a,b,c,d){var e=this,f=new db,g=new Ma(this.manager);g.setResponseType("arraybuffer");
13618 g.load(a,function(a){if(a=e._parser(a))void 0!==a.image?f.image=a.image:void 0!==a.data&&(f.image.width=a.width,f.image.height=a.height,f.image.data=a.data),f.wrapS=void 0!==a.wrapS?a.wrapS:1001,f.wrapT=void 0!==a.wrapT?a.wrapT:1001,f.magFilter=void 0!==a.magFilter?a.magFilter:1006,f.minFilter=void 0!==a.minFilter?a.minFilter:1008,f.anisotropy=void 0!==a.anisotropy?a.anisotropy:1,void 0!==a.format&&(f.format=a.format),void 0!==a.type&&(f.type=a.type),void 0!==a.mipmaps&&(f.mipmaps=a.mipmaps),1===
13619 a.mipmapCount&&(f.minFilter=1006),f.needsUpdate=!0,b&&b(f,a)},c,d);return f}});Object.assign(Vc.prototype,{load:function(a,b,c,d){var e=this,f=document.createElementNS("http://www.w3.org/1999/xhtml","img");f.onload=function(){f.onload=null;URL.revokeObjectURL(f.src);b&&b(f);e.manager.itemEnd(a)};f.onerror=d;if(0===a.indexOf("data:"))f.src=a;else if(void 0!==this.crossOrigin)f.crossOrigin=this.crossOrigin,f.src=a;else{var g=new Ma;g.setPath(this.path);g.setResponseType("blob");g.setWithCredentials(this.withCredentials);
13620 g.load(a,function(a){f.src=URL.createObjectURL(a)},c,d)}e.manager.itemStart(a);return f},setCrossOrigin:function(a){this.crossOrigin=a;return this},setWithCredentials:function(a){this.withCredentials=a;return this},setPath:function(a){this.path=a;return this}});Object.assign(Rd.prototype,{load:function(a,b,c,d){function e(c){g.load(a[c],function(a){f.images[c]=a;h++;6===h&&(f.needsUpdate=!0,b&&b(f))},void 0,d)}var f=new Za,g=new Vc(this.manager);g.setCrossOrigin(this.crossOrigin);g.setPath(this.path);
13621 var h=0;for(c=0;c<a.length;++c)e(c);return f},setCrossOrigin:function(a){this.crossOrigin=a;return this},setPath:function(a){this.path=a;return this}});Object.assign(md.prototype,{load:function(a,b,c,d){var e=new ea,f=new Vc(this.manager);f.setCrossOrigin(this.crossOrigin);f.setWithCredentials(this.withCredentials);f.setPath(this.path);f.load(a,function(c){var d=0<a.search(/\.(jpg|jpeg)$/)||0===a.search(/^data\:image\/jpeg/);e.format=d?1022:1023;e.image=c;e.needsUpdate=!0;void 0!==b&&b(e)},c,d);return e},
13622 setCrossOrigin:function(a){this.crossOrigin=a;return this},setWithCredentials:function(a){this.withCredentials=a;return this},setPath:function(a){this.path=a;return this}});na.prototype=Object.assign(Object.create(G.prototype),{constructor:na,isLight:!0,copy:function(a){G.prototype.copy.call(this,a);this.color.copy(a.color);this.intensity=a.intensity;return this},toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.color=this.color.getHex();a.object.intensity=this.intensity;void 0!==this.groundColor&&
13623 (a.object.groundColor=this.groundColor.getHex());void 0!==this.distance&&(a.object.distance=this.distance);void 0!==this.angle&&(a.object.angle=this.angle);void 0!==this.decay&&(a.object.decay=this.decay);void 0!==this.penumbra&&(a.object.penumbra=this.penumbra);void 0!==this.shadow&&(a.object.shadow=this.shadow.toJSON());return a}});nd.prototype=Object.assign(Object.create(na.prototype),{constructor:nd,isHemisphereLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.groundColor.copy(a.groundColor);
13624 return this}});Object.assign(tb.prototype,{copy:function(a){this.camera=a.camera.clone();this.bias=a.bias;this.radius=a.radius;this.mapSize.copy(a.mapSize);return this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var a={};0!==this.bias&&(a.bias=this.bias);1!==this.radius&&(a.radius=this.radius);if(512!==this.mapSize.x||512!==this.mapSize.y)a.mapSize=this.mapSize.toArray();a.camera=this.camera.toJSON(!1).object;delete a.camera.matrix;return a}});od.prototype=Object.assign(Object.create(tb.prototype),
13625 {constructor:od,isSpotLightShadow:!0,update:function(a){var b=2*Q.RAD2DEG*a.angle,c=this.mapSize.width/this.mapSize.height;a=a.distance||500;var d=this.camera;if(b!==d.fov||c!==d.aspect||a!==d.far)d.fov=b,d.aspect=c,d.far=a,d.updateProjectionMatrix()}});pd.prototype=Object.assign(Object.create(na.prototype),{constructor:pd,isSpotLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.distance=a.distance;this.angle=a.angle;this.penumbra=a.penumbra;this.decay=a.decay;this.target=a.target.clone();
13626 this.shadow=a.shadow.clone();return this}});qd.prototype=Object.assign(Object.create(na.prototype),{constructor:qd,isPointLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.distance=a.distance;this.decay=a.decay;this.shadow=a.shadow.clone();return this}});rd.prototype=Object.assign(Object.create(tb.prototype),{constructor:rd});sd.prototype=Object.assign(Object.create(na.prototype),{constructor:sd,isDirectionalLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.target=a.target.clone();
13627 this.shadow=a.shadow.clone();return this}});td.prototype=Object.assign(Object.create(na.prototype),{constructor:td,isAmbientLight:!0});var ba={arraySlice:function(a,b,c){return ba.isTypedArray(a)?new a.constructor(a.subarray(b,c)):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=
13628 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,k=0;k!==b;++k)e[g++]=a[h+k];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],
13629 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)}}}};qa.prototype={constructor:qa,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a<d)){for(var f=c+2;;){if(void 0===d){if(a<e)break d;this._cachedIndex=c=b.length;return this.afterEnd_(c-1,a,e)}if(c===f)break;e=d;d=b[++c];if(a<d)break b}d=b.length;break c}if(a>=e)break a;else{f=b[1];a<f&&
13630 (c=2,e=f);for(f=c-2;;){if(void 0===e)return this._cachedIndex=0,this.beforeStart_(0,a,d);if(c===f)break;d=e;e=b[--c-1];if(a>=e)break b}d=c;c=0}}for(;c<d;)e=c+d>>>1,a<b[e]?d=e:c=e+1;d=b[c];e=b[c-1];if(void 0===e)return this._cachedIndex=0,this.beforeStart_(0,a,d);if(void 0===d)return this._cachedIndex=c=b.length,this.afterEnd_(c-1,e,a)}this._cachedIndex=c;this.intervalChanged_(c,e,d)}return this.interpolate_(c,e,a,d)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||
13631 this.DefaultSettings_},copySampleValue_:function(a){var b=this.resultBuffer,c=this.sampleValues,d=this.valueSize;a*=d;for(var e=0;e!==d;++e)b[e]=c[a+e];return b},interpolate_:function(a,b,c,d){throw Error("call to abstract method");},intervalChanged_:function(a,b,c){}};Object.assign(qa.prototype,{beforeStart_:qa.prototype.copySampleValue_,afterEnd_:qa.prototype.copySampleValue_});ud.prototype=Object.assign(Object.create(qa.prototype),{constructor:ud,DefaultSettings_:{endingStart:2400,endingEnd:2400},
13632 intervalChanged_:function(a,b,c){var d=this.parameterPositions,e=a-2,f=a+1,g=d[e],h=d[f];if(void 0===g)switch(this.getSettings_().endingStart){case 2401:e=a;g=2*b-c;break;case 2402:e=d.length-2;g=b+d[e]-d[e+1];break;default:e=a,g=c}if(void 0===h)switch(this.getSettings_().endingEnd){case 2401:f=a;h=2*c-b;break;case 2402:f=1;h=c+d[1]-d[0];break;default:f=a-1,h=b}a=.5*(c-b);d=this.valueSize;this._weightPrev=a/(b-g);this._weightNext=a/(h-c);this._offsetPrev=e*d;this._offsetNext=f*d},interpolate_:function(a,
13633 b,c,d){var e=this.resultBuffer,f=this.sampleValues,g=this.valueSize;a*=g;var h=a-g,k=this._offsetPrev,m=this._offsetNext,l=this._weightPrev,p=this._weightNext,n=(c-b)/(d-b);c=n*n;d=c*n;b=-l*d+2*l*c-l*n;l=(1+l)*d+(-1.5-2*l)*c+(-.5+l)*n+1;n=(-1-p)*d+(1.5+p)*c+.5*n;p=p*d-p*c;for(c=0;c!==g;++c)e[c]=b*f[k+c]+l*f[h+c]+n*f[a+c]+p*f[m+c];return e}});Wc.prototype=Object.assign(Object.create(qa.prototype),{constructor:Wc,interpolate_:function(a,b,c,d){var e=this.resultBuffer,f=this.sampleValues,g=this.valueSize;
13634 a*=g;var h=a-g;b=(c-b)/(d-b);c=1-b;for(d=0;d!==g;++d)e[d]=f[h+d]*c+f[a+d]*b;return e}});vd.prototype=Object.assign(Object.create(qa.prototype),{constructor:vd,interpolate_:function(a,b,c,d){return this.copySampleValue_(a-1)}});var Ya;Ya={TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:2301,InterpolantFactoryMethodDiscrete:function(a){return new vd(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodLinear:function(a){return new Wc(this.times,this.values,
13635 this.getValueSize(),a)},InterpolantFactoryMethodSmooth:function(a){return new ud(this.times,this.values,this.getValueSize(),a)},setInterpolation:function(a){var b;switch(a){case 2300:b=this.InterpolantFactoryMethodDiscrete;break;case 2301:b=this.InterpolantFactoryMethodLinear;break;case 2302:b=this.InterpolantFactoryMethodSmooth}if(void 0===b){b="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(void 0===this.createInterpolant)if(a!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);
13636 else throw Error(b);console.warn(b)}else this.createInterpolant=b},getInterpolation:function(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}},getValueSize:function(){return this.values.length/this.times.length},shift:function(a){if(0!==a)for(var b=this.times,c=0,d=b.length;c!==d;++c)b[c]+=a;return this},scale:function(a){if(1!==a)for(var b=this.times,c=
13637 0,d=b.length;c!==d;++c)b[c]*=a;return this},trim:function(a,b){for(var c=this.times,d=c.length,e=0,f=d-1;e!==d&&c[e]<a;)++e;for(;-1!==f&&c[f]>b;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=ba.arraySlice(c,e,f),this.values=ba.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty",
13638 this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&ba.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("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,
13639 f=a.length-1,g=1;g<f;++g){var h=!1,k=a[g];if(k!==a[g+1]&&(1!==g||k!==k[0]))if(d)h=!0;else for(var m=g*c,l=m-c,p=m+c,k=0;k!==c;++k){var n=b[m+k];if(n!==b[l+k]||n!==b[p+k]){h=!0;break}}if(h){if(g!==e)for(a[e]=a[g],h=g*c,m=e*c,k=0;k!==c;++k)b[m+k]=b[h+k];++e}}if(0<f){a[e]=a[f];h=f*c;m=e*c;for(k=0;k!==c;++k)b[m+k]=b[h+k];++e}e!==a.length&&(this.times=ba.arraySlice(a,0,e),this.values=ba.arraySlice(b,0,e*c));return this}};cc.prototype=Object.assign(Object.create(Ya),{constructor:cc,ValueTypeName:"vector"});
13640 wd.prototype=Object.assign(Object.create(qa.prototype),{constructor:wd,interpolate_:function(a,b,c,d){var e=this.resultBuffer,f=this.sampleValues,g=this.valueSize;a*=g;b=(c-b)/(d-b);for(c=a+g;a!==c;a+=4)da.slerpFlat(e,0,f,a-g,f,a,b);return e}});Xc.prototype=Object.assign(Object.create(Ya),{constructor:Xc,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(a){return new wd(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});
13641 dc.prototype=Object.assign(Object.create(Ya),{constructor:dc,ValueTypeName:"number"});xd.prototype=Object.assign(Object.create(Ya),{constructor:xd,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});yd.prototype=Object.assign(Object.create(Ya),{constructor:yd,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});
13642 zd.prototype=Object.assign(Object.create(Ya),{constructor:zd,ValueTypeName:"color"});vb.prototype=Ya;Ya.constructor=vb;Object.assign(vb,{parse:function(a){if(void 0===a.type)throw Error("track type undefined, can not parse");var b=vb._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){var c=[],d=[];ba.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)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=
13643 b.toJSON(a);else{var b={name:a.name,times:ba.convertArray(a.times,Array),values:ba.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return dc;case "vector":case "vector2":case "vector3":case "vector4":return cc;case "color":return zd;case "quaternion":return Xc;case "bool":case "boolean":return yd;
13644 case "string":return xd}throw Error("Unsupported typeName: "+a);}});ta.prototype={constructor:ta,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;a<this.tracks.length;a++)this.tracks[a].trim(0,this.duration);return this},optimize:function(){for(var a=0;a<this.tracks.length;a++)this.tracks[a].optimize();return this}};Object.assign(ta,{parse:function(a){for(var b=[],c=a.tracks,
13645 d=1/(a.fps||1),e=0,f=c.length;e!==f;++e)b.push(vb.parse(c[e]).scale(d));return new ta(a.name,a.duration,b)},toJSON:function(a){var b=[],c=a.tracks;a={name:a.name,duration:a.duration,tracks:b};for(var d=0,e=c.length;d!==e;++d)b.push(vb.toJSON(c[d]));return a},CreateFromMorphTargetSequence:function(a,b,c,d){for(var e=b.length,f=[],g=0;g<e;g++){var h=[],k=[];h.push((g+e-1)%e,g,(g+1)%e);k.push(0,1,0);var m=ba.getKeyframeOrder(h),h=ba.sortedArray(h,1,m),k=ba.sortedArray(k,1,m);d||0!==h[0]||(h.push(e),
13646 k.push(k[0]));f.push((new dc(".morphTargetInfluences["+b[g].name+"]",h,k)).scale(1/c))}return new ta(a,-1,f)},findByName:function(a,b){var c=a;Array.isArray(a)||(c=a.geometry&&a.geometry.animations||a.animations);for(var d=0;d<c.length;d++)if(c[d].name===b)return c[d];return null},CreateClipsFromMorphTargetSequences:function(a,b,c){for(var d={},e=/^([\w-]*?)([\d]+)$/,f=0,g=a.length;f<g;f++){var h=a[f],k=h.name.match(e);if(k&&1<k.length){var m=k[1];(k=d[m])||(d[m]=k=[]);k.push(h)}}a=[];for(m in d)a.push(ta.CreateFromMorphTargetSequence(m,
13647 d[m],b,c));return a},parseAnimation:function(a,b){if(!a)return console.error(" no animation in JSONLoader data"),null;for(var c=function(a,b,c,d,e){if(0!==c.length){var f=[],g=[];ba.flattenJSON(c,f,g,d);0!==f.length&&e.push(new a(b,f,g))}},d=[],e=a.name||"default",f=a.length||-1,g=a.fps||30,h=a.hierarchy||[],k=0;k<h.length;k++){var m=h[k].keys;if(m&&0!==m.length)if(m[0].morphTargets){for(var f={},l=0;l<m.length;l++)if(m[l].morphTargets)for(var p=0;p<m[l].morphTargets.length;p++)f[m[l].morphTargets[p]]=
13648 -1;for(var n in f){for(var q=[],w=[],p=0;p!==m[l].morphTargets.length;++p){var u=m[l];q.push(u.time);w.push(u.morphTarget===n?1:0)}d.push(new dc(".morphTargetInfluence["+n+"]",q,w))}f=f.length*(g||1)}else l=".bones["+b[k].name+"]",c(cc,l+".position",m,"pos",d),c(Xc,l+".quaternion",m,"rot",d),c(cc,l+".scale",m,"scl",d)}return 0===d.length?null:new ta(e,f,d)}});Object.assign(Ad.prototype,{load:function(a,b,c,d){var e=this;(new Ma(e.manager)).load(a,function(a){b(e.parse(JSON.parse(a)))},c,d)},setTextures:function(a){this.textures=
13649 a},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 Mf[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.emissive&&d.emissive.setHex(a.emissive);void 0!==a.specular&&d.specular.setHex(a.specular);void 0!==a.shininess&&(d.shininess=a.shininess);
13650 void 0!==a.clearCoat&&(d.clearCoat=a.clearCoat);void 0!==a.clearCoatRoughness&&(d.clearCoatRoughness=a.clearCoatRoughness);void 0!==a.uniforms&&(d.uniforms=a.uniforms);void 0!==a.vertexShader&&(d.vertexShader=a.vertexShader);void 0!==a.fragmentShader&&(d.fragmentShader=a.fragmentShader);void 0!==a.vertexColors&&(d.vertexColors=a.vertexColors);void 0!==a.fog&&(d.fog=a.fog);void 0!==a.shading&&(d.shading=a.shading);void 0!==a.blending&&(d.blending=a.blending);void 0!==a.side&&(d.side=a.side);void 0!==
13651 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.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&&
13652 (d.wireframeLinejoin=a.wireframeLinejoin);void 0!==a.skinning&&(d.skinning=a.skinning);void 0!==a.morphTargets&&(d.morphTargets=a.morphTargets);void 0!==a.size&&(d.size=a.size);void 0!==a.sizeAttenuation&&(d.sizeAttenuation=a.sizeAttenuation);void 0!==a.map&&(d.map=b(a.map));void 0!==a.alphaMap&&(d.alphaMap=b(a.alphaMap),d.transparent=!0);void 0!==a.bumpMap&&(d.bumpMap=b(a.bumpMap));void 0!==a.bumpScale&&(d.bumpScale=a.bumpScale);void 0!==a.normalMap&&(d.normalMap=b(a.normalMap));if(void 0!==a.normalScale){var e=
13653 a.normalScale;!1===Array.isArray(e)&&(e=[e,e]);d.normalScale=(new C).fromArray(e)}void 0!==a.displacementMap&&(d.displacementMap=b(a.displacementMap));void 0!==a.displacementScale&&(d.displacementScale=a.displacementScale);void 0!==a.displacementBias&&(d.displacementBias=a.displacementBias);void 0!==a.roughnessMap&&(d.roughnessMap=b(a.roughnessMap));void 0!==a.metalnessMap&&(d.metalnessMap=b(a.metalnessMap));void 0!==a.emissiveMap&&(d.emissiveMap=b(a.emissiveMap));void 0!==a.emissiveIntensity&&(d.emissiveIntensity=
13654 a.emissiveIntensity);void 0!==a.specularMap&&(d.specularMap=b(a.specularMap));void 0!==a.envMap&&(d.envMap=b(a.envMap));void 0!==a.reflectivity&&(d.reflectivity=a.reflectivity);void 0!==a.lightMap&&(d.lightMap=b(a.lightMap));void 0!==a.lightMapIntensity&&(d.lightMapIntensity=a.lightMapIntensity);void 0!==a.aoMap&&(d.aoMap=b(a.aoMap));void 0!==a.aoMapIntensity&&(d.aoMapIntensity=a.aoMapIntensity);void 0!==a.gradientMap&&(d.gradientMap=b(a.gradientMap));if(void 0!==a.materials)for(var e=0,f=a.materials.length;e<
13655 f;e++)d.materials.push(this.parse(a.materials[e]));return d}});Object.assign(Sd.prototype,{load:function(a,b,c,d){var e=this;(new Ma(e.manager)).load(a,function(a){b(e.parse(JSON.parse(a)))},c,d)},parse:function(a){var b=new D,c=a.data.index,d={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};void 0!==c&&(c=new d[c.type](c.array),
13656 b.setIndex(new y(c,1)));var e=a.data.attributes,f;for(f in e){var g=e[f],c=new d[g.type](g.array);b.addAttribute(f,new y(c,g.itemSize,g.normalized))}d=a.data.groups||a.data.drawcalls||a.data.offsets;if(void 0!==d)for(f=0,c=d.length;f!==c;++f)e=d[f],b.addGroup(e.start,e.count,e.materialIndex);a=a.data.boundingSphere;void 0!==a&&(d=new q,void 0!==a.center&&d.fromArray(a.center),b.boundingSphere=new Fa(d,a.radius));return b}});wb.prototype={constructor:wb,crossOrigin:void 0,extractUrlBase:function(a){a=
13657 a.split("/");if(1===a.length)return"./";a.pop();return a.join("/")+"/"},initMaterials:function(a,b,c){for(var d=[],e=0;e<a.length;++e)d[e]=this.createMaterial(a[e],b,c);return d},createMaterial:function(){var a,b,c;return function(d,e,f){function g(a,c,d,g,k){a=e+a;var m=wb.Handlers.get(a);null!==m?a=m.load(a):(b.setCrossOrigin(f),a=b.load(a));void 0!==c&&(a.repeat.fromArray(c),1!==c[0]&&(a.wrapS=1E3),1!==c[1]&&(a.wrapT=1E3));void 0!==d&&a.offset.fromArray(d);void 0!==g&&("repeat"===g[0]&&(a.wrapS=
13658 1E3),"mirror"===g[0]&&(a.wrapS=1002),"repeat"===g[1]&&(a.wrapT=1E3),"mirror"===g[1]&&(a.wrapT=1002));void 0!==k&&(a.anisotropy=k);c=Q.generateUUID();h[c]=a;return c}void 0===a&&(a=new N);void 0===b&&(b=new md);void 0===c&&(c=new Ad);var h={},k={uuid:Q.generateUUID(),type:"MeshLambertMaterial"},m;for(m in d){var l=d[m];switch(m){case "DbgColor":case "DbgIndex":case "opticalDensity":case "illumination":break;case "DbgName":k.name=l;break;case "blending":k.blending=Me[l];break;case "colorAmbient":case "mapAmbient":console.warn("THREE.Loader.createMaterial:",
13659 m,"is no longer supported.");break;case "colorDiffuse":k.color=a.fromArray(l).getHex();break;case "colorSpecular":k.specular=a.fromArray(l).getHex();break;case "colorEmissive":k.emissive=a.fromArray(l).getHex();break;case "specularCoef":k.shininess=l;break;case "shading":"basic"===l.toLowerCase()&&(k.type="MeshBasicMaterial");"phong"===l.toLowerCase()&&(k.type="MeshPhongMaterial");"standard"===l.toLowerCase()&&(k.type="MeshStandardMaterial");break;case "mapDiffuse":k.map=g(l,d.mapDiffuseRepeat,d.mapDiffuseOffset,
13660 d.mapDiffuseWrap,d.mapDiffuseAnisotropy);break;case "mapDiffuseRepeat":case "mapDiffuseOffset":case "mapDiffuseWrap":case "mapDiffuseAnisotropy":break;case "mapEmissive":k.emissiveMap=g(l,d.mapEmissiveRepeat,d.mapEmissiveOffset,d.mapEmissiveWrap,d.mapEmissiveAnisotropy);break;case "mapEmissiveRepeat":case "mapEmissiveOffset":case "mapEmissiveWrap":case "mapEmissiveAnisotropy":break;case "mapLight":k.lightMap=g(l,d.mapLightRepeat,d.mapLightOffset,d.mapLightWrap,d.mapLightAnisotropy);break;case "mapLightRepeat":case "mapLightOffset":case "mapLightWrap":case "mapLightAnisotropy":break;
13661 case "mapAO":k.aoMap=g(l,d.mapAORepeat,d.mapAOOffset,d.mapAOWrap,d.mapAOAnisotropy);break;case "mapAORepeat":case "mapAOOffset":case "mapAOWrap":case "mapAOAnisotropy":break;case "mapBump":k.bumpMap=g(l,d.mapBumpRepeat,d.mapBumpOffset,d.mapBumpWrap,d.mapBumpAnisotropy);break;case "mapBumpScale":k.bumpScale=l;break;case "mapBumpRepeat":case "mapBumpOffset":case "mapBumpWrap":case "mapBumpAnisotropy":break;case "mapNormal":k.normalMap=g(l,d.mapNormalRepeat,d.mapNormalOffset,d.mapNormalWrap,d.mapNormalAnisotropy);
13662 break;case "mapNormalFactor":k.normalScale=[l,l];break;case "mapNormalRepeat":case "mapNormalOffset":case "mapNormalWrap":case "mapNormalAnisotropy":break;case "mapSpecular":k.specularMap=g(l,d.mapSpecularRepeat,d.mapSpecularOffset,d.mapSpecularWrap,d.mapSpecularAnisotropy);break;case "mapSpecularRepeat":case "mapSpecularOffset":case "mapSpecularWrap":case "mapSpecularAnisotropy":break;case "mapMetalness":k.metalnessMap=g(l,d.mapMetalnessRepeat,d.mapMetalnessOffset,d.mapMetalnessWrap,d.mapMetalnessAnisotropy);
13663 break;case "mapMetalnessRepeat":case "mapMetalnessOffset":case "mapMetalnessWrap":case "mapMetalnessAnisotropy":break;case "mapRoughness":k.roughnessMap=g(l,d.mapRoughnessRepeat,d.mapRoughnessOffset,d.mapRoughnessWrap,d.mapRoughnessAnisotropy);break;case "mapRoughnessRepeat":case "mapRoughnessOffset":case "mapRoughnessWrap":case "mapRoughnessAnisotropy":break;case "mapAlpha":k.alphaMap=g(l,d.mapAlphaRepeat,d.mapAlphaOffset,d.mapAlphaWrap,d.mapAlphaAnisotropy);break;case "mapAlphaRepeat":case "mapAlphaOffset":case "mapAlphaWrap":case "mapAlphaAnisotropy":break;
13664 case "flipSided":k.side=1;break;case "doubleSided":k.side=2;break;case "transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity");k.opacity=l;break;case "depthTest":case "depthWrite":case "colorWrite":case "opacity":case "reflectivity":case "transparent":case "visible":case "wireframe":k[m]=l;break;case "vertexColors":!0===l&&(k.vertexColors=2);"face"===l&&(k.vertexColors=1);break;default:console.error("THREE.Loader.createMaterial: Unsupported",m,l)}}"MeshBasicMaterial"===
13665 k.type&&delete k.emissive;"MeshPhongMaterial"!==k.type&&delete k.specular;1>k.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()};wb.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;c<d;c+=2){var e=b[c+1];if(b[c].test(a))return e}return null}};Object.assign(Td.prototype,{load:function(a,b,c,d){var e=this,f=this.texturePath&&"string"===typeof this.texturePath?this.texturePath:wb.prototype.extractUrlBase(a),g=new Ma(this.manager);
13666 g.setWithCredentials(this.withCredentials);g.load(a,function(c){c=JSON.parse(c);var d=c.metadata;if(void 0!==d&&(d=d.type,void 0!==d)){if("object"===d.toLowerCase()){console.error("THREE.JSONLoader: "+a+" should be loaded with THREE.ObjectLoader instead.");return}if("scene"===d.toLowerCase()){console.error("THREE.JSONLoader: "+a+" should be loaded with THREE.SceneLoader instead.");return}}c=e.parse(c,f);b(c.geometry,c.materials)},c,d)},setTexturePath:function(a){this.texturePath=a},parse:function(a,
13667 b){var c=new S,d=void 0!==a.scale?1/a.scale:1;(function(b){var d,g,h,k,m,l,p,n,r,w,u,F,t,v=a.faces;l=a.vertices;var y=a.normals,z=a.colors,A=0;if(void 0!==a.uvs){for(d=0;d<a.uvs.length;d++)a.uvs[d].length&&A++;for(d=0;d<A;d++)c.faceVertexUvs[d]=[]}k=0;for(m=l.length;k<m;)d=new q,d.x=l[k++]*b,d.y=l[k++]*b,d.z=l[k++]*b,c.vertices.push(d);k=0;for(m=v.length;k<m;)if(b=v[k++],r=b&1,h=b&2,d=b&8,p=b&16,w=b&32,l=b&64,b&=128,r){r=new ha;r.a=v[k];r.b=v[k+1];r.c=v[k+3];u=new ha;u.a=v[k+1];u.b=v[k+2];u.c=v[k+
13668 3];k+=4;h&&(h=v[k++],r.materialIndex=h,u.materialIndex=h);h=c.faces.length;if(d)for(d=0;d<A;d++)for(F=a.uvs[d],c.faceVertexUvs[d][h]=[],c.faceVertexUvs[d][h+1]=[],g=0;4>g;g++)n=v[k++],t=F[2*n],n=F[2*n+1],t=new C(t,n),2!==g&&c.faceVertexUvs[d][h].push(t),0!==g&&c.faceVertexUvs[d][h+1].push(t);p&&(p=3*v[k++],r.normal.set(y[p++],y[p++],y[p]),u.normal.copy(r.normal));if(w)for(d=0;4>d;d++)p=3*v[k++],w=new q(y[p++],y[p++],y[p]),2!==d&&r.vertexNormals.push(w),0!==d&&u.vertexNormals.push(w);l&&(l=v[k++],
13669 l=z[l],r.color.setHex(l),u.color.setHex(l));if(b)for(d=0;4>d;d++)l=v[k++],l=z[l],2!==d&&r.vertexColors.push(new N(l)),0!==d&&u.vertexColors.push(new N(l));c.faces.push(r);c.faces.push(u)}else{r=new ha;r.a=v[k++];r.b=v[k++];r.c=v[k++];h&&(h=v[k++],r.materialIndex=h);h=c.faces.length;if(d)for(d=0;d<A;d++)for(F=a.uvs[d],c.faceVertexUvs[d][h]=[],g=0;3>g;g++)n=v[k++],t=F[2*n],n=F[2*n+1],t=new C(t,n),c.faceVertexUvs[d][h].push(t);p&&(p=3*v[k++],r.normal.set(y[p++],y[p++],y[p]));if(w)for(d=0;3>d;d++)p=3*
13670 v[k++],w=new q(y[p++],y[p++],y[p]),r.vertexNormals.push(w);l&&(l=v[k++],r.color.setHex(z[l]));if(b)for(d=0;3>d;d++)l=v[k++],r.vertexColors.push(new N(z[l]));c.faces.push(r)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;d<g;d+=b)c.skinWeights.push(new ga(a.skinWeights[d],1<b?a.skinWeights[d+1]:0,2<b?a.skinWeights[d+2]:0,3<b?a.skinWeights[d+3]:0));if(a.skinIndices)for(d=0,g=a.skinIndices.length;d<g;d+=b)c.skinIndices.push(new ga(a.skinIndices[d],
13671 1<b?a.skinIndices[d+1]:0,2<b?a.skinIndices[d+2]:0,3<b?a.skinIndices[d+3]:0));c.bones=a.bones;c.bones&&0<c.bones.length&&(c.skinWeights.length!==c.skinIndices.length||c.skinIndices.length!==c.vertices.length)&&console.warn("When skinning, number of vertices ("+c.vertices.length+"), skinIndices ("+c.skinIndices.length+"), and skinWeights ("+c.skinWeights.length+") should match.")})();(function(b){if(void 0!==a.morphTargets)for(var d=0,g=a.morphTargets.length;d<g;d++){c.morphTargets[d]={};c.morphTargets[d].name=
13672 a.morphTargets[d].name;c.morphTargets[d].vertices=[];for(var h=c.morphTargets[d].vertices,k=a.morphTargets[d].vertices,m=0,l=k.length;m<l;m+=3){var p=new q;p.x=k[m]*b;p.y=k[m+1]*b;p.z=k[m+2]*b;h.push(p)}}if(void 0!==a.morphColors&&0<a.morphColors.length)for(console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.'),b=c.faces,h=a.morphColors[0].colors,d=0,g=b.length;d<g;d++)b[d].color.fromArray(h,3*d)})(d);(function(){var b=[],d=[];void 0!==a.animation&&d.push(a.animation);
13673 void 0!==a.animations&&(a.animations.length?d=d.concat(a.animations):d.push(a.animations));for(var g=0;g<d.length;g++){var h=ta.parseAnimation(d[g],c.bones);h&&b.push(h)}c.morphTargets&&(d=ta.CreateClipsFromMorphTargetSequences(c.morphTargets,10),b=b.concat(d));0<b.length&&(c.animations=b)})();c.computeFaceNormals();c.computeBoundingSphere();if(void 0===a.materials||0===a.materials.length)return{geometry:c};d=wb.prototype.initMaterials(a.materials,b,this.crossOrigin);return{geometry:c,materials:d}}});
13674 Object.assign(Fe.prototype,{load:function(a,b,c,d){""===this.texturePath&&(this.texturePath=a.substring(0,a.lastIndexOf("/")+1));var e=this;(new Ma(e.manager)).load(a,function(c){var d=null;try{d=JSON.parse(c)}catch(h){console.error("THREE:ObjectLoader: Can't parse "+a+".",h.message);return}c=d.metadata;void 0===c||void 0===c.type||"geometry"===c.type.toLowerCase()?console.error("THREE.ObjectLoader: Can't load "+a+". Use THREE.JSONLoader instead."):e.parse(d,b)},c,d)},setTexturePath:function(a){this.texturePath=
13675 a},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(a,b){var c=this.parseGeometries(a.geometries),d=this.parseImages(a.images,function(){void 0!==b&&b(e)}),d=this.parseTextures(a.textures,d),d=this.parseMaterials(a.materials,d),e=this.parseObject(a.object,c,d);a.animations&&(e.animations=this.parseAnimations(a.animations));void 0!==a.images&&0!==a.images.length||void 0===b||b(e);return e},parseGeometries:function(a){var b={};if(void 0!==a)for(var c=new Td,d=new Sd,e=0,f=a.length;e<f;e++){var g,
13676 h=a[e];switch(h.type){case "PlaneGeometry":case "PlaneBufferGeometry":g=new Ea[h.type](h.width,h.height,h.widthSegments,h.heightSegments);break;case "BoxGeometry":case "BoxBufferGeometry":case "CubeGeometry":g=new Ea[h.type](h.width,h.height,h.depth,h.widthSegments,h.heightSegments,h.depthSegments);break;case "CircleGeometry":case "CircleBufferGeometry":g=new Ea[h.type](h.radius,h.segments,h.thetaStart,h.thetaLength);break;case "CylinderGeometry":case "CylinderBufferGeometry":g=new Ea[h.type](h.radiusTop,
13677 h.radiusBottom,h.height,h.radialSegments,h.heightSegments,h.openEnded,h.thetaStart,h.thetaLength);break;case "ConeGeometry":case "ConeBufferGeometry":g=new Ea[h.type](h.radius,h.height,h.radialSegments,h.heightSegments,h.openEnded,h.thetaStart,h.thetaLength);break;case "SphereGeometry":case "SphereBufferGeometry":g=new Ea[h.type](h.radius,h.widthSegments,h.heightSegments,h.phiStart,h.phiLength,h.thetaStart,h.thetaLength);break;case "DodecahedronGeometry":case "IcosahedronGeometry":case "OctahedronGeometry":case "TetrahedronGeometry":g=
13678 new Ea[h.type](h.radius,h.detail);break;case "RingGeometry":case "RingBufferGeometry":g=new Ea[h.type](h.innerRadius,h.outerRadius,h.thetaSegments,h.phiSegments,h.thetaStart,h.thetaLength);break;case "TorusGeometry":case "TorusBufferGeometry":g=new Ea[h.type](h.radius,h.tube,h.radialSegments,h.tubularSegments,h.arc);break;case "TorusKnotGeometry":case "TorusKnotBufferGeometry":g=new Ea[h.type](h.radius,h.tube,h.tubularSegments,h.radialSegments,h.p,h.q);break;case "LatheGeometry":case "LatheBufferGeometry":g=
13679 new Ea[h.type](h.points,h.segments,h.phiStart,h.phiLength);break;case "BufferGeometry":g=d.parse(h);break;case "Geometry":g=c.parse(h.data,this.texturePath).geometry;break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type "'+h.type+'"');continue}g.uuid=h.uuid;void 0!==h.name&&(g.name=h.name);b[h.uuid]=g}return b},parseMaterials:function(a,b){var c={};if(void 0!==a){var d=new Ad;d.setTextures(b);for(var e=0,f=a.length;e<f;e++){var g=d.parse(a[e]);c[g.uuid]=g}}return c},parseAnimations:function(a){for(var b=
13680 [],c=0;c<a.length;c++){var d=ta.parse(a[c]);b.push(d)}return b},parseImages:function(a,b){function c(a){d.manager.itemStart(a);return g.load(a,function(){d.manager.itemEnd(a)},void 0,function(){d.manager.itemError(a)})}var d=this,e={};if(void 0!==a&&0<a.length){var f=new Pd(b),g=new Vc(f);g.setCrossOrigin(this.crossOrigin);for(var f=0,h=a.length;f<h;f++){var k=a[f],m=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(k.url)?k.url:d.texturePath+k.url;e[k.uuid]=c(m)}}return e},parseTextures:function(a,b){function c(a,
13681 b){if("number"===typeof a)return a;console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",a);return b[a]}var d={};if(void 0!==a)for(var e=0,f=a.length;e<f;e++){var g=a[e];void 0===g.image&&console.warn('THREE.ObjectLoader: No "image" specified for',g.uuid);void 0===b[g.image]&&console.warn("THREE.ObjectLoader: Undefined image",g.image);var h=new ea(b[g.image]);h.needsUpdate=!0;h.uuid=g.uuid;void 0!==g.name&&(h.name=g.name);void 0!==g.mapping&&(h.mapping=c(g.mapping,Ne));
13682 void 0!==g.offset&&h.offset.fromArray(g.offset);void 0!==g.repeat&&h.repeat.fromArray(g.repeat);void 0!==g.wrap&&(h.wrapS=c(g.wrap[0],le),h.wrapT=c(g.wrap[1],le));void 0!==g.minFilter&&(h.minFilter=c(g.minFilter,me));void 0!==g.magFilter&&(h.magFilter=c(g.magFilter,me));void 0!==g.anisotropy&&(h.anisotropy=g.anisotropy);void 0!==g.flipY&&(h.flipY=g.flipY);d[g.uuid]=h}return d},parseObject:function(){var a=new H;return function(b,c,d){function e(a){void 0===c[a]&&console.warn("THREE.ObjectLoader: Undefined geometry",
13683 a);return c[a]}function f(a){if(void 0!==a)return void 0===d[a]&&console.warn("THREE.ObjectLoader: Undefined material",a),d[a]}var g;switch(b.type){case "Scene":g=new jb;void 0!==b.background&&Number.isInteger(b.background)&&(g.background=new N(b.background));void 0!==b.fog&&("Fog"===b.fog.type?g.fog=new Jb(b.fog.color,b.fog.near,b.fog.far):"FogExp2"===b.fog.type&&(g.fog=new Ib(b.fog.color,b.fog.density)));break;case "PerspectiveCamera":g=new Ha(b.fov,b.aspect,b.near,b.far);void 0!==b.focus&&(g.focus=
13684 b.focus);void 0!==b.zoom&&(g.zoom=b.zoom);void 0!==b.filmGauge&&(g.filmGauge=b.filmGauge);void 0!==b.filmOffset&&(g.filmOffset=b.filmOffset);void 0!==b.view&&(g.view=Object.assign({},b.view));break;case "OrthographicCamera":g=new Hb(b.left,b.right,b.top,b.bottom,b.near,b.far);break;case "AmbientLight":g=new td(b.color,b.intensity);break;case "DirectionalLight":g=new sd(b.color,b.intensity);break;case "PointLight":g=new qd(b.color,b.intensity,b.distance,b.decay);break;case "SpotLight":g=new pd(b.color,
13685 b.intensity,b.distance,b.angle,b.penumbra,b.decay);break;case "HemisphereLight":g=new nd(b.color,b.groundColor,b.intensity);break;case "Mesh":g=e(b.geometry);var h=f(b.material);g=g.bones&&0<g.bones.length?new jd(g,h):new Ba(g,h);break;case "LOD":g=new Ac;break;case "Line":g=new Va(e(b.geometry),f(b.material),b.mode);break;case "LineSegments":g=new fa(e(b.geometry),f(b.material));break;case "PointCloud":case "Points":g=new Kb(e(b.geometry),f(b.material));break;case "Sprite":g=new zc(f(b.material));
13686 break;case "Group":g=new Bc;break;case "SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh type. Instantiates Object3D instead.");default:g=new G}g.uuid=b.uuid;void 0!==b.name&&(g.name=b.name);void 0!==b.matrix?(a.fromArray(b.matrix),a.decompose(g.position,g.quaternion,g.scale)):(void 0!==b.position&&g.position.fromArray(b.position),void 0!==b.rotation&&g.rotation.fromArray(b.rotation),void 0!==b.quaternion&&g.quaternion.fromArray(b.quaternion),void 0!==b.scale&&
13687 g.scale.fromArray(b.scale));void 0!==b.castShadow&&(g.castShadow=b.castShadow);void 0!==b.receiveShadow&&(g.receiveShadow=b.receiveShadow);b.shadow&&(void 0!==b.shadow.bias&&(g.shadow.bias=b.shadow.bias),void 0!==b.shadow.radius&&(g.shadow.radius=b.shadow.radius),void 0!==b.shadow.mapSize&&g.shadow.mapSize.fromArray(b.shadow.mapSize),void 0!==b.shadow.camera&&(g.shadow.camera=this.parseObject(b.shadow.camera)));void 0!==b.visible&&(g.visible=b.visible);void 0!==b.userData&&(g.userData=b.userData);
13688 if(void 0!==b.children)for(var k in b.children)g.add(this.parseObject(b.children[k],c,d));if("LOD"===b.type)for(b=b.levels,h=0;h<b.length;h++){var m=b[h];k=g.getObjectByProperty("uuid",m.object);void 0!==k&&g.addLevel(k,m.distance)}return g}}()});wa.prototype={constructor:wa,getPoint:function(a){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);for(var b=[],c=0;c<=a;c++)b.push(this.getPoint(c/
13689 a));return b},getSpacedPoints:function(a){a||(a=5);for(var b=[],c=0;c<=a;c++)b.push(this.getPointAt(c/a));return b},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),
13690 d=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0<k)h=d-1;else{h=d;break}d=h;if(c[d]===f)return d/(e-1);g=c[d];return(d+(f-g)/(c[d+1]-g))/(e-1)},getTangent:function(a){var b=a-1E-4;a+=1E-4;0>b&&(b=0);1<a&&(a=1);b=this.getPoint(b);return this.getPoint(a).clone().sub(b).normalize()},getTangentAt:function(a){a=
13691 this.getUtoTmapping(a);return this.getTangent(a)},computeFrenetFrames:function(a,b){var c=new q,d=[],e=[],f=[],g=new q,h=new H,k,m;for(k=0;k<=a;k++)m=k/a,d[k]=this.getTangentAt(m),d[k].normalize();e[0]=new q;f[0]=new q;k=Number.MAX_VALUE;m=Math.abs(d[0].x);var l=Math.abs(d[0].y),p=Math.abs(d[0].z);m<=k&&(k=m,c.set(1,0,0));l<=k&&(k=l,c.set(0,1,0));p<=k&&c.set(0,0,1);g.crossVectors(d[0],c).normalize();e[0].crossVectors(d[0],g);f[0].crossVectors(d[0],e[0]);for(k=1;k<=a;k++)e[k]=e[k-1].clone(),f[k]=f[k-
13692 1].clone(),g.crossVectors(d[k-1],d[k]),g.length()>Number.EPSILON&&(g.normalize(),c=Math.acos(Q.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(Q.clamp(e[0].dot(e[a]),-1,1)),c/=a,0<d[0].dot(g.crossVectors(e[0],e[a]))&&(c=-c),k=1;k<=a;k++)e[k].applyMatrix4(h.makeRotationAxis(d[k],c*k)),f[k].crossVectors(d[k],e[k]);return{tangents:d,normals:e,binormals:f}}};wa.create=function(a,b){a.prototype=Object.create(wa.prototype);
13693 a.prototype.constructor=a;a.prototype.getPoint=b;return a};Qa.prototype=Object.create(wa.prototype);Qa.prototype.constructor=Qa;Qa.prototype.isLineCurve=!0;Qa.prototype.getPoint=function(a){if(1===a)return this.v2.clone();var b=this.v2.clone().sub(this.v1);b.multiplyScalar(a).add(this.v1);return b};Qa.prototype.getPointAt=function(a){return this.getPoint(a)};Qa.prototype.getTangent=function(a){return this.v2.clone().sub(this.v1).normalize()};Yc.prototype=Object.assign(Object.create(wa.prototype),
13694 {constructor:Yc,add:function(a){this.curves.push(a)},closePath:function(){var a=this.curves[0].getPoint(0),b=this.curves[this.curves.length-1].getPoint(1);a.equals(b)||this.curves.push(new Qa(b,a))},getPoint:function(a){var b=a*this.getLength(),c=this.getCurveLengths();for(a=0;a<c.length;){if(c[a]>=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=
13695 !0;this.cacheLengths=null;this.getLengths()},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<d;c++)b+=this.curves[c].getLength(),a.push(b);return this.cacheLengths=a},getSpacedPoints:function(a){a||(a=40);for(var b=[],c=0;c<=a;c++)b.push(this.getPoint(c/a));this.autoClose&&b.push(b[0]);return b},getPoints:function(a){a=a||12;for(var b=[],c,d=0,e=this.curves;d<e.length;d++)for(var f=
13696 e[d],f=f.getPoints(f&&f.isEllipseCurve?2*a:f&&f.isLineCurve?1:f&&f.isSplineCurve?a*f.points.length:a),g=0;g<f.length;g++){var h=f[g];c&&c.equals(h)||(b.push(h),c=h)}this.autoClose&&1<b.length&&!b[b.length-1].equals(b[0])&&b.push(b[0]);return b},createPointsGeometry:function(a){a=this.getPoints(a);return this.createGeometry(a)},createSpacedPointsGeometry:function(a){a=this.getSpacedPoints(a);return this.createGeometry(a)},createGeometry:function(a){for(var b=new S,c=0,d=a.length;c<d;c++){var e=a[c];
13697 b.vertices.push(new q(e.x,e.y,e.z||0))}return b}});Xa.prototype=Object.create(wa.prototype);Xa.prototype.constructor=Xa;Xa.prototype.isEllipseCurve=!0;Xa.prototype.getPoint=function(a){for(var b=2*Math.PI,c=this.aEndAngle-this.aStartAngle,d=Math.abs(c)<Number.EPSILON;0>c;)c+=b;for(;c>b;)c-=b;c<Number.EPSILON&&(c=d?0:b);!0!==this.aClockwise||d||(c=c===b?-b:c-b);b=this.aStartAngle+a*c;a=this.aX+this.xRadius*Math.cos(b);var e=this.aY+this.yRadius*Math.sin(b);0!==this.aRotation&&(b=Math.cos(this.aRotation),
13698 c=Math.sin(this.aRotation),d=a-this.aX,e-=this.aY,a=d*b-e*c+this.aX,e=d*c+e*b+this.aY);return new C(a,e)};var ed={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a,b,c,d,e){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,d,e){a=.5*(c-a);d=.5*(d-b);var f=e*e;return(2*b-2*c+a+d)*e*f+(-3*b+3*c-2*a-d)*
13699 f+a*e+b}};xb.prototype=Object.create(wa.prototype);xb.prototype.constructor=xb;xb.prototype.isSplineCurve=!0;xb.prototype.getPoint=function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0===c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=ed.interpolate;return new C(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};yb.prototype=Object.create(wa.prototype);yb.prototype.constructor=yb;yb.prototype.getPoint=function(a){var b=pa.b3;return new C(b(a,this.v0.x,
13700 this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y))};yb.prototype.getTangent=function(a){var b=ed.tangentCubicBezier;return(new C(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y))).normalize()};zb.prototype=Object.create(wa.prototype);zb.prototype.constructor=zb;zb.prototype.getPoint=function(a){var b=pa.b2;return new C(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y))};zb.prototype.getTangent=function(a){var b=
13701 ed.tangentQuadraticBezier;return(new C(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y))).normalize()};var oe=Object.assign(Object.create(Yc.prototype),{fromPoints:function(a){this.moveTo(a[0].x,a[0].y);for(var b=1,c=a.length;b<c;b++)this.lineTo(a[b].x,a[b].y)},moveTo:function(a,b){this.currentPoint.set(a,b)},lineTo:function(a,b){var c=new Qa(this.currentPoint.clone(),new C(a,b));this.curves.push(c);this.currentPoint.set(a,b)},quadraticCurveTo:function(a,b,c,d){a=new zb(this.currentPoint.clone(),
13702 new C(a,b),new C(c,d));this.curves.push(a);this.currentPoint.set(c,d)},bezierCurveTo:function(a,b,c,d,e,f){a=new yb(this.currentPoint.clone(),new C(a,b),new C(c,d),new C(e,f));this.curves.push(a);this.currentPoint.set(e,f)},splineThru:function(a){var b=[this.currentPoint.clone()].concat(a),b=new xb(b);this.curves.push(b);this.currentPoint.copy(a[a.length-1])},arc:function(a,b,c,d,e,f){this.absarc(a+this.currentPoint.x,b+this.currentPoint.y,c,d,e,f)},absarc:function(a,b,c,d,e,f){this.absellipse(a,
13703 b,c,c,d,e,f)},ellipse:function(a,b,c,d,e,f,g,h){this.absellipse(a+this.currentPoint.x,b+this.currentPoint.y,c,d,e,f,g,h)},absellipse:function(a,b,c,d,e,f,g,h){a=new Xa(a,b,c,d,e,f,g,h);0<this.curves.length&&(b=a.getPoint(0),b.equals(this.currentPoint)||this.lineTo(b.x,b.y));this.curves.push(a);a=a.getPoint(1);this.currentPoint.copy(a)}});Ab.prototype=Object.assign(Object.create(oe),{constructor:Ab,getPointsHoles:function(a){for(var b=[],c=0,d=this.holes.length;c<d;c++)b[c]=this.holes[c].getPoints(a);
13704 return b},extractAllPoints:function(a){return{shape:this.getPoints(a),holes:this.getPointsHoles(a)}},extractPoints:function(a){return this.extractAllPoints(a)}});Zc.prototype=oe;oe.constructor=Zc;Ud.prototype={moveTo:function(a,b){this.currentPath=new Zc;this.subPaths.push(this.currentPath);this.currentPath.moveTo(a,b)},lineTo:function(a,b){this.currentPath.lineTo(a,b)},quadraticCurveTo:function(a,b,c,d){this.currentPath.quadraticCurveTo(a,b,c,d)},bezierCurveTo:function(a,b,c,d,e,f){this.currentPath.bezierCurveTo(a,
13705 b,c,d,e,f)},splineThru:function(a){this.currentPath.splineThru(a)},toShapes:function(a,b){function c(a){for(var b=[],c=0,d=a.length;c<d;c++){var e=a[c],f=new Ab;f.curves=e.curves;b.push(f)}return b}function d(a,b){for(var c=b.length,d=!1,e=c-1,f=0;f<c;e=f++){var g=b[e],h=b[f],k=h.x-g.x,m=h.y-g.y;if(Math.abs(m)>Number.EPSILON){if(0>m&&(g=b[f],k=-k,h=b[e],m=-m),!(a.y<g.y||a.y>h.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<=
13706 a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=pa.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);var g,h,k,m=[];if(1===f.length)return h=f[0],k=new Ab,k.curves=h.curves,m.push(k),m;var l=!e(f[0].getPoints()),l=a?!l:l;k=[];var p=[],n=[],q=0,w;p[q]=void 0;n[q]=[];for(var u=0,y=f.length;u<y;u++)h=f[u],w=h.getPoints(),g=e(w),(g=a?!g:g)?(!l&&p[q]&&q++,p[q]={s:new Ab,p:w},p[q].s.curves=h.curves,l&&q++,n[q]=[]):n[q].push({h:h,p:w[0]});if(!p[0])return c(f);if(1<p.length){u=
13707 !1;h=[];e=0;for(f=p.length;e<f;e++)k[e]=[];e=0;for(f=p.length;e<f;e++)for(g=n[e],l=0;l<g.length;l++){q=g[l];w=!0;for(y=0;y<p.length;y++)d(q.p,p[y].p)&&(e!==y&&h.push({froms:e,tos:y,hole:l}),w?(w=!1,k[y].push(q)):u=!0);w&&k[e].push(q)}0<h.length&&(u||(n=k))}u=0;for(e=p.length;u<e;u++)for(k=p[u].s,m.push(k),h=n[u],f=0,g=h.length;f<g;f++)k.holes.push(h[f].h);return m}};Object.assign(Vd.prototype,{isFont:!0,generateShapes:function(a,b,c){void 0===b&&(b=100);void 0===c&&(c=4);var d=this.data;a=String(a).split("");
13708 var e=b/d.resolution,f=0;b=[];for(var g=0;g<a.length;g++){var h;h=e;var k=f,m=d.glyphs[a[g]]||d.glyphs["?"];if(m){var l=new Ud,p=[],n=pa.b2,q=pa.b3,w,u,y,t,v,D,z,A;if(m.o)for(var C=m._cachedOutline||(m._cachedOutline=m.o.split(" ")),E=0,G=C.length;E<G;)switch(C[E++]){case "m":w=C[E++]*h+k;u=C[E++]*h;l.moveTo(w,u);break;case "l":w=C[E++]*h+k;u=C[E++]*h;l.lineTo(w,u);break;case "q":w=C[E++]*h+k;u=C[E++]*h;v=C[E++]*h+k;D=C[E++]*h;l.quadraticCurveTo(v,D,w,u);if(t=p[p.length-1]){y=t.x;t=t.y;for(var H=
13709 1;H<=c;H++){var J=H/c;n(J,y,v,w);n(J,t,D,u)}}break;case "b":if(w=C[E++]*h+k,u=C[E++]*h,v=C[E++]*h+k,D=C[E++]*h,z=C[E++]*h+k,A=C[E++]*h,l.bezierCurveTo(v,D,z,A,w,u),t=p[p.length-1])for(y=t.x,t=t.y,H=1;H<=c;H++)J=H/c,q(J,y,v,z,w),q(J,t,D,A,u)}h={offset:m.ha*h,path:l}}else h=void 0;f+=h.offset;b.push(h.path)}c=[];d=0;for(a=b.length;d<a;d++)Array.prototype.push.apply(c,b[d].toShapes());return c}});Object.assign(Ge.prototype,{load:function(a,b,c,d){var e=this;(new Ma(this.manager)).load(a,function(a){var c;
13710 try{c=JSON.parse(a)}catch(d){console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."),c=JSON.parse(a.substring(65,a.length-2))}a=e.parse(c);b&&b(a)},c,d)},parse:function(a){return new Vd(a)}});var Hd,Zd={getContext:function(){void 0===Hd&&(Hd=new (window.AudioContext||window.webkitAudioContext));return Hd},setContext:function(a){Hd=a}};Object.assign(Wd.prototype,{load:function(a,b,c,d){var e=new Ma(this.manager);e.setResponseType("arraybuffer");e.load(a,
13711 function(a){Zd.getContext().decodeAudioData(a,function(a){b(a)})},c,d)}});Xd.prototype=Object.assign(Object.create(na.prototype),{constructor:Xd,isRectAreaLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.width=a.width;this.height=a.height;return this}});Object.assign(He.prototype,{update:function(){var a,b,c,d,e,f,g,h=new H,k=new H;return function(m){if(a!==this||b!==m.focus||c!==m.fov||d!==m.aspect*this.aspect||e!==m.near||f!==m.far||g!==m.zoom){a=this;b=m.focus;c=m.fov;d=m.aspect*this.aspect;
13712 e=m.near;f=m.far;g=m.zoom;var l=m.projectionMatrix.clone(),p=this.eyeSep/2,n=p*e/b,q=e*Math.tan(Q.DEG2RAD*c*.5)/g,w;k.elements[12]=-p;h.elements[12]=p;p=-q*d+n;w=q*d+n;l.elements[0]=2*e/(w-p);l.elements[8]=(w+p)/(w-p);this.cameraL.projectionMatrix.copy(l);p=-q*d-n;w=q*d-n;l.elements[0]=2*e/(w-p);l.elements[8]=(w+p)/(w-p);this.cameraR.projectionMatrix.copy(l)}this.cameraL.matrixWorld.copy(m.matrixWorld).multiply(k);this.cameraR.matrixWorld.copy(m.matrixWorld).multiply(h)}}()});Bd.prototype=Object.create(G.prototype);
13713 Bd.prototype.constructor=Bd;Yd.prototype=Object.assign(Object.create(G.prototype),{constructor:Yd,getInput:function(){return this.gain},removeFilter:function(){null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null)},getFilter:function(){return this.filter},setFilter:function(a){null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination);
13714 this.filter=a;this.gain.connect(this.filter);this.filter.connect(this.context.destination)},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(a){this.gain.gain.value=a},updateMatrixWorld:function(){var a=new q,b=new da,c=new q,d=new q;return function(e){G.prototype.updateMatrixWorld.call(this,e);e=this.context.listener;var f=this.up;this.matrixWorld.decompose(a,b,c);d.set(0,0,-1).applyQuaternion(b);e.positionX?(e.positionX.setValueAtTime(a.x,this.context.currentTime),
13715 e.positionY.setValueAtTime(a.y,this.context.currentTime),e.positionZ.setValueAtTime(a.z,this.context.currentTime),e.forwardX.setValueAtTime(d.x,this.context.currentTime),e.forwardY.setValueAtTime(d.y,this.context.currentTime),e.forwardZ.setValueAtTime(d.z,this.context.currentTime),e.upX.setValueAtTime(f.x,this.context.currentTime),e.upY.setValueAtTime(f.y,this.context.currentTime),e.upZ.setValueAtTime(f.z,this.context.currentTime)):(e.setPosition(a.x,a.y,a.z),e.setOrientation(d.x,d.y,d.z,f.x,f.y,
13716 f.z))}}()});ec.prototype=Object.assign(Object.create(G.prototype),{constructor:ec,getOutput:function(){return this.gain},setNodeSource:function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this},setBuffer:function(a){this.buffer=a;this.sourceType="buffer";this.autoplay&&this.play();return this},play:function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");
13717 else{var a=this.context.createBufferSource();a.buffer=this.buffer;a.loop=this.loop;a.onended=this.onEnded.bind(this);a.playbackRate.setValueAtTime(this.playbackRate,this.startTime);a.start(0,this.startTime);this.isPlaying=!0;this.source=a;return this.connect()}},pause:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this.source.stop(),this.startTime=this.context.currentTime,this.isPlaying=!1,this},stop:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");
13718 else return this.source.stop(),this.startTime=0,this.isPlaying=!1,this},connect:function(){if(0<this.filters.length){this.source.connect(this.filters[0]);for(var a=1,b=this.filters.length;a<b;a++)this.filters[a-1].connect(this.filters[a]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this},disconnect:function(){if(0<this.filters.length){this.source.disconnect(this.filters[0]);for(var a=1,b=this.filters.length;a<b;a++)this.filters[a-
13719 1].disconnect(this.filters[a]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this},getFilters:function(){return this.filters},setFilters:function(a){a||(a=[]);!0===this.isPlaying?(this.disconnect(),this.filters=a,this.connect()):this.filters=a;return this},getFilter:function(){return this.getFilters()[0]},setFilter:function(a){return this.setFilters(a?[a]:[])},setPlaybackRate:function(a){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");
13720 else return this.playbackRate=a,!0===this.isPlaying&&this.source.playbackRate.setValueAtTime(this.playbackRate,this.context.currentTime),this},getPlaybackRate:function(){return this.playbackRate},onEnded:function(){this.isPlaying=!1},getLoop:function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.loop},setLoop:function(a){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this.loop=
13721 a,!0===this.isPlaying&&(this.source.loop=this.loop),this},getVolume:function(){return this.gain.gain.value},setVolume:function(a){this.gain.gain.value=a;return this}});$d.prototype=Object.assign(Object.create(ec.prototype),{constructor:$d,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},setRefDistance:function(a){this.panner.refDistance=a},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(a){this.panner.rolloffFactor=
13722 a},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(a){this.panner.distanceModel=a},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(a){this.panner.maxDistance=a},updateMatrixWorld:function(){var a=new q;return function(b){G.prototype.updateMatrixWorld.call(this,b);a.setFromMatrixPosition(this.matrixWorld);this.panner.setPosition(a.x,a.y,a.z)}}()});Object.assign(ae.prototype,{getFrequencyData:function(){this.analyser.getByteFrequencyData(this.data);
13723 return this.data},getAverageFrequency:function(){for(var a=0,b=this.getFrequencyData(),c=0;c<b.length;c++)a+=b[c];return a/b.length}});Cd.prototype={constructor:Cd,accumulate:function(a,b){var c=this.buffer,d=this.valueSize,e=a*d+d,f=this.cumulativeWeight;if(0===f){for(f=0;f!==d;++f)c[e+f]=c[f];f=b}else f+=b,this._mixBufferRegion(c,e,0,b/f,d);this.cumulativeWeight=f},apply:function(a){var b=this.valueSize,c=this.buffer;a=a*b+b;var d=this.cumulativeWeight,e=this.binding;this.cumulativeWeight=0;1>d&&
13724 this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,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,e){da.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=
13725 1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};ka.prototype={constructor:ka,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=ka.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case "materials":if(!a.material){console.error(" can not bind to material as node does not have a material",
13726 this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array",this);return}a=a.material.materials;break;case "bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;c<a.length;c++)if(a[c].name===f){f=c;break}break;default:if(void 0===a[c]){console.error(" can not bind to objectName of node, undefined",this);return}a=a[c]}if(void 0!==f){if(void 0===
13727 a[f]){console.error(" trying to bind to objectIndex of objectName, but is undefined:",this,a);return}a=a[f]}}f=a[d];if(void 0===f)console.error(" trying to update property for track: "+b.nodeName+"."+d+" but it wasn't found.",a);else{b=this.Versioning.None;void 0!==a.needsUpdate?(b=this.Versioning.NeedsUpdate,this.targetObject=a):void 0!==a.matrixWorldNeedsUpdate&&(b=this.Versioning.MatrixWorldNeedsUpdate,this.targetObject=a);c=this.BindingType.Direct;if(void 0!==e){if("morphTargetInfluences"===
13728 d){if(!a.geometry){console.error(" can not bind to morphTargetInfluences becasuse node does not have a geometry",this);return}if(!a.geometry.morphTargets){console.error(" can not bind to morphTargetInfluences becasuse node does not have a geometry.morphTargets",this);return}for(c=0;c<this.node.geometry.morphTargets.length;c++)if(a.geometry.morphTargets[c].name===e){e=c;break}}c=this.BindingType.ArrayElement;this.resolvedProperty=f;this.propertyIndex=e}else void 0!==f.fromArray&&void 0!==f.toArray?
13729 (c=this.BindingType.HasFromToArray,this.resolvedProperty=f):void 0!==f.length?(c=this.BindingType.EntireArray,this.resolvedProperty=f):this.propertyName=d;this.getValue=this.GetterByBindingType[c];this.setValue=this.SetterByBindingTypeAndVersioning[c][b]}}else console.error(" trying to update node for track: "+this.path+" but it wasn't found.")},unbind:function(){this.node=null;this.getValue=this._getValue_unbound;this.setValue=this._setValue_unbound}};Object.assign(ka.prototype,{_getValue_unavailable:function(){},
13730 _setValue_unavailable:function(){},_getValue_unbound:ka.prototype.getValue,_setValue_unbound:ka.prototype.setValue,BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function(a,b){a[b]=this.node[this.propertyName]},function(a,b){for(var c=this.resolvedProperty,d=0,e=c.length;d!==e;++d)a[b++]=c[d]},function(a,b){a[b]=this.resolvedProperty[this.propertyIndex]},function(a,b){this.resolvedProperty.toArray(a,
13731 b)}],SetterByBindingTypeAndVersioning:[[function(a,b){this.node[this.propertyName]=a[b]},function(a,b){this.node[this.propertyName]=a[b];this.targetObject.needsUpdate=!0},function(a,b){this.node[this.propertyName]=a[b];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){for(var c=this.resolvedProperty,d=0,e=c.length;d!==e;++d)c[d]=a[b++]},function(a,b){for(var c=this.resolvedProperty,d=0,e=c.length;d!==e;++d)c[d]=a[b++];this.targetObject.needsUpdate=!0},function(a,b){for(var c=this.resolvedProperty,
13732 d=0,e=c.length;d!==e;++d)c[d]=a[b++];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){this.resolvedProperty[this.propertyIndex]=a[b]},function(a,b){this.resolvedProperty[this.propertyIndex]=a[b];this.targetObject.needsUpdate=!0},function(a,b){this.resolvedProperty[this.propertyIndex]=a[b];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){this.resolvedProperty.fromArray(a,b)},function(a,b){this.resolvedProperty.fromArray(a,b);this.targetObject.needsUpdate=!0},function(a,b){this.resolvedProperty.fromArray(a,
13733 b);this.targetObject.matrixWorldNeedsUpdate=!0}]]});ka.Composite=function(a,b,c){c=c||ka.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)};ka.Composite.prototype={constructor:ka.Composite,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_,
13734 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()}};ka.create=function(a,b,c){return a&&a.isAnimationObjectGroup?new ka.Composite(a,b,c):new ka(a,b,c)};ka.parseTrackName=function(a){var b=/^((?:[\w-]+[\/:])*)([\w-]+)?(?:\.([\w-]+)(?:\[(.+)\])?)?\.([\w-]+)(?:\[(.+)\])?$/.exec(a);if(!b)throw Error("cannot parse trackName at all: "+a);b={nodeName:b[2],objectName:b[3],objectIndex:b[4],propertyName:b[5],propertyIndex:b[6]};
13735 if(null===b.propertyName||0===b.propertyName.length)throw Error("can not parse propertyName from trackName: "+a);return b};ka.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=function(a){for(var c=0;c<a.bones.length;c++){var d=a.bones[c];if(d.name===b)return d}return null}(a.skeleton);if(c)return c}if(a.children){var d=function(a){for(var c=0;c<a.length;c++){var g=a[c];if(g.name===b||g.uuid===b||(g=d(g.children)))return g}return null};
13736 if(c=d(a.children))return c}return null};be.prototype={constructor:be,isAnimationObjectGroup:!0,add:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._paths,g=this._parsedPaths,h=this._bindings,k=h.length,l=0,q=arguments.length;l!==q;++l){var p=arguments[l],n=p.uuid,r=e[n];if(void 0===r){r=c++;e[n]=r;b.push(p);for(var n=0,w=k;n!==w;++n)h[n].push(new ka(p,f[n],g[n]))}else if(r<d){var u=--d,w=b[u];e[w.uuid]=r;b[r]=w;e[n]=u;b[u]=p;n=0;for(w=k;n!==w;++n){var y=
13737 h[n],t=y[r];y[r]=y[u];void 0===t&&(t=new ka(p,f[n],g[n]));y[u]=t}}else void 0!==b[r]&&console.error("Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes...")}this.nCachedObjects_=d},remove:function(a){for(var b=this._objects,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k=arguments[g],l=k.uuid,q=d[l];if(void 0!==q&&q>=c){var p=c++,n=b[p];d[n.uuid]=q;b[q]=n;d[l]=p;b[p]=
13738 k;k=0;for(l=f;k!==l;++k){var n=e[k],r=n[q];n[q]=n[p];n[p]=r}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,q=e[l];if(void 0!==q)if(delete e[l],q<d){var l=--d,p=b[l],n=--c,r=b[n];e[p.uuid]=q;b[q]=p;e[r.uuid]=l;b[l]=r;b.pop();p=0;for(r=g;p!==r;++p){var w=f[p],u=w[n];w[q]=w[l];w[l]=u;w.pop()}}else for(n=--c,r=b[n],e[r.uuid]=q,b[q]=r,b.pop(),
13739 p=0,r=g;p!==r;++p)w=f[p],w[q]=w[n],w.pop()}this.nCachedObjects_=d},subscribe_:function(a,b){var c=this._bindingsIndicesByPath,d=c[a],e=this._bindings;if(void 0!==d)return e[d];var f=this._paths,g=this._parsedPaths,h=this._objects,k=this.nCachedObjects_,l=Array(h.length),d=e.length;c[a]=d;f.push(a);g.push(b);e.push(l);c=k;for(d=h.length;c!==d;++c)l[c]=new ka(h[c],a,b);return l},unsubscribe_:function(a){var b=this._bindingsIndicesByPath,c=b[a];if(void 0!==c){var d=this._paths,e=this._parsedPaths,f=
13740 this._bindings,g=f.length-1,h=f[g];b[a[g]]=c;f[c]=h;f.pop();e[c]=e[g];e.pop();d[c]=d[g];d.pop()}}};ce.prototype={constructor:ce,play:function(){this._mixer._activateAction(this);return this},stop:function(){this._mixer._deactivateAction(this);return this.reset()},reset:function(){this.paused=!1;this.enabled=!0;this.time=0;this._loopCount=-1;this._startTime=null;return this.stopFading().stopWarping()},isRunning:function(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&
13741 this._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(a){this._startTime=a;return this},setLoop:function(a,b){this.loop=a;this.repetitions=b;return this},setEffectiveWeight:function(a){this.weight=a;this._effectiveWeight=this.enabled?a:0;return this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(a){return this._scheduleFading(a,0,1)},fadeOut:function(a){return this._scheduleFading(a,1,0)},crossFadeFrom:function(a,
13742 b,c){a.fadeOut(b);this.fadeIn(b);if(c){c=this._clip.duration;var d=a._clip.duration,e=c/d;a.warp(1,d/c,b);this.warp(e,1,b)}return this},crossFadeTo:function(a,b,c){return a.crossFadeFrom(this,b,c)},stopFading:function(){var a=this._weightInterpolant;null!==a&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(a));return this},setEffectiveTimeScale:function(a){this.timeScale=a;this._effectiveTimeScale=this.paused?0:a;return this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},
13743 setDuration:function(a){this.timeScale=this._clip.duration/a;return this.stopWarping()},syncWith:function(a){this.time=a.time;this.timeScale=a.timeScale;return this.stopWarping()},halt:function(a){return this.warp(this._effectiveTimeScale,0,a)},warp:function(a,b,c){var d=this._mixer,e=d.time,f=this._timeScaleInterpolant,g=this.timeScale;null===f&&(this._timeScaleInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;d[1]=e+c;f[0]=a/g;f[1]=b/g;return this},stopWarping:function(){var a=
13744 this._timeScaleInterpolant;null!==a&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(a));return this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(a,b,c,d){var e=this._startTime;if(null!==e){b=(a-e)*c;if(0>b||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0<a){b=this._interpolants;for(var e=this._propertyBindings,
13745 f=0,g=b.length;f!==g;++f)b[f].evaluate(c),e[f].accumulate(d,a)}},_updateWeight:function(a){var b=0;if(this.enabled){var b=this.weight,c=this._weightInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===
13746 b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount;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{d=2202===d;-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,
13747 d)):this._setEndings(0===this.repetitions,!0,d));if(b>=c||0>b){var f=Math.floor(b/c),b=b-c*f,e=e+Math.abs(f),g=this.repetitions-e;0>g?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,b=0<a?c:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:0<a?1:-1})):(0===g?(a=0>a,this._setEndings(a,!a,d)):this._setEndings(!1,!1,d),this._loopCount=e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:f}))}if(d&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,
13748 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}};Object.assign(de.prototype,oa.prototype,{clipAction:function(a,b){var c=b||this._root,
13749 d=c.uuid,e="string"===typeof a?ta.findByName(c,a):a,c=null!==e?e.uuid:a,f=this._actionsByClip[c],g=null;if(void 0!==f){g=f.actionByRoot[d];if(void 0!==g)return g;g=f.knownActions[0];null===e&&(e=g._clip)}if(null===e)return null;e=new ce(this,e,b);this._bindAction(e,g);this._addInactiveAction(e,c,d);return e},existingAction:function(a,b){var c=b||this._root,d=c.uuid,c="string"===typeof a?ta.findByName(c,a):a,c=this._actionsByClip[c?c.uuid:a];return void 0!==c?c.actionByRoot[d]||null:null},stopAllAction:function(){for(var a=
13750 this._actions,b=this._nActiveActions,c=this._bindings,d=this._nActiveBindings,e=this._nActiveBindings=this._nActiveActions=0;e!==b;++e)a[e].reset();for(e=0;e!==d;++e)c[e].useCount=0;return this},update:function(a){a*=this.timeScale;for(var b=this._actions,c=this._nActiveActions,d=this.time+=a,e=Math.sign(a),f=this._accuIndex^=1,g=0;g!==c;++g){var h=b[g];h.enabled&&h._update(d,a,e,f)}a=this._bindings;b=this._nActiveBindings;for(g=0;g!==b;++g)a[g].apply(f);return this},getRoot:function(){return this._root},
13751 uncacheClip:function(a){var b=this._actions;a=a.uuid;var c=this._actionsByClip,d=c[a];if(void 0!==d){for(var d=d.knownActions,e=0,f=d.length;e!==f;++e){var g=d[e];this._deactivateAction(g);var h=g._cacheIndex,k=b[b.length-1];g._cacheIndex=null;g._byClipCacheIndex=null;k._cacheIndex=h;b[h]=k;b.pop();this._removeInactiveBindingsForAction(g)}delete c[a]}},uncacheRoot:function(a){a=a.uuid;var b=this._actionsByClip,c;for(c in b){var d=b[c].actionByRoot[a];void 0!==d&&(this._deactivateAction(d),this._removeInactiveAction(d))}c=
13752 this._bindingsByRootAndName[a];if(void 0!==c)for(var e in c)a=c[e],a.restoreOriginalState(),this._removeInactiveBinding(a)},uncacheAction:function(a,b){var c=this.existingAction(a,b);null!==c&&(this._deactivateAction(c),this._removeInactiveAction(c))}});Object.assign(de.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var q=
13753 d[k],p=q.name,n=l[p];if(void 0===n){n=f[k];if(void 0!==n){null===n._cacheIndex&&(++n.referenceCount,this._addInactiveBinding(n,h,p));continue}n=new Cd(ka.create(c,p,b&&b._propertyBindings[k].binding.parsedPath),q.ValueTypeName,q.getValueSize());++n.referenceCount;this._addInactiveBinding(n,h,p)}f[k]=n;g[k].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,
13754 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=
13755 {};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;
13756 return null!==a&&a<this._nActiveActions},_addInactiveAction:function(a,b,c){var d=this._actions,e=this._actionsByClip,f=e[b];void 0===f?(f={knownActions:[a],actionByRoot:{}},a._byClipCacheIndex=0,e[b]=f):(b=f.knownActions,a._byClipCacheIndex=b.length,b.push(a));a._cacheIndex=d.length;d.push(a);f.actionByRoot[c]=a},_removeInactiveAction:function(a){var b=this._actions,c=b[b.length-1],d=a._cacheIndex;c._cacheIndex=d;b[d]=c;b.pop();a._cacheIndex=null;var c=a._clip.uuid,d=this._actionsByClip,e=d[c],f=
13757 e.knownActions,g=f[f.length-1],h=a._byClipCacheIndex;g._byClipCacheIndex=h;f[h]=g;f.pop();a._byClipCacheIndex=null;delete e.actionByRoot[(b._localRoot||this._root).uuid];0===f.length&&delete d[c];this._removeInactiveBindingsForAction(a)},_removeInactiveBindingsForAction:function(a){a=a._propertyBindings;for(var b=0,c=a.length;b!==c;++b){var d=a[b];0===--d.referenceCount&&this._removeInactiveBinding(d)}},_lendAction:function(a){var b=this._actions,c=a._cacheIndex,d=this._nActiveActions++,e=b[d];a._cacheIndex=
13758 d;b[d]=a;e._cacheIndex=c;b[c]=e},_takeBackAction:function(a){var b=this._actions,c=a._cacheIndex,d=--this._nActiveActions,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_addInactiveBinding:function(a,b,c){var d=this._bindingsByRootAndName,e=d[b],f=this._bindings;void 0===e&&(e={},d[b]=e);e[c]=a;a._cacheIndex=f.length;f.push(a)},_removeInactiveBinding:function(a){var b=this._bindings,c=a.binding,d=c.rootNode.uuid,c=c.path,e=this._bindingsByRootAndName,f=e[d],g=b[b.length-1];a=a._cacheIndex;
13759 g._cacheIndex=a;b[a]=g;b.pop();delete f[c];a:{for(var h in f)break a;delete e[d]}},_lendBinding:function(a){var b=this._bindings,c=a._cacheIndex,d=this._nActiveBindings++,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_takeBackBinding:function(a){var b=this._bindings,c=a._cacheIndex,d=--this._nActiveBindings,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_lendControlInterpolant:function(){var a=this._controlInterpolants,b=this._nActiveControlInterpolants++,c=a[b];void 0===c&&(c=new Wc(new Float32Array(2),
13760 new Float32Array(2),1,this._controlInterpolantsResultBuffer),c.__cacheIndex=b,a[b]=c);return c},_takeBackControlInterpolant:function(a){var b=this._controlInterpolants,c=a.__cacheIndex,d=--this._nActiveControlInterpolants,e=b[d];a.__cacheIndex=d;b[d]=a;e.__cacheIndex=c;b[c]=e},_controlInterpolantsResultBuffer:new Float32Array(1)});Dd.prototype.clone=function(){return new Dd(void 0===this.value.clone?this.value:this.value.clone())};Bb.prototype=Object.create(D.prototype);Bb.prototype.constructor=Bb;
13761 Bb.prototype.isInstancedBufferGeometry=!0;Bb.prototype.addGroup=function(a,b,c){this.groups.push({start:a,count:b,materialIndex:c})};Bb.prototype.copy=function(a){var b=a.index;null!==b&&this.setIndex(b.clone());var b=a.attributes,c;for(c in b)this.addAttribute(c,b[c].clone());a=a.groups;c=0;for(b=a.length;c<b;c++){var d=a[c];this.addGroup(d.start,d.count,d.materialIndex)}return this};ee.prototype={constructor:ee,isInterleavedBufferAttribute:!0,get count(){return this.data.count},get array(){return this.data.array},
13762 setX:function(a,b){this.data.array[a*this.data.stride+this.offset]=b;return this},setY:function(a,b){this.data.array[a*this.data.stride+this.offset+1]=b;return this},setZ:function(a,b){this.data.array[a*this.data.stride+this.offset+2]=b;return this},setW:function(a,b){this.data.array[a*this.data.stride+this.offset+3]=b;return this},getX:function(a){return this.data.array[a*this.data.stride+this.offset]},getY:function(a){return this.data.array[a*this.data.stride+this.offset+1]},getZ:function(a){return this.data.array[a*
13763 this.data.stride+this.offset+2]},getW:function(a){return this.data.array[a*this.data.stride+this.offset+3]},setXY:function(a,b,c){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;return this},setXYZ:function(a,b,c,d){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;this.data.array[a+2]=d;return this},setXYZW:function(a,b,c,d,e){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;this.data.array[a+2]=d;this.data.array[a+
13764 3]=e;return this}};fc.prototype={constructor:fc,isInterleavedBuffer:!0,set needsUpdate(a){!0===a&&this.version++},setArray:function(a){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.count=void 0!==a?a.length/this.stride:0;this.array=a},setDynamic:function(a){this.dynamic=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride=a.stride;this.dynamic=a.dynamic;return this},copyAt:function(a,b,c){a*=
13765 this.stride;c*=b.stride;for(var d=0,e=this.stride;d<e;d++)this.array[a+d]=b.array[c+d];return this},set:function(a,b){void 0===b&&(b=0);this.array.set(a,b);return this},clone:function(){return(new this.constructor).copy(this)},onUpload:function(a){this.onUploadCallback=a;return this}};gc.prototype=Object.create(fc.prototype);gc.prototype.constructor=gc;gc.prototype.isInstancedInterleavedBuffer=!0;gc.prototype.copy=function(a){fc.prototype.copy.call(this,a);this.meshPerAttribute=a.meshPerAttribute;
13766 return this};hc.prototype=Object.create(y.prototype);hc.prototype.constructor=hc;hc.prototype.isInstancedBufferAttribute=!0;hc.prototype.copy=function(a){y.prototype.copy.call(this,a);this.meshPerAttribute=a.meshPerAttribute;return this};fe.prototype={constructor:fe,linePrecision:1,set:function(a,b){this.ray.set(a,b)},setFromCamera:function(a,b){b&&b.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(b.matrixWorld),this.ray.direction.set(a.x,a.y,.5).unproject(b).sub(this.ray.origin).normalize()):
13767 b&&b.isOrthographicCamera?(this.ray.origin.set(a.x,a.y,(b.near+b.far)/(b.near-b.far)).unproject(b),this.ray.direction.set(0,0,-1).transformDirection(b.matrixWorld)):console.error("THREE.Raycaster: Unsupported camera type.")},intersectObject:function(a,b){var c=[];ge(a,this,c,b);c.sort(Ie);return c},intersectObjects:function(a,b){var c=[];if(!1===Array.isArray(a))return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."),c;for(var d=0,e=a.length;d<e;d++)ge(a[d],this,c,b);c.sort(Ie);
13768 return c}};he.prototype={constructor:he,start:function(){this.oldTime=this.startTime=(performance||Date).now();this.elapsedTime=0;this.running=!0},stop:function(){this.getElapsedTime();this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var b=(performance||Date).now(),a=(b-this.oldTime)/1E3;this.oldTime=b;this.elapsedTime+=a}return a}};ie.prototype={constructor:ie,set:function(a,
13769 b,c){this.radius=a;this.phi=b;this.theta=c;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.radius=a.radius;this.phi=a.phi;this.theta=a.theta;return this},makeSafe:function(){this.phi=Math.max(1E-6,Math.min(Math.PI-1E-6,this.phi));return this},setFromVector3:function(a){this.radius=a.length();0===this.radius?this.phi=this.theta=0:(this.theta=Math.atan2(a.x,a.z),this.phi=Math.acos(Q.clamp(a.y/this.radius,-1,1)));return this}};je.prototype={constructor:je,
13770 set:function(a,b,c){this.radius=a;this.theta=b;this.y=c;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.radius=a.radius;this.theta=a.theta;this.y=a.y;return this},setFromVector3:function(a){this.radius=Math.sqrt(a.x*a.x+a.z*a.z);this.theta=Math.atan2(a.x,a.z);this.y=a.y;return this}};ua.prototype=Object.create(Ba.prototype);ua.prototype.constructor=ua;ua.prototype.createAnimation=function(a,b,c,d){b={start:b,end:c,length:c-b+1,fps:d,duration:(c-b)/d,lastFrame:0,
13771 currentFrame:0,active:!1,time:0,direction:1,weight:1,directionBackwards:!1,mirroredLoop:!1};this.animationsMap[a]=b;this.animationsList.push(b)};ua.prototype.autoCreateAnimations=function(a){for(var b=/([a-z]+)_?(\d+)/i,c,d={},e=this.geometry,f=0,g=e.morphTargets.length;f<g;f++){var h=e.morphTargets[f].name.match(b);if(h&&1<h.length){var k=h[1];d[k]||(d[k]={start:Infinity,end:-Infinity});h=d[k];f<h.start&&(h.start=f);f>h.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,
13772 a);this.firstAnimation=c};ua.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};ua.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};ua.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};ua.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/
13773 c.duration)};ua.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};ua.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};ua.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};ua.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};ua.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+
13774 a+"] undefined in .playAnimation()")};ua.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};ua.prototype.update=function(a){for(var b=0,c=this.animationsList.length;b<c;b++){var d=this.animationsList[b];if(d.active){var e=d.duration/d.length;d.time+=d.direction*a;if(d.mirroredLoop){if(d.time>d.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=
13775 d.duration);var f=d.start+Q.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};$c.prototype=Object.create(G.prototype);
13776 $c.prototype.constructor=$c;$c.prototype.isImmediateRenderObject=!0;ad.prototype=Object.create(fa.prototype);ad.prototype.constructor=ad;ad.prototype.update=function(){var a=new q,b=new q,c=new za;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,q=k.length;l<q;l++)for(var p=k[l],n=0,r=p.vertexNormals.length;n<
13777 r;n++){var w=p.vertexNormals[n];a.copy(h[p[d[n]]]).applyMatrix4(e);b.copy(w).applyMatrix3(c).normalize().multiplyScalar(this.size).add(a);f.setXYZ(g,a.x,a.y,a.z);g+=1;f.setXYZ(g,b.x,b.y,b.z);g+=1}else if(g&&g.isBufferGeometry)for(d=g.attributes.position,h=g.attributes.normal,n=g=0,r=d.count;n<r;n++)a.set(d.getX(n),d.getY(n),d.getZ(n)).applyMatrix4(e),b.set(h.getX(n),h.getY(n),h.getZ(n)),b.applyMatrix3(c).normalize().multiplyScalar(this.size).add(a),f.setXYZ(g,a.x,a.y,a.z),g+=1,f.setXYZ(g,b.x,b.y,
13778 b.z),g+=1;f.needsUpdate=!0;return this}}();ic.prototype=Object.create(G.prototype);ic.prototype.constructor=ic;ic.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};ic.prototype.update=function(){var a=new q,b=new q;return function(){var c=this.light.distance?this.light.distance:1E3,d=c*Math.tan(this.light.angle);this.cone.scale.set(d,d,c);a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(b.sub(a));
13779 this.cone.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)}}();jc.prototype=Object.create(fa.prototype);jc.prototype.constructor=jc;jc.prototype.getBoneList=function(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;c<a.children.length;c++)b.push.apply(b,this.getBoneList(a.children[c]));return b};jc.prototype.update=function(){var a=new q,b=new H,c=new H;return function(){var d=this.geometry,e=d.getAttribute("position");c.getInverse(this.root.matrixWorld);for(var f=0,g=0;f<
13780 this.bones.length;f++){var h=this.bones[f];h.parent&&h.parent.isBone&&(b.multiplyMatrices(c,h.matrixWorld),a.setFromMatrixPosition(b),e.setXYZ(g,a.x,a.y,a.z),b.multiplyMatrices(c,h.parent.matrixWorld),a.setFromMatrixPosition(b),e.setXYZ(g+1,a.x,a.y,a.z),g+=2)}d.getAttribute("position").needsUpdate=!0}}();kc.prototype=Object.create(Ba.prototype);kc.prototype.constructor=kc;kc.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};kc.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};
13781 lc.prototype=Object.create(G.prototype);lc.prototype.constructor=lc;lc.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose();this.children[1].geometry.dispose();this.children[1].material.dispose()};lc.prototype.update=function(){var a=new q,b=new q;return function(){var c=this.children[0],d=this.children[1];if(this.light.target){a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);var e=b.clone().sub(a);
13782 c.lookAt(e);d.lookAt(e)}c.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);d.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);var d=.5*this.light.width,e=.5*this.light.height,c=c.geometry.getAttribute("position"),f=c.array;f[0]=d;f[1]=-e;f[2]=0;f[3]=d;f[4]=e;f[5]=0;f[6]=-d;f[7]=e;f[8]=0;f[9]=-d;f[10]=e;f[11]=0;f[12]=-d;f[13]=-e;f[14]=0;f[15]=d;f[16]=-e;f[17]=0;c.needsUpdate=!0}}();mc.prototype=Object.create(G.prototype);mc.prototype.constructor=
13783 mc;mc.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose()};mc.prototype.update=function(){var a=new q,b=new N,c=new N;return function(){var d=this.children[0],e=d.geometry.getAttribute("color");b.copy(this.light.color).multiplyScalar(this.light.intensity);c.copy(this.light.groundColor).multiplyScalar(this.light.intensity);for(var f=0,g=e.count;f<g;f++){var h=f<g/2?b:c;e.setXYZ(f,h.r,h.g,h.b)}d.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());
13784 e.needsUpdate=!0}}();bd.prototype=Object.create(fa.prototype);bd.prototype.constructor=bd;Ed.prototype=Object.create(fa.prototype);Ed.prototype.constructor=Ed;cd.prototype=Object.create(fa.prototype);cd.prototype.constructor=cd;cd.prototype.update=function(){var a=new q,b=new q,c=new za;return function(){this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);for(var d=this.object.matrixWorld,e=this.geometry.attributes.position,f=this.object.geometry,g=f.vertices,f=f.faces,h=
13785 0,k=0,l=f.length;k<l;k++){var q=f[k],p=q.normal;a.copy(g[q.a]).add(g[q.b]).add(g[q.c]).divideScalar(3).applyMatrix4(d);b.copy(p).applyMatrix3(c).normalize().multiplyScalar(this.size).add(a);e.setXYZ(h,a.x,a.y,a.z);h+=1;e.setXYZ(h,b.x,b.y,b.z);h+=1}e.needsUpdate=!0;return this}}();nc.prototype=Object.create(G.prototype);nc.prototype.constructor=nc;nc.prototype.dispose=function(){var a=this.children[0],b=this.children[1];a.geometry.dispose();a.material.dispose();b.geometry.dispose();b.material.dispose()};
13786 nc.prototype.update=function(){var a=new q,b=new q,c=new q;return function(){a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);c.subVectors(b,a);var d=this.children[0],e=this.children[1];d.lookAt(c);d.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);e.lookAt(c);e.scale.z=c.length()}}();dd.prototype=Object.create(fa.prototype);dd.prototype.constructor=dd;dd.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);
13787 a=c[a];if(void 0!==a)for(g=b.getAttribute("position"),h=0,k=a.length;h<k;h++)g.setXYZ(a[h],d.x,d.y,d.z)}var b,c,d=new q,e=new sa;return function(){b=this.geometry;c=this.pointMap;e.projectionMatrix.copy(this.camera.projectionMatrix);a("c",0,0,-1);a("t",0,0,1);a("n1",-1,-1,-1);a("n2",1,-1,-1);a("n3",-1,1,-1);a("n4",1,1,-1);a("f1",-1,-1,1);a("f2",1,-1,1);a("f3",-1,1,1);a("f4",1,1,1);a("u1",.7,1.1,-1);a("u2",-.7,1.1,-1);a("u3",0,2,-1);a("cf1",-1,0,1);a("cf2",1,0,1);a("cf3",0,-1,1);a("cf4",0,1,1);a("cn1",
13788 -1,0,-1);a("cn2",1,0,-1);a("cn3",0,-1,-1);a("cn4",0,1,-1);b.getAttribute("position").needsUpdate=!0}}();oc.prototype=Object.create(fa.prototype);oc.prototype.constructor=oc;oc.prototype.update=function(){var a=new ya;return function(b){b&&b.isBox3?a.copy(b):a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=
13789 b.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();var Je=new D;Je.addAttribute("position",new X([0,0,0,0,1,0],3));var Ke=new Wa(0,.5,1,5,1);Ke.translate(0,-.5,0);Cb.prototype=Object.create(G.prototype);Cb.prototype.constructor=Cb;Cb.prototype.setDirection=function(){var a=new q,b;return function(c){.99999<c.y?this.quaternion.set(0,0,0,1):-.99999>c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),
13790 b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();Cb.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()};Cb.prototype.setColor=function(a){this.line.material.color.copy(a);this.cone.material.color.copy(a)};Fd.prototype=Object.create(fa.prototype);Fd.prototype.constructor=Fd;var ke=function(){function a(){}var b=new q,c=new a,
13791 d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,l,p){this.init(b,c,((b-a)/e-(c-a)/(e+l)+(c-b)/l)*l,((c-b)/l-(d-b)/(l+p)+(d-c)/p)*l)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3*b*a};return wa.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=
13792 this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0<h?0:(Math.floor(Math.abs(h)/g.length)+1)*g.length:0===a&&h===k-1&&(h=k-2,a=1);var l,x,p;this.closed||0<h?l=g[(h-1)%k]:(b.subVectors(g[0],g[1]).add(g[0]),l=b);x=g[h%k];p=g[(h+1)%k];this.closed||h+2<k?g=g[(h+2)%k]:(b.subVectors(g[k-1],g[k-2]).add(g[k-1]),g=b);if(void 0===this.type||"centripetal"===this.type||"chordal"===this.type){var n="chordal"===this.type?.5:
13793 .25;k=Math.pow(l.distanceToSquared(x),n);h=Math.pow(x.distanceToSquared(p),n);n=Math.pow(p.distanceToSquared(g),n);1E-4>h&&(h=1);1E-4>k&&(k=h);1E-4>n&&(n=h);c.initNonuniformCatmullRom(l.x,x.x,p.x,g.x,k,h,n);d.initNonuniformCatmullRom(l.y,x.y,p.y,g.y,k,h,n);e.initNonuniformCatmullRom(l.z,x.z,p.z,g.z,k,h,n)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,x.x,p.x,g.x,k),d.initCatmullRom(l.y,x.y,p.y,g.y,k),e.initCatmullRom(l.z,x.z,p.z,g.z,k));return new q(c.calc(a),
13794 d.calc(a),e.calc(a))})}(),Nf=wa.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=void 0===a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=ed.interpolate;return new q(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))}),Of=wa.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=
13795 pa.b3;return new q(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))}),Pf=wa.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=pa.b2;return new q(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))}),Qf=wa.create(function(a,b){this.v1=a;this.v2=b},function(a){if(1===a)return this.v2.clone();var b=new q;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);
13796 b.add(this.v1);return b});Gd.prototype=Object.create(Xa.prototype);Gd.prototype.constructor=Gd;Le.prototype=Object.create(ke.prototype);bd.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")};Object.assign(pc.prototype,{center:function(a){console.warn("THREE.Box2: .center() has been renamed to .getCenter().");return this.getCenter(a)},empty:function(){console.warn("THREE.Box2: .empty() has been renamed to .isEmpty().");
13797 return this.isEmpty()},isIntersectionBox:function(a){console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)},size:function(a){console.warn("THREE.Box2: .size() has been renamed to .getSize().");return this.getSize(a)}});Object.assign(ya.prototype,{center:function(a){console.warn("THREE.Box3: .center() has been renamed to .getCenter().");return this.getCenter(a)},empty:function(){console.warn("THREE.Box3: .empty() has been renamed to .isEmpty().");
13798 return this.isEmpty()},isIntersectionBox:function(a){console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)},isIntersectionSphere:function(a){console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(a)},size:function(a){console.warn("THREE.Box3: .size() has been renamed to .getSize().");return this.getSize(a)}});gb.prototype.center=function(a){console.warn("THREE.Line3: .center() has been renamed to .getCenter().");
13799 return this.getCenter(a)};Q.random16=function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()};Object.assign(za.prototype,{flattenToArrayOffset:function(a,b){console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(a,b)},multiplyVector3:function(a){console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return a.applyMatrix3(this)},
13800 multiplyVector3Array:function(a){console.warn("THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");return this.applyToVector3Array(a)},applyToBuffer:function(a,b,c){console.warn("THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.");return this.applyToBufferAttribute(a)}});Object.assign(H.prototype,{extractPosition:function(a){console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().");
13801 return this.copyPosition(a)},flattenToArrayOffset:function(a,b){console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(a,b)},getPosition:function(){var a;return function(){void 0===a&&(a=new q);console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.");return a.setFromMatrixColumn(this,3)}}(),setRotationFromQuaternion:function(a){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().");
13802 return this.makeRotationFromQuaternion(a)},multiplyVector3:function(a){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.");return a.applyProjection(this)},multiplyVector4:function(a){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");
13803 return this.applyToVector3Array(a)},rotateAxis:function(a){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");a.transformDirection(this)},crossVector:function(a){console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},
13804 rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBuffer:function(a,b,c){console.warn("THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.");return this.applyToBufferAttribute(a)}});ma.prototype.isIntersectionLine=function(a){console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().");
13805 return this.intersectsLine(a)};da.prototype.multiplyVector3=function(a){console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.");return a.applyQuaternion(this)};Object.assign(bb.prototype,{isIntersectionBox:function(a){console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)},isIntersectionPlane:function(a){console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().");
13806 return this.intersectsPlane(a)},isIntersectionSphere:function(a){console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(a)}});Object.assign(Ab.prototype,{extrude:function(a){console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.");return new La(this,a)},makeGeometry:function(a){console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.");return new Xb(this,a)}});Object.assign(q.prototype,
13807 {setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(a){console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().");return this.setFromMatrixPosition(a)},getScaleFromMatrix:function(a){console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().");
13808 return this.setFromMatrixScale(a)},getColumnFromMatrix:function(a,b){console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().");return this.setFromMatrixColumn(b,a)}});S.prototype.computeTangents=function(){console.warn("THREE.Geometry: .computeTangents() has been removed.")};Object.assign(G.prototype,{getChildByName:function(a){console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().");return this.getObjectByName(a)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},
13809 translate:function(a,b){console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.");return this.translateOnAxis(b,a)}});Object.defineProperties(G.prototype,{eulerOrder:{get:function(){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");return this.rotation.order},set:function(a){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");this.rotation.order=a}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},
13810 set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}});Object.defineProperties(Ac.prototype,{objects:{get:function(){console.warn("THREE.LOD: .objects has been renamed to .levels.");return this.levels}}});Ha.prototype.setLens=function(a,b){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.");void 0!==b&&(this.filmGauge=b);this.setFocalLength(a)};Object.defineProperties(na.prototype,
13811 {onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(a){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov.");this.shadow.camera.fov=a}},shadowCameraLeft:{set:function(a){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left.");this.shadow.camera.left=a}},shadowCameraRight:{set:function(a){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right.");this.shadow.camera.right=a}},shadowCameraTop:{set:function(a){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top.");
13812 this.shadow.camera.top=a}},shadowCameraBottom:{set:function(a){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.");this.shadow.camera.bottom=a}},shadowCameraNear:{set:function(a){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near.");this.shadow.camera.near=a}},shadowCameraFar:{set:function(a){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far.");this.shadow.camera.far=a}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},
13813 shadowBias:{set:function(a){console.warn("THREE.Light: .shadowBias is now .shadow.bias.");this.shadow.bias=a}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(a){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.");this.shadow.mapSize.width=a}},shadowMapHeight:{set:function(a){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.");this.shadow.mapSize.height=a}}});Object.defineProperties(y.prototype,
13814 {length:{get:function(){console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead.");return this.array.length}}});Object.assign(D.prototype,{addIndex:function(a){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().");this.setIndex(a)},addDrawCall:function(a,b,c){void 0!==c&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.");console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup().");this.addGroup(a,
13815 b)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().");this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")}});Object.defineProperties(D.prototype,{drawcalls:{get:function(){console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups.");return this.groups}},offsets:{get:function(){console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups.");
13816 return this.groups}}});Object.defineProperties(Dd.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.");return this}}});Object.defineProperties(W.prototype,{wrapAround:{get:function(){console.warn("THREE."+this.type+": .wrapAround has been removed.")},set:function(){console.warn("THREE."+this.type+
13817 ": .wrapAround has been removed.")}},wrapRGB:{get:function(){console.warn("THREE."+this.type+": .wrapRGB has been removed.");return new N}}});Object.defineProperties(Ca.prototype,{metal:{get:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.");return!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}});Object.defineProperties(Ia.prototype,{derivatives:{get:function(){console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");
13818 return this.extensions.derivatives},set:function(a){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");this.extensions.derivatives=a}}});oa.prototype=Object.assign(Object.create({constructor:oa,apply:function(a){console.warn("THREE.EventDispatcher: .apply is deprecated, just inherit or Object.assign the prototype to mix-in.");Object.assign(a,this)}}),oa.prototype);Object.assign(Nd.prototype,{supportsFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).");
13819 return this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).");return this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).");return this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).");
13820 return this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).");return this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).");return this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.");
13821 return this.capabilities.vertexTextures},supportsInstancedArrays:function(){console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).");return this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(a){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().");this.setScissorTest(a)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},
13822 addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")}});Object.defineProperties(Nd.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.");this.shadowMap.enabled=a}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.");
13823 this.shadowMap.type=a}},shadowMapCullFace:{get:function(){return this.shadowMap.cullFace},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.");this.shadowMap.cullFace=a}}});Object.defineProperties(ye.prototype,{cullFace:{get:function(){return this.renderReverseSided?2:1},set:function(a){a=1!==a;console.warn("WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to "+a+".");this.renderReverseSided=a}}});Object.defineProperties(Db.prototype,
13824 {wrapS:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");return this.texture.wrapS},set:function(a){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");this.texture.wrapS=a}},wrapT:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");return this.texture.wrapT},set:function(a){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");this.texture.wrapT=a}},magFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");
13825 return this.texture.magFilter},set:function(a){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");this.texture.magFilter=a}},minFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");return this.texture.minFilter},set:function(a){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");this.texture.minFilter=a}},anisotropy:{get:function(){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");
13826 return this.texture.anisotropy},set:function(a){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");this.texture.anisotropy=a}},offset:{get:function(){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");return this.texture.offset},set:function(a){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");this.texture.offset=a}},repeat:{get:function(){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");return this.texture.repeat},
13827 set:function(a){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");this.texture.repeat=a}},format:{get:function(){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");return this.texture.format},set:function(a){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");this.texture.format=a}},type:{get:function(){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");return this.texture.type},set:function(a){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");
13828 this.texture.type=a}},generateMipmaps:{get:function(){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");return this.texture.generateMipmaps},set:function(a){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");this.texture.generateMipmaps=a}}});ec.prototype.load=function(a){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");var b=this;(new Wd).load(a,function(a){b.setBuffer(a)});return this};
13829 ae.prototype.getData=function(){console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData().");return this.getFrequencyData()};l.WebGLRenderTargetCube=Eb;l.WebGLRenderTarget=Db;l.WebGLRenderer=Nd;l.ShaderLib=Gb;l.UniformsLib=U;l.UniformsUtils=Ja;l.ShaderChunk=Z;l.FogExp2=Ib;l.Fog=Jb;l.Scene=jb;l.LensFlare=Od;l.Sprite=zc;l.LOD=Ac;l.SkinnedMesh=jd;l.Skeleton=hd;l.Bone=id;l.Mesh=Ba;l.LineSegments=fa;l.Line=Va;l.Points=Kb;l.Group=Bc;l.VideoTexture=kd;l.DataTexture=db;l.CompressedTexture=
13830 Lb;l.CubeTexture=Za;l.CanvasTexture=ld;l.DepthTexture=Cc;l.Texture=ea;l.CompressedTextureLoader=Ee;l.BinaryTextureLoader=Qd;l.DataTextureLoader=Qd;l.CubeTextureLoader=Rd;l.TextureLoader=md;l.ObjectLoader=Fe;l.MaterialLoader=Ad;l.BufferGeometryLoader=Sd;l.DefaultLoadingManager=va;l.LoadingManager=Pd;l.JSONLoader=Td;l.ImageLoader=Vc;l.FontLoader=Ge;l.FileLoader=Ma;l.Loader=wb;l.Cache=ne;l.AudioLoader=Wd;l.SpotLightShadow=od;l.SpotLight=pd;l.PointLight=qd;l.RectAreaLight=Xd;l.HemisphereLight=nd;l.DirectionalLightShadow=
13831 rd;l.DirectionalLight=sd;l.AmbientLight=td;l.LightShadow=tb;l.Light=na;l.StereoCamera=He;l.PerspectiveCamera=Ha;l.OrthographicCamera=Hb;l.CubeCamera=Bd;l.Camera=sa;l.AudioListener=Yd;l.PositionalAudio=$d;l.AudioContext=Zd;l.AudioAnalyser=ae;l.Audio=ec;l.VectorKeyframeTrack=cc;l.StringKeyframeTrack=xd;l.QuaternionKeyframeTrack=Xc;l.NumberKeyframeTrack=dc;l.ColorKeyframeTrack=zd;l.BooleanKeyframeTrack=yd;l.PropertyMixer=Cd;l.PropertyBinding=ka;l.KeyframeTrack=vb;l.AnimationUtils=ba;l.AnimationObjectGroup=
13832 be;l.AnimationMixer=de;l.AnimationClip=ta;l.Uniform=Dd;l.InstancedBufferGeometry=Bb;l.BufferGeometry=D;l.GeometryIdCount=function(){return Kd++};l.Geometry=S;l.InterleavedBufferAttribute=ee;l.InstancedInterleavedBuffer=gc;l.InterleavedBuffer=fc;l.InstancedBufferAttribute=hc;l.Face3=ha;l.Object3D=G;l.Raycaster=fe;l.Layers=gd;l.EventDispatcher=oa;l.Clock=he;l.QuaternionLinearInterpolant=wd;l.LinearInterpolant=Wc;l.DiscreteInterpolant=vd;l.CubicInterpolant=ud;l.Interpolant=qa;l.Triangle=Aa;l.Spline=
13833 function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,x,p,n;this.initFromArray=function(a){this.points=[];for(var b=0;b<a.length;b++)this.points[b]={x:a[b][0],y:a[b][1],z:a[b][2]}};this.getPoint=function(a){e=(this.points.length-1)*a;f=Math.floor(e);g=e-f;c[0]=0===f?f:f-1;c[1]=f;c[2]=f>this.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+2;l=this.points[c[0]];
13834 x=this.points[c[1]];p=this.points[c[2]];n=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,x.x,p.x,n.x,g,h,k);d.y=b(l.y,x.y,p.y,n.y,g,h,k);d.z=b(l.z,x.z,p.z,n.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a<c;a++)b=this.points[a],d[a]=[b.x,b.y,b.z];return d};this.getLength=function(a){var b,c,d,e=0,f=new q,g=new q,h=[],k=0;h[0]=0;a||(a=100);c=this.points.length*a;f.copy(this.points[0]);for(a=1;a<c;a++)b=a/c,d=this.getPoint(b),g.copy(d),k+=g.distanceTo(f),
13835 f.copy(d),b*=this.points.length-1,b=Math.floor(b),b!==e&&(h[b]=k,e=b);h[h.length]=k;return{chunks:h,total:k}};this.reparametrizeByArcLength=function(a){var b,c,d,e,f,g,h=[],k=new q,l=this.getLength();h.push(k.copy(this.points[0]).clone());for(b=1;b<this.points.length;b++){c=l.chunks[b]-l.chunks[b-1];g=Math.ceil(a*c/l.total);e=(b-1)/(this.points.length-1);f=b/(this.points.length-1);for(c=1;c<g-1;c++)d=e+1/g*c*(f-e),d=this.getPoint(d),h.push(k.copy(d).clone());h.push(k.copy(this.points[b]).clone())}this.points=
13836 h}};l.Math=Q;l.Spherical=ie;l.Cylindrical=je;l.Plane=ma;l.Frustum=qc;l.Sphere=Fa;l.Ray=bb;l.Matrix4=H;l.Matrix3=za;l.Box3=ya;l.Box2=pc;l.Line3=gb;l.Euler=cb;l.Vector4=ga;l.Vector3=q;l.Vector2=C;l.Quaternion=da;l.Color=N;l.MorphBlendMesh=ua;l.ImmediateRenderObject=$c;l.VertexNormalsHelper=ad;l.SpotLightHelper=ic;l.SkeletonHelper=jc;l.PointLightHelper=kc;l.RectAreaLightHelper=lc;l.HemisphereLightHelper=mc;l.GridHelper=bd;l.PolarGridHelper=Ed;l.FaceNormalsHelper=cd;l.DirectionalLightHelper=nc;l.CameraHelper=
13837 dd;l.BoxHelper=oc;l.ArrowHelper=Cb;l.AxisHelper=Fd;l.CatmullRomCurve3=ke;l.SplineCurve3=Nf;l.CubicBezierCurve3=Of;l.QuadraticBezierCurve3=Pf;l.LineCurve3=Qf;l.ArcCurve=Gd;l.EllipseCurve=Xa;l.SplineCurve=xb;l.CubicBezierCurve=yb;l.QuadraticBezierCurve=zb;l.LineCurve=Qa;l.Shape=Ab;l.ShapePath=Ud;l.Path=Zc;l.Font=Vd;l.CurvePath=Yc;l.Curve=wa;l.ShapeUtils=pa;l.SceneUtils={createMultiMaterialObject:function(a,b){for(var c=new Bc,d=0,e=b.length;d<e;d++)c.add(new Ba(a,b[d]));return c},detach:function(a,
13838 b,c){a.applyMatrix(b.matrixWorld);b.remove(a);c.add(a)},attach:function(a,b,c){var d=new H;d.getInverse(c.matrixWorld);a.applyMatrix(d);b.remove(a);c.add(a)}};l.CurveUtils=ed;l.WireframeGeometry=Mb;l.ParametricGeometry=Dc;l.ParametricBufferGeometry=Nb;l.TetrahedronGeometry=Ec;l.TetrahedronBufferGeometry=Ob;l.OctahedronGeometry=Fc;l.OctahedronBufferGeometry=lb;l.IcosahedronGeometry=Gc;l.IcosahedronBufferGeometry=Pb;l.DodecahedronGeometry=Hc;l.DodecahedronBufferGeometry=Qb;l.PolyhedronGeometry=Ic;l.PolyhedronBufferGeometry=
13839 xa;l.TubeGeometry=Jc;l.TubeBufferGeometry=Rb;l.TorusKnotGeometry=Kc;l.TorusKnotBufferGeometry=Sb;l.TorusGeometry=Lc;l.TorusBufferGeometry=Tb;l.TextGeometry=Mc;l.SphereBufferGeometry=mb;l.SphereGeometry=Nc;l.RingGeometry=Oc;l.RingBufferGeometry=Ub;l.PlaneBufferGeometry=ib;l.PlaneGeometry=Pc;l.LatheGeometry=Qc;l.LatheBufferGeometry=Vb;l.ShapeGeometry=Xb;l.ShapeBufferGeometry=Wb;l.ExtrudeGeometry=La;l.EdgesGeometry=Yb;l.ConeGeometry=Rc;l.ConeBufferGeometry=Sc;l.CylinderGeometry=nb;l.CylinderBufferGeometry=
13840 Wa;l.CircleBufferGeometry=Zb;l.CircleGeometry=Tc;l.BoxBufferGeometry=hb;l.BoxGeometry=$b;l.ShadowMaterial=ac;l.SpriteMaterial=kb;l.RawShaderMaterial=bc;l.ShaderMaterial=Ia;l.PointsMaterial=Oa;l.MultiMaterial=Uc;l.MeshPhysicalMaterial=ob;l.MeshStandardMaterial=Pa;l.MeshPhongMaterial=Ca;l.MeshToonMaterial=pb;l.MeshNormalMaterial=qb;l.MeshLambertMaterial=rb;l.MeshDepthMaterial=ab;l.MeshBasicMaterial=Ka;l.LineDashedMaterial=sb;l.LineBasicMaterial=ia;l.Material=W;l.Float64BufferAttribute=wc;l.Float32BufferAttribute=
13841 X;l.Uint32BufferAttribute=Ua;l.Int32BufferAttribute=vc;l.Uint16BufferAttribute=Ra;l.Int16BufferAttribute=uc;l.Uint8ClampedBufferAttribute=tc;l.Uint8BufferAttribute=sc;l.Int8BufferAttribute=rc;l.BufferAttribute=y;l.REVISION="83";l.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2};l.CullFaceNone=0;l.CullFaceBack=1;l.CullFaceFront=2;l.CullFaceFrontBack=3;l.FrontFaceDirectionCW=0;l.FrontFaceDirectionCCW=1;l.BasicShadowMap=0;l.PCFShadowMap=1;l.PCFSoftShadowMap=2;l.FrontSide=0;l.BackSide=1;l.DoubleSide=2;l.FlatShading=1;
13842 l.SmoothShading=2;l.NoColors=0;l.FaceColors=1;l.VertexColors=2;l.NoBlending=0;l.NormalBlending=1;l.AdditiveBlending=2;l.SubtractiveBlending=3;l.MultiplyBlending=4;l.CustomBlending=5;l.BlendingMode=Me;l.AddEquation=100;l.SubtractEquation=101;l.ReverseSubtractEquation=102;l.MinEquation=103;l.MaxEquation=104;l.ZeroFactor=200;l.OneFactor=201;l.SrcColorFactor=202;l.OneMinusSrcColorFactor=203;l.SrcAlphaFactor=204;l.OneMinusSrcAlphaFactor=205;l.DstAlphaFactor=206;l.OneMinusDstAlphaFactor=207;l.DstColorFactor=
13843 208;l.OneMinusDstColorFactor=209;l.SrcAlphaSaturateFactor=210;l.NeverDepth=0;l.AlwaysDepth=1;l.LessDepth=2;l.LessEqualDepth=3;l.EqualDepth=4;l.GreaterEqualDepth=5;l.GreaterDepth=6;l.NotEqualDepth=7;l.MultiplyOperation=0;l.MixOperation=1;l.AddOperation=2;l.NoToneMapping=0;l.LinearToneMapping=1;l.ReinhardToneMapping=2;l.Uncharted2ToneMapping=3;l.CineonToneMapping=4;l.UVMapping=300;l.CubeReflectionMapping=301;l.CubeRefractionMapping=302;l.EquirectangularReflectionMapping=303;l.EquirectangularRefractionMapping=
13844 304;l.SphericalReflectionMapping=305;l.CubeUVReflectionMapping=306;l.CubeUVRefractionMapping=307;l.TextureMapping=Ne;l.RepeatWrapping=1E3;l.ClampToEdgeWrapping=1001;l.MirroredRepeatWrapping=1002;l.TextureWrapping=le;l.NearestFilter=1003;l.NearestMipMapNearestFilter=1004;l.NearestMipMapLinearFilter=1005;l.LinearFilter=1006;l.LinearMipMapNearestFilter=1007;l.LinearMipMapLinearFilter=1008;l.TextureFilter=me;l.UnsignedByteType=1009;l.ByteType=1010;l.ShortType=1011;l.UnsignedShortType=1012;l.IntType=1013;
13845 l.UnsignedIntType=1014;l.FloatType=1015;l.HalfFloatType=1016;l.UnsignedShort4444Type=1017;l.UnsignedShort5551Type=1018;l.UnsignedShort565Type=1019;l.UnsignedInt248Type=1020;l.AlphaFormat=1021;l.RGBFormat=1022;l.RGBAFormat=1023;l.LuminanceFormat=1024;l.LuminanceAlphaFormat=1025;l.RGBEFormat=1023;l.DepthFormat=1026;l.DepthStencilFormat=1027;l.RGB_S3TC_DXT1_Format=2001;l.RGBA_S3TC_DXT1_Format=2002;l.RGBA_S3TC_DXT3_Format=2003;l.RGBA_S3TC_DXT5_Format=2004;l.RGB_PVRTC_4BPPV1_Format=2100;l.RGB_PVRTC_2BPPV1_Format=
13846 2101;l.RGBA_PVRTC_4BPPV1_Format=2102;l.RGBA_PVRTC_2BPPV1_Format=2103;l.RGB_ETC1_Format=2151;l.LoopOnce=2200;l.LoopRepeat=2201;l.LoopPingPong=2202;l.InterpolateDiscrete=2300;l.InterpolateLinear=2301;l.InterpolateSmooth=2302;l.ZeroCurvatureEnding=2400;l.ZeroSlopeEnding=2401;l.WrapAroundEnding=2402;l.TrianglesDrawMode=0;l.TriangleStripDrawMode=1;l.TriangleFanDrawMode=2;l.LinearEncoding=3E3;l.sRGBEncoding=3001;l.GammaEncoding=3007;l.RGBEEncoding=3002;l.LogLuvEncoding=3003;l.RGBM7Encoding=3004;l.RGBM16Encoding=
13847 3005;l.RGBDEncoding=3006;l.BasicDepthPacking=3200;l.RGBADepthPacking=3201;l.CubeGeometry=$b;l.Face4=function(a,b,c,d,e,f,g){console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead.");return new ha(a,b,c,e,f,g)};l.LineStrip=0;l.LinePieces=1;l.MeshFaceMaterial=function(a){console.warn("THREE.MeshFaceMaterial has been renamed to THREE.MultiMaterial.");return new Uc(a)};l.PointCloud=function(a,b){console.warn("THREE.PointCloud has been renamed to THREE.Points.");return new Kb(a,
13848 b)};l.Particle=function(a){console.warn("THREE.Particle has been renamed to THREE.Sprite.");return new zc(a)};l.ParticleSystem=function(a,b){console.warn("THREE.ParticleSystem has been renamed to THREE.Points.");return new Kb(a,b)};l.PointCloudMaterial=function(a){console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.");return new Oa(a)};l.ParticleBasicMaterial=function(a){console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.");return new Oa(a)};
13849 l.ParticleSystemMaterial=function(a){console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.");return new Oa(a)};l.Vertex=function(a,b,c){console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead.");return new q(a,b,c)};l.DynamicBufferAttribute=function(a,b){console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.");return(new y(a,b)).setDynamic(!0)};l.Int8Attribute=function(a,b){console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.");
13850 return new rc(a,b)};l.Uint8Attribute=function(a,b){console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.");return new sc(a,b)};l.Uint8ClampedAttribute=function(a,b){console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.");return new tc(a,b)};l.Int16Attribute=function(a,b){console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.");return new uc(a,b)};l.Uint16Attribute=
13851 function(a,b){console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.");return new Ra(a,b)};l.Int32Attribute=function(a,b){console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.");return new vc(a,b)};l.Uint32Attribute=function(a,b){console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.");return new Ua(a,b)};l.Float32Attribute=function(a,b){console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.");
13852 return new X(a,b)};l.Float64Attribute=function(a,b){console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.");return new wc(a,b)};l.ClosedSplineCurve3=Le;l.BoundingBoxHelper=function(a,b){console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.");return new oc(a,b)};l.EdgesHelper=function(a,b){console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.");return new fa(new Yb(a.geometry),new ia({color:void 0!==
13853 b?b:16777215}))};l.WireframeHelper=function(a,b){console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.");return new fa(new Mb(a.geometry),new ia({color:void 0!==b?b:16777215}))};l.XHRLoader=function(a){console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader.");return new Ma(a)};l.GeometryUtils={merge:function(a,b,c){console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.");
13854 var d;b.isMesh&&(b.matrixAutoUpdate&&b.updateMatrix(),d=b.matrix,b=b.geometry);a.merge(b,d,c)},center:function(a){console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.");return a.center()}};l.ImageUtils={crossOrigin:void 0,loadTexture:function(a,b,c,d){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");var e=new md;e.setCrossOrigin(this.crossOrigin);a=e.load(a,c,void 0,d);b&&(a.mapping=b);return a},
13855 loadTextureCube:function(a,b,c,d){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");var e=new Rd;e.setCrossOrigin(this.crossOrigin);a=e.load(a,c,void 0,d);b&&(a.mapping=b);return a},loadCompressedTexture:function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},loadCompressedTextureCube:function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")}};
13856 l.Projector=function(){console.error("THREE.Projector has been moved to /examples/js/renderers/Projector.js.");this.projectVector=function(a,b){console.warn("THREE.Projector: .projectVector() is now vector.project().");a.project(b)};this.unprojectVector=function(a,b){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject().");a.unproject(b)};this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")}};l.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js");
13857 this.domElement=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");this.clear=function(){};this.render=function(){};this.setClearColor=function(){};this.setSize=function(){}};Object.defineProperty(l,"__esModule",{value:!0})});
13859 },{}],175:[function(require,module,exports){
13860 // Underscore.js 1.8.3
13861 // http://underscorejs.org
13862 // (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
13863 // Underscore may be freely distributed under the MIT license.
13870 // Establish the root object, `window` in the browser, or `exports` on the server.
13873 // Save the previous value of the `_` variable.
13874 var previousUnderscore = root._;
13876 // Save bytes in the minified (but not gzipped) version:
13877 var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
13879 // Create quick reference variables for speed access to core prototypes.
13881 push = ArrayProto.push,
13882 slice = ArrayProto.slice,
13883 toString = ObjProto.toString,
13884 hasOwnProperty = ObjProto.hasOwnProperty;
13886 // All **ECMAScript 5** native function implementations that we hope to use
13887 // are declared here.
13889 nativeIsArray = Array.isArray,
13890 nativeKeys = Object.keys,
13891 nativeBind = FuncProto.bind,
13892 nativeCreate = Object.create;
13894 // Naked function reference for surrogate-prototype-swapping.
13895 var Ctor = function(){};
13897 // Create a safe reference to the Underscore object for use below.
13898 var _ = function(obj) {
13899 if (obj instanceof _) return obj;
13900 if (!(this instanceof _)) return new _(obj);
13901 this._wrapped = obj;
13904 // Export the Underscore object for **Node.js**, with
13905 // backwards-compatibility for the old `require()` API. If we're in
13906 // the browser, add `_` as a global object.
13907 if (typeof exports !== 'undefined') {
13908 if (typeof module !== 'undefined' && module.exports) {
13909 exports = module.exports = _;
13916 // Current version.
13917 _.VERSION = '1.8.3';
13919 // Internal function that returns an efficient (for current engines) version
13920 // of the passed-in callback, to be repeatedly applied in other Underscore
13922 var optimizeCb = function(func, context, argCount) {
13923 if (context === void 0) return func;
13924 switch (argCount == null ? 3 : argCount) {
13925 case 1: return function(value) {
13926 return func.call(context, value);
13928 case 2: return function(value, other) {
13929 return func.call(context, value, other);
13931 case 3: return function(value, index, collection) {
13932 return func.call(context, value, index, collection);
13934 case 4: return function(accumulator, value, index, collection) {
13935 return func.call(context, accumulator, value, index, collection);
13938 return function() {
13939 return func.apply(context, arguments);
13943 // A mostly-internal function to generate callbacks that can be applied
13944 // to each element in a collection, returning the desired result — either
13945 // identity, an arbitrary callback, a property matcher, or a property accessor.
13946 var cb = function(value, context, argCount) {
13947 if (value == null) return _.identity;
13948 if (_.isFunction(value)) return optimizeCb(value, context, argCount);
13949 if (_.isObject(value)) return _.matcher(value);
13950 return _.property(value);
13952 _.iteratee = function(value, context) {
13953 return cb(value, context, Infinity);
13956 // An internal function for creating assigner functions.
13957 var createAssigner = function(keysFunc, undefinedOnly) {
13958 return function(obj) {
13959 var length = arguments.length;
13960 if (length < 2 || obj == null) return obj;
13961 for (var index = 1; index < length; index++) {
13962 var source = arguments[index],
13963 keys = keysFunc(source),
13965 for (var i = 0; i < l; i++) {
13967 if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];
13974 // An internal function for creating a new object that inherits from another.
13975 var baseCreate = function(prototype) {
13976 if (!_.isObject(prototype)) return {};
13977 if (nativeCreate) return nativeCreate(prototype);
13978 Ctor.prototype = prototype;
13979 var result = new Ctor;
13980 Ctor.prototype = null;
13984 var property = function(key) {
13985 return function(obj) {
13986 return obj == null ? void 0 : obj[key];
13990 // Helper for collection methods to determine whether a collection
13991 // should be iterated as an array or as an object
13992 // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
13993 // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
13994 var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
13995 var getLength = property('length');
13996 var isArrayLike = function(collection) {
13997 var length = getLength(collection);
13998 return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
14001 // Collection Functions
14002 // --------------------
14004 // The cornerstone, an `each` implementation, aka `forEach`.
14005 // Handles raw objects in addition to array-likes. Treats all
14006 // sparse array-likes as if they were dense.
14007 _.each = _.forEach = function(obj, iteratee, context) {
14008 iteratee = optimizeCb(iteratee, context);
14010 if (isArrayLike(obj)) {
14011 for (i = 0, length = obj.length; i < length; i++) {
14012 iteratee(obj[i], i, obj);
14015 var keys = _.keys(obj);
14016 for (i = 0, length = keys.length; i < length; i++) {
14017 iteratee(obj[keys[i]], keys[i], obj);
14023 // Return the results of applying the iteratee to each element.
14024 _.map = _.collect = function(obj, iteratee, context) {
14025 iteratee = cb(iteratee, context);
14026 var keys = !isArrayLike(obj) && _.keys(obj),
14027 length = (keys || obj).length,
14028 results = Array(length);
14029 for (var index = 0; index < length; index++) {
14030 var currentKey = keys ? keys[index] : index;
14031 results[index] = iteratee(obj[currentKey], currentKey, obj);
14036 // Create a reducing function iterating left or right.
14037 function createReduce(dir) {
14038 // Optimized iterator function as using arguments.length
14039 // in the main function will deoptimize the, see #1991.
14040 function iterator(obj, iteratee, memo, keys, index, length) {
14041 for (; index >= 0 && index < length; index += dir) {
14042 var currentKey = keys ? keys[index] : index;
14043 memo = iteratee(memo, obj[currentKey], currentKey, obj);
14048 return function(obj, iteratee, memo, context) {
14049 iteratee = optimizeCb(iteratee, context, 4);
14050 var keys = !isArrayLike(obj) && _.keys(obj),
14051 length = (keys || obj).length,
14052 index = dir > 0 ? 0 : length - 1;
14053 // Determine the initial value if none is provided.
14054 if (arguments.length < 3) {
14055 memo = obj[keys ? keys[index] : index];
14058 return iterator(obj, iteratee, memo, keys, index, length);
14062 // **Reduce** builds up a single result from a list of values, aka `inject`,
14064 _.reduce = _.foldl = _.inject = createReduce(1);
14066 // The right-associative version of reduce, also known as `foldr`.
14067 _.reduceRight = _.foldr = createReduce(-1);
14069 // Return the first value which passes a truth test. Aliased as `detect`.
14070 _.find = _.detect = function(obj, predicate, context) {
14072 if (isArrayLike(obj)) {
14073 key = _.findIndex(obj, predicate, context);
14075 key = _.findKey(obj, predicate, context);
14077 if (key !== void 0 && key !== -1) return obj[key];
14080 // Return all the elements that pass a truth test.
14081 // Aliased as `select`.
14082 _.filter = _.select = function(obj, predicate, context) {
14084 predicate = cb(predicate, context);
14085 _.each(obj, function(value, index, list) {
14086 if (predicate(value, index, list)) results.push(value);
14091 // Return all the elements for which a truth test fails.
14092 _.reject = function(obj, predicate, context) {
14093 return _.filter(obj, _.negate(cb(predicate)), context);
14096 // Determine whether all of the elements match a truth test.
14097 // Aliased as `all`.
14098 _.every = _.all = function(obj, predicate, context) {
14099 predicate = cb(predicate, context);
14100 var keys = !isArrayLike(obj) && _.keys(obj),
14101 length = (keys || obj).length;
14102 for (var index = 0; index < length; index++) {
14103 var currentKey = keys ? keys[index] : index;
14104 if (!predicate(obj[currentKey], currentKey, obj)) return false;
14109 // Determine if at least one element in the object matches a truth test.
14110 // Aliased as `any`.
14111 _.some = _.any = function(obj, predicate, context) {
14112 predicate = cb(predicate, context);
14113 var keys = !isArrayLike(obj) && _.keys(obj),
14114 length = (keys || obj).length;
14115 for (var index = 0; index < length; index++) {
14116 var currentKey = keys ? keys[index] : index;
14117 if (predicate(obj[currentKey], currentKey, obj)) return true;
14122 // Determine if the array or object contains a given item (using `===`).
14123 // Aliased as `includes` and `include`.
14124 _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
14125 if (!isArrayLike(obj)) obj = _.values(obj);
14126 if (typeof fromIndex != 'number' || guard) fromIndex = 0;
14127 return _.indexOf(obj, item, fromIndex) >= 0;
14130 // Invoke a method (with arguments) on every item in a collection.
14131 _.invoke = function(obj, method) {
14132 var args = slice.call(arguments, 2);
14133 var isFunc = _.isFunction(method);
14134 return _.map(obj, function(value) {
14135 var func = isFunc ? method : value[method];
14136 return func == null ? func : func.apply(value, args);
14140 // Convenience version of a common use case of `map`: fetching a property.
14141 _.pluck = function(obj, key) {
14142 return _.map(obj, _.property(key));
14145 // Convenience version of a common use case of `filter`: selecting only objects
14146 // containing specific `key:value` pairs.
14147 _.where = function(obj, attrs) {
14148 return _.filter(obj, _.matcher(attrs));
14151 // Convenience version of a common use case of `find`: getting the first object
14152 // containing specific `key:value` pairs.
14153 _.findWhere = function(obj, attrs) {
14154 return _.find(obj, _.matcher(attrs));
14157 // Return the maximum element (or element-based computation).
14158 _.max = function(obj, iteratee, context) {
14159 var result = -Infinity, lastComputed = -Infinity,
14161 if (iteratee == null && obj != null) {
14162 obj = isArrayLike(obj) ? obj : _.values(obj);
14163 for (var i = 0, length = obj.length; i < length; i++) {
14165 if (value > result) {
14170 iteratee = cb(iteratee, context);
14171 _.each(obj, function(value, index, list) {
14172 computed = iteratee(value, index, list);
14173 if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
14175 lastComputed = computed;
14182 // Return the minimum element (or element-based computation).
14183 _.min = function(obj, iteratee, context) {
14184 var result = Infinity, lastComputed = Infinity,
14186 if (iteratee == null && obj != null) {
14187 obj = isArrayLike(obj) ? obj : _.values(obj);
14188 for (var i = 0, length = obj.length; i < length; i++) {
14190 if (value < result) {
14195 iteratee = cb(iteratee, context);
14196 _.each(obj, function(value, index, list) {
14197 computed = iteratee(value, index, list);
14198 if (computed < lastComputed || computed === Infinity && result === Infinity) {
14200 lastComputed = computed;
14207 // Shuffle a collection, using the modern version of the
14208 // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
14209 _.shuffle = function(obj) {
14210 var set = isArrayLike(obj) ? obj : _.values(obj);
14211 var length = set.length;
14212 var shuffled = Array(length);
14213 for (var index = 0, rand; index < length; index++) {
14214 rand = _.random(0, index);
14215 if (rand !== index) shuffled[index] = shuffled[rand];
14216 shuffled[rand] = set[index];
14221 // Sample **n** random values from a collection.
14222 // If **n** is not specified, returns a single random element.
14223 // The internal `guard` argument allows it to work with `map`.
14224 _.sample = function(obj, n, guard) {
14225 if (n == null || guard) {
14226 if (!isArrayLike(obj)) obj = _.values(obj);
14227 return obj[_.random(obj.length - 1)];
14229 return _.shuffle(obj).slice(0, Math.max(0, n));
14232 // Sort the object's values by a criterion produced by an iteratee.
14233 _.sortBy = function(obj, iteratee, context) {
14234 iteratee = cb(iteratee, context);
14235 return _.pluck(_.map(obj, function(value, index, list) {
14239 criteria: iteratee(value, index, list)
14241 }).sort(function(left, right) {
14242 var a = left.criteria;
14243 var b = right.criteria;
14245 if (a > b || a === void 0) return 1;
14246 if (a < b || b === void 0) return -1;
14248 return left.index - right.index;
14252 // An internal function used for aggregate "group by" operations.
14253 var group = function(behavior) {
14254 return function(obj, iteratee, context) {
14256 iteratee = cb(iteratee, context);
14257 _.each(obj, function(value, index) {
14258 var key = iteratee(value, index, obj);
14259 behavior(result, value, key);
14265 // Groups the object's values by a criterion. Pass either a string attribute
14266 // to group by, or a function that returns the criterion.
14267 _.groupBy = group(function(result, value, key) {
14268 if (_.has(result, key)) result[key].push(value); else result[key] = [value];
14271 // Indexes the object's values by a criterion, similar to `groupBy`, but for
14272 // when you know that your index values will be unique.
14273 _.indexBy = group(function(result, value, key) {
14274 result[key] = value;
14277 // Counts instances of an object that group by a certain criterion. Pass
14278 // either a string attribute to count by, or a function that returns the
14280 _.countBy = group(function(result, value, key) {
14281 if (_.has(result, key)) result[key]++; else result[key] = 1;
14284 // Safely create a real, live array from anything iterable.
14285 _.toArray = function(obj) {
14286 if (!obj) return [];
14287 if (_.isArray(obj)) return slice.call(obj);
14288 if (isArrayLike(obj)) return _.map(obj, _.identity);
14289 return _.values(obj);
14292 // Return the number of elements in an object.
14293 _.size = function(obj) {
14294 if (obj == null) return 0;
14295 return isArrayLike(obj) ? obj.length : _.keys(obj).length;
14298 // Split a collection into two arrays: one whose elements all satisfy the given
14299 // predicate, and one whose elements all do not satisfy the predicate.
14300 _.partition = function(obj, predicate, context) {
14301 predicate = cb(predicate, context);
14302 var pass = [], fail = [];
14303 _.each(obj, function(value, key, obj) {
14304 (predicate(value, key, obj) ? pass : fail).push(value);
14306 return [pass, fail];
14312 // Get the first element of an array. Passing **n** will return the first N
14313 // values in the array. Aliased as `head` and `take`. The **guard** check
14314 // allows it to work with `_.map`.
14315 _.first = _.head = _.take = function(array, n, guard) {
14316 if (array == null) return void 0;
14317 if (n == null || guard) return array[0];
14318 return _.initial(array, array.length - n);
14321 // Returns everything but the last entry of the array. Especially useful on
14322 // the arguments object. Passing **n** will return all the values in
14323 // the array, excluding the last N.
14324 _.initial = function(array, n, guard) {
14325 return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
14328 // Get the last element of an array. Passing **n** will return the last N
14329 // values in the array.
14330 _.last = function(array, n, guard) {
14331 if (array == null) return void 0;
14332 if (n == null || guard) return array[array.length - 1];
14333 return _.rest(array, Math.max(0, array.length - n));
14336 // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
14337 // Especially useful on the arguments object. Passing an **n** will return
14338 // the rest N values in the array.
14339 _.rest = _.tail = _.drop = function(array, n, guard) {
14340 return slice.call(array, n == null || guard ? 1 : n);
14343 // Trim out all falsy values from an array.
14344 _.compact = function(array) {
14345 return _.filter(array, _.identity);
14348 // Internal implementation of a recursive `flatten` function.
14349 var flatten = function(input, shallow, strict, startIndex) {
14350 var output = [], idx = 0;
14351 for (var i = startIndex || 0, length = getLength(input); i < length; i++) {
14352 var value = input[i];
14353 if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
14354 //flatten current level of array or arguments object
14355 if (!shallow) value = flatten(value, shallow, strict);
14356 var j = 0, len = value.length;
14357 output.length += len;
14359 output[idx++] = value[j++];
14361 } else if (!strict) {
14362 output[idx++] = value;
14368 // Flatten out an array, either recursively (by default), or just one level.
14369 _.flatten = function(array, shallow) {
14370 return flatten(array, shallow, false);
14373 // Return a version of the array that does not contain the specified value(s).
14374 _.without = function(array) {
14375 return _.difference(array, slice.call(arguments, 1));
14378 // Produce a duplicate-free version of the array. If the array has already
14379 // been sorted, you have the option of using a faster algorithm.
14380 // Aliased as `unique`.
14381 _.uniq = _.unique = function(array, isSorted, iteratee, context) {
14382 if (!_.isBoolean(isSorted)) {
14383 context = iteratee;
14384 iteratee = isSorted;
14387 if (iteratee != null) iteratee = cb(iteratee, context);
14390 for (var i = 0, length = getLength(array); i < length; i++) {
14391 var value = array[i],
14392 computed = iteratee ? iteratee(value, i, array) : value;
14394 if (!i || seen !== computed) result.push(value);
14396 } else if (iteratee) {
14397 if (!_.contains(seen, computed)) {
14398 seen.push(computed);
14399 result.push(value);
14401 } else if (!_.contains(result, value)) {
14402 result.push(value);
14408 // Produce an array that contains the union: each distinct element from all of
14409 // the passed-in arrays.
14410 _.union = function() {
14411 return _.uniq(flatten(arguments, true, true));
14414 // Produce an array that contains every item shared between all the
14415 // passed-in arrays.
14416 _.intersection = function(array) {
14418 var argsLength = arguments.length;
14419 for (var i = 0, length = getLength(array); i < length; i++) {
14420 var item = array[i];
14421 if (_.contains(result, item)) continue;
14422 for (var j = 1; j < argsLength; j++) {
14423 if (!_.contains(arguments[j], item)) break;
14425 if (j === argsLength) result.push(item);
14430 // Take the difference between one array and a number of other arrays.
14431 // Only the elements present in just the first array will remain.
14432 _.difference = function(array) {
14433 var rest = flatten(arguments, true, true, 1);
14434 return _.filter(array, function(value){
14435 return !_.contains(rest, value);
14439 // Zip together multiple lists into a single array -- elements that share
14440 // an index go together.
14441 _.zip = function() {
14442 return _.unzip(arguments);
14445 // Complement of _.zip. Unzip accepts an array of arrays and groups
14446 // each array's elements on shared indices
14447 _.unzip = function(array) {
14448 var length = array && _.max(array, getLength).length || 0;
14449 var result = Array(length);
14451 for (var index = 0; index < length; index++) {
14452 result[index] = _.pluck(array, index);
14457 // Converts lists into objects. Pass either a single array of `[key, value]`
14458 // pairs, or two parallel arrays of the same length -- one of keys, and one of
14459 // the corresponding values.
14460 _.object = function(list, values) {
14462 for (var i = 0, length = getLength(list); i < length; i++) {
14464 result[list[i]] = values[i];
14466 result[list[i][0]] = list[i][1];
14472 // Generator function to create the findIndex and findLastIndex functions
14473 function createPredicateIndexFinder(dir) {
14474 return function(array, predicate, context) {
14475 predicate = cb(predicate, context);
14476 var length = getLength(array);
14477 var index = dir > 0 ? 0 : length - 1;
14478 for (; index >= 0 && index < length; index += dir) {
14479 if (predicate(array[index], index, array)) return index;
14485 // Returns the first index on an array-like that passes a predicate test
14486 _.findIndex = createPredicateIndexFinder(1);
14487 _.findLastIndex = createPredicateIndexFinder(-1);
14489 // Use a comparator function to figure out the smallest index at which
14490 // an object should be inserted so as to maintain order. Uses binary search.
14491 _.sortedIndex = function(array, obj, iteratee, context) {
14492 iteratee = cb(iteratee, context, 1);
14493 var value = iteratee(obj);
14494 var low = 0, high = getLength(array);
14495 while (low < high) {
14496 var mid = Math.floor((low + high) / 2);
14497 if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
14502 // Generator function to create the indexOf and lastIndexOf functions
14503 function createIndexFinder(dir, predicateFind, sortedIndex) {
14504 return function(array, item, idx) {
14505 var i = 0, length = getLength(array);
14506 if (typeof idx == 'number') {
14508 i = idx >= 0 ? idx : Math.max(idx + length, i);
14510 length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
14512 } else if (sortedIndex && idx && length) {
14513 idx = sortedIndex(array, item);
14514 return array[idx] === item ? idx : -1;
14516 if (item !== item) {
14517 idx = predicateFind(slice.call(array, i, length), _.isNaN);
14518 return idx >= 0 ? idx + i : -1;
14520 for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
14521 if (array[idx] === item) return idx;
14527 // Return the position of the first occurrence of an item in an array,
14528 // or -1 if the item is not included in the array.
14529 // If the array is large and already in sort order, pass `true`
14530 // for **isSorted** to use binary search.
14531 _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
14532 _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
14534 // Generate an integer Array containing an arithmetic progression. A port of
14535 // the native Python `range()` function. See
14536 // [the Python documentation](http://docs.python.org/library/functions.html#range).
14537 _.range = function(start, stop, step) {
14538 if (stop == null) {
14544 var length = Math.max(Math.ceil((stop - start) / step), 0);
14545 var range = Array(length);
14547 for (var idx = 0; idx < length; idx++, start += step) {
14548 range[idx] = start;
14554 // Function (ahem) Functions
14555 // ------------------
14557 // Determines whether to execute a function as a constructor
14558 // or a normal function with the provided arguments
14559 var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
14560 if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
14561 var self = baseCreate(sourceFunc.prototype);
14562 var result = sourceFunc.apply(self, args);
14563 if (_.isObject(result)) return result;
14567 // Create a function bound to a given object (assigning `this`, and arguments,
14568 // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
14570 _.bind = function(func, context) {
14571 if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
14572 if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
14573 var args = slice.call(arguments, 2);
14574 var bound = function() {
14575 return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));
14580 // Partially apply a function by creating a version that has had some of its
14581 // arguments pre-filled, without changing its dynamic `this` context. _ acts
14582 // as a placeholder, allowing any combination of arguments to be pre-filled.
14583 _.partial = function(func) {
14584 var boundArgs = slice.call(arguments, 1);
14585 var bound = function() {
14586 var position = 0, length = boundArgs.length;
14587 var args = Array(length);
14588 for (var i = 0; i < length; i++) {
14589 args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];
14591 while (position < arguments.length) args.push(arguments[position++]);
14592 return executeBound(func, bound, this, this, args);
14597 // Bind a number of an object's methods to that object. Remaining arguments
14598 // are the method names to be bound. Useful for ensuring that all callbacks
14599 // defined on an object belong to it.
14600 _.bindAll = function(obj) {
14601 var i, length = arguments.length, key;
14602 if (length <= 1) throw new Error('bindAll must be passed function names');
14603 for (i = 1; i < length; i++) {
14604 key = arguments[i];
14605 obj[key] = _.bind(obj[key], obj);
14610 // Memoize an expensive function by storing its results.
14611 _.memoize = function(func, hasher) {
14612 var memoize = function(key) {
14613 var cache = memoize.cache;
14614 var address = '' + (hasher ? hasher.apply(this, arguments) : key);
14615 if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
14616 return cache[address];
14618 memoize.cache = {};
14622 // Delays a function for the given number of milliseconds, and then calls
14623 // it with the arguments supplied.
14624 _.delay = function(func, wait) {
14625 var args = slice.call(arguments, 2);
14626 return setTimeout(function(){
14627 return func.apply(null, args);
14631 // Defers a function, scheduling it to run after the current call stack has
14633 _.defer = _.partial(_.delay, _, 1);
14635 // Returns a function, that, when invoked, will only be triggered at most once
14636 // during a given window of time. Normally, the throttled function will run
14637 // as much as it can, without ever going more than once per `wait` duration;
14638 // but if you'd like to disable the execution on the leading edge, pass
14639 // `{leading: false}`. To disable execution on the trailing edge, ditto.
14640 _.throttle = function(func, wait, options) {
14641 var context, args, result;
14642 var timeout = null;
14644 if (!options) options = {};
14645 var later = function() {
14646 previous = options.leading === false ? 0 : _.now();
14648 result = func.apply(context, args);
14649 if (!timeout) context = args = null;
14651 return function() {
14653 if (!previous && options.leading === false) previous = now;
14654 var remaining = wait - (now - previous);
14657 if (remaining <= 0 || remaining > wait) {
14659 clearTimeout(timeout);
14663 result = func.apply(context, args);
14664 if (!timeout) context = args = null;
14665 } else if (!timeout && options.trailing !== false) {
14666 timeout = setTimeout(later, remaining);
14672 // Returns a function, that, as long as it continues to be invoked, will not
14673 // be triggered. The function will be called after it stops being called for
14674 // N milliseconds. If `immediate` is passed, trigger the function on the
14675 // leading edge, instead of the trailing.
14676 _.debounce = function(func, wait, immediate) {
14677 var timeout, args, context, timestamp, result;
14679 var later = function() {
14680 var last = _.now() - timestamp;
14682 if (last < wait && last >= 0) {
14683 timeout = setTimeout(later, wait - last);
14687 result = func.apply(context, args);
14688 if (!timeout) context = args = null;
14693 return function() {
14696 timestamp = _.now();
14697 var callNow = immediate && !timeout;
14698 if (!timeout) timeout = setTimeout(later, wait);
14700 result = func.apply(context, args);
14701 context = args = null;
14708 // Returns the first function passed as an argument to the second,
14709 // allowing you to adjust arguments, run code before and after, and
14710 // conditionally execute the original function.
14711 _.wrap = function(func, wrapper) {
14712 return _.partial(wrapper, func);
14715 // Returns a negated version of the passed-in predicate.
14716 _.negate = function(predicate) {
14717 return function() {
14718 return !predicate.apply(this, arguments);
14722 // Returns a function that is the composition of a list of functions, each
14723 // consuming the return value of the function that follows.
14724 _.compose = function() {
14725 var args = arguments;
14726 var start = args.length - 1;
14727 return function() {
14729 var result = args[start].apply(this, arguments);
14730 while (i--) result = args[i].call(this, result);
14735 // Returns a function that will only be executed on and after the Nth call.
14736 _.after = function(times, func) {
14737 return function() {
14739 return func.apply(this, arguments);
14744 // Returns a function that will only be executed up to (but not including) the Nth call.
14745 _.before = function(times, func) {
14747 return function() {
14749 memo = func.apply(this, arguments);
14751 if (times <= 1) func = null;
14756 // Returns a function that will be executed at most one time, no matter how
14757 // often you call it. Useful for lazy initialization.
14758 _.once = _.partial(_.before, 2);
14760 // Object Functions
14761 // ----------------
14763 // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
14764 var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
14765 var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
14766 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
14768 function collectNonEnumProps(obj, keys) {
14769 var nonEnumIdx = nonEnumerableProps.length;
14770 var constructor = obj.constructor;
14771 var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;
14773 // Constructor is a special case.
14774 var prop = 'constructor';
14775 if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
14777 while (nonEnumIdx--) {
14778 prop = nonEnumerableProps[nonEnumIdx];
14779 if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
14785 // Retrieve the names of an object's own properties.
14786 // Delegates to **ECMAScript 5**'s native `Object.keys`
14787 _.keys = function(obj) {
14788 if (!_.isObject(obj)) return [];
14789 if (nativeKeys) return nativeKeys(obj);
14791 for (var key in obj) if (_.has(obj, key)) keys.push(key);
14793 if (hasEnumBug) collectNonEnumProps(obj, keys);
14797 // Retrieve all the property names of an object.
14798 _.allKeys = function(obj) {
14799 if (!_.isObject(obj)) return [];
14801 for (var key in obj) keys.push(key);
14803 if (hasEnumBug) collectNonEnumProps(obj, keys);
14807 // Retrieve the values of an object's properties.
14808 _.values = function(obj) {
14809 var keys = _.keys(obj);
14810 var length = keys.length;
14811 var values = Array(length);
14812 for (var i = 0; i < length; i++) {
14813 values[i] = obj[keys[i]];
14818 // Returns the results of applying the iteratee to each element of the object
14819 // In contrast to _.map it returns an object
14820 _.mapObject = function(obj, iteratee, context) {
14821 iteratee = cb(iteratee, context);
14822 var keys = _.keys(obj),
14823 length = keys.length,
14826 for (var index = 0; index < length; index++) {
14827 currentKey = keys[index];
14828 results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
14833 // Convert an object into a list of `[key, value]` pairs.
14834 _.pairs = function(obj) {
14835 var keys = _.keys(obj);
14836 var length = keys.length;
14837 var pairs = Array(length);
14838 for (var i = 0; i < length; i++) {
14839 pairs[i] = [keys[i], obj[keys[i]]];
14844 // Invert the keys and values of an object. The values must be serializable.
14845 _.invert = function(obj) {
14847 var keys = _.keys(obj);
14848 for (var i = 0, length = keys.length; i < length; i++) {
14849 result[obj[keys[i]]] = keys[i];
14854 // Return a sorted list of the function names available on the object.
14855 // Aliased as `methods`
14856 _.functions = _.methods = function(obj) {
14858 for (var key in obj) {
14859 if (_.isFunction(obj[key])) names.push(key);
14861 return names.sort();
14864 // Extend a given object with all the properties in passed-in object(s).
14865 _.extend = createAssigner(_.allKeys);
14867 // Assigns a given object with all the own properties in the passed-in object(s)
14868 // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
14869 _.extendOwn = _.assign = createAssigner(_.keys);
14871 // Returns the first key on an object that passes a predicate test
14872 _.findKey = function(obj, predicate, context) {
14873 predicate = cb(predicate, context);
14874 var keys = _.keys(obj), key;
14875 for (var i = 0, length = keys.length; i < length; i++) {
14877 if (predicate(obj[key], key, obj)) return key;
14881 // Return a copy of the object only containing the whitelisted properties.
14882 _.pick = function(object, oiteratee, context) {
14883 var result = {}, obj = object, iteratee, keys;
14884 if (obj == null) return result;
14885 if (_.isFunction(oiteratee)) {
14886 keys = _.allKeys(obj);
14887 iteratee = optimizeCb(oiteratee, context);
14889 keys = flatten(arguments, false, false, 1);
14890 iteratee = function(value, key, obj) { return key in obj; };
14893 for (var i = 0, length = keys.length; i < length; i++) {
14895 var value = obj[key];
14896 if (iteratee(value, key, obj)) result[key] = value;
14901 // Return a copy of the object without the blacklisted properties.
14902 _.omit = function(obj, iteratee, context) {
14903 if (_.isFunction(iteratee)) {
14904 iteratee = _.negate(iteratee);
14906 var keys = _.map(flatten(arguments, false, false, 1), String);
14907 iteratee = function(value, key) {
14908 return !_.contains(keys, key);
14911 return _.pick(obj, iteratee, context);
14914 // Fill in a given object with default properties.
14915 _.defaults = createAssigner(_.allKeys, true);
14917 // Creates an object that inherits from the given prototype object.
14918 // If additional properties are provided then they will be added to the
14920 _.create = function(prototype, props) {
14921 var result = baseCreate(prototype);
14922 if (props) _.extendOwn(result, props);
14926 // Create a (shallow-cloned) duplicate of an object.
14927 _.clone = function(obj) {
14928 if (!_.isObject(obj)) return obj;
14929 return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
14932 // Invokes interceptor with the obj, and then returns obj.
14933 // The primary purpose of this method is to "tap into" a method chain, in
14934 // order to perform operations on intermediate results within the chain.
14935 _.tap = function(obj, interceptor) {
14940 // Returns whether an object has a given set of `key:value` pairs.
14941 _.isMatch = function(object, attrs) {
14942 var keys = _.keys(attrs), length = keys.length;
14943 if (object == null) return !length;
14944 var obj = Object(object);
14945 for (var i = 0; i < length; i++) {
14947 if (attrs[key] !== obj[key] || !(key in obj)) return false;
14953 // Internal recursive comparison function for `isEqual`.
14954 var eq = function(a, b, aStack, bStack) {
14955 // Identical objects are equal. `0 === -0`, but they aren't identical.
14956 // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
14957 if (a === b) return a !== 0 || 1 / a === 1 / b;
14958 // A strict comparison is necessary because `null == undefined`.
14959 if (a == null || b == null) return a === b;
14960 // Unwrap any wrapped objects.
14961 if (a instanceof _) a = a._wrapped;
14962 if (b instanceof _) b = b._wrapped;
14963 // Compare `[[Class]]` names.
14964 var className = toString.call(a);
14965 if (className !== toString.call(b)) return false;
14966 switch (className) {
14967 // Strings, numbers, regular expressions, dates, and booleans are compared by value.
14968 case '[object RegExp]':
14969 // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
14970 case '[object String]':
14971 // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
14972 // equivalent to `new String("5")`.
14973 return '' + a === '' + b;
14974 case '[object Number]':
14975 // `NaN`s are equivalent, but non-reflexive.
14976 // Object(NaN) is equivalent to NaN
14977 if (+a !== +a) return +b !== +b;
14978 // An `egal` comparison is performed for other numeric values.
14979 return +a === 0 ? 1 / +a === 1 / b : +a === +b;
14980 case '[object Date]':
14981 case '[object Boolean]':
14982 // Coerce dates and booleans to numeric primitive values. Dates are compared by their
14983 // millisecond representations. Note that invalid dates with millisecond representations
14984 // of `NaN` are not equivalent.
14988 var areArrays = className === '[object Array]';
14990 if (typeof a != 'object' || typeof b != 'object') return false;
14992 // Objects with different constructors are not equivalent, but `Object`s or `Array`s
14993 // from different frames are.
14994 var aCtor = a.constructor, bCtor = b.constructor;
14995 if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
14996 _.isFunction(bCtor) && bCtor instanceof bCtor)
14997 && ('constructor' in a && 'constructor' in b)) {
15001 // Assume equality for cyclic structures. The algorithm for detecting cyclic
15002 // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
15004 // Initializing stack of traversed objects.
15005 // It's done here since we only need them for objects and arrays comparison.
15006 aStack = aStack || [];
15007 bStack = bStack || [];
15008 var length = aStack.length;
15010 // Linear search. Performance is inversely proportional to the number of
15011 // unique nested structures.
15012 if (aStack[length] === a) return bStack[length] === b;
15015 // Add the first object to the stack of traversed objects.
15019 // Recursively compare objects and arrays.
15021 // Compare array lengths to determine if a deep comparison is necessary.
15023 if (length !== b.length) return false;
15024 // Deep compare the contents, ignoring non-numeric properties.
15026 if (!eq(a[length], b[length], aStack, bStack)) return false;
15029 // Deep compare objects.
15030 var keys = _.keys(a), key;
15031 length = keys.length;
15032 // Ensure that both objects contain the same number of properties before comparing deep equality.
15033 if (_.keys(b).length !== length) return false;
15035 // Deep compare each member
15036 key = keys[length];
15037 if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
15040 // Remove the first object from the stack of traversed objects.
15046 // Perform a deep comparison to check if two objects are equal.
15047 _.isEqual = function(a, b) {
15051 // Is a given array, string, or object empty?
15052 // An "empty" object has no enumerable own-properties.
15053 _.isEmpty = function(obj) {
15054 if (obj == null) return true;
15055 if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
15056 return _.keys(obj).length === 0;
15059 // Is a given value a DOM element?
15060 _.isElement = function(obj) {
15061 return !!(obj && obj.nodeType === 1);
15064 // Is a given value an array?
15065 // Delegates to ECMA5's native Array.isArray
15066 _.isArray = nativeIsArray || function(obj) {
15067 return toString.call(obj) === '[object Array]';
15070 // Is a given variable an object?
15071 _.isObject = function(obj) {
15072 var type = typeof obj;
15073 return type === 'function' || type === 'object' && !!obj;
15076 // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.
15077 _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {
15078 _['is' + name] = function(obj) {
15079 return toString.call(obj) === '[object ' + name + ']';
15083 // Define a fallback version of the method in browsers (ahem, IE < 9), where
15084 // there isn't any inspectable "Arguments" type.
15085 if (!_.isArguments(arguments)) {
15086 _.isArguments = function(obj) {
15087 return _.has(obj, 'callee');
15091 // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
15092 // IE 11 (#1621), and in Safari 8 (#1929).
15093 if (typeof /./ != 'function' && typeof Int8Array != 'object') {
15094 _.isFunction = function(obj) {
15095 return typeof obj == 'function' || false;
15099 // Is a given object a finite number?
15100 _.isFinite = function(obj) {
15101 return isFinite(obj) && !isNaN(parseFloat(obj));
15104 // Is the given value `NaN`? (NaN is the only number which does not equal itself).
15105 _.isNaN = function(obj) {
15106 return _.isNumber(obj) && obj !== +obj;
15109 // Is a given value a boolean?
15110 _.isBoolean = function(obj) {
15111 return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
15114 // Is a given value equal to null?
15115 _.isNull = function(obj) {
15116 return obj === null;
15119 // Is a given variable undefined?
15120 _.isUndefined = function(obj) {
15121 return obj === void 0;
15124 // Shortcut function for checking if an object has a given property directly
15125 // on itself (in other words, not on a prototype).
15126 _.has = function(obj, key) {
15127 return obj != null && hasOwnProperty.call(obj, key);
15130 // Utility Functions
15131 // -----------------
15133 // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
15134 // previous owner. Returns a reference to the Underscore object.
15135 _.noConflict = function() {
15136 root._ = previousUnderscore;
15140 // Keep the identity function around for default iteratees.
15141 _.identity = function(value) {
15145 // Predicate-generating functions. Often useful outside of Underscore.
15146 _.constant = function(value) {
15147 return function() {
15152 _.noop = function(){};
15154 _.property = property;
15156 // Generates a function for a given object that returns a given property.
15157 _.propertyOf = function(obj) {
15158 return obj == null ? function(){} : function(key) {
15163 // Returns a predicate for checking whether an object has a given set of
15164 // `key:value` pairs.
15165 _.matcher = _.matches = function(attrs) {
15166 attrs = _.extendOwn({}, attrs);
15167 return function(obj) {
15168 return _.isMatch(obj, attrs);
15172 // Run a function **n** times.
15173 _.times = function(n, iteratee, context) {
15174 var accum = Array(Math.max(0, n));
15175 iteratee = optimizeCb(iteratee, context, 1);
15176 for (var i = 0; i < n; i++) accum[i] = iteratee(i);
15180 // Return a random integer between min and max (inclusive).
15181 _.random = function(min, max) {
15186 return min + Math.floor(Math.random() * (max - min + 1));
15189 // A (possibly faster) way to get the current timestamp as an integer.
15190 _.now = Date.now || function() {
15191 return new Date().getTime();
15194 // List of HTML entities for escaping.
15203 var unescapeMap = _.invert(escapeMap);
15205 // Functions for escaping and unescaping strings to/from HTML interpolation.
15206 var createEscaper = function(map) {
15207 var escaper = function(match) {
15210 // Regexes for identifying a key that needs to be escaped
15211 var source = '(?:' + _.keys(map).join('|') + ')';
15212 var testRegexp = RegExp(source);
15213 var replaceRegexp = RegExp(source, 'g');
15214 return function(string) {
15215 string = string == null ? '' : '' + string;
15216 return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
15219 _.escape = createEscaper(escapeMap);
15220 _.unescape = createEscaper(unescapeMap);
15222 // If the value of the named `property` is a function then invoke it with the
15223 // `object` as context; otherwise, return it.
15224 _.result = function(object, property, fallback) {
15225 var value = object == null ? void 0 : object[property];
15226 if (value === void 0) {
15229 return _.isFunction(value) ? value.call(object) : value;
15232 // Generate a unique integer id (unique within the entire client session).
15233 // Useful for temporary DOM ids.
15235 _.uniqueId = function(prefix) {
15236 var id = ++idCounter + '';
15237 return prefix ? prefix + id : id;
15240 // By default, Underscore uses ERB-style template delimiters, change the
15241 // following template settings to use alternative delimiters.
15242 _.templateSettings = {
15243 evaluate : /<%([\s\S]+?)%>/g,
15244 interpolate : /<%=([\s\S]+?)%>/g,
15245 escape : /<%-([\s\S]+?)%>/g
15248 // When customizing `templateSettings`, if you don't want to define an
15249 // interpolation, evaluation or escaping regex, we need one that is
15250 // guaranteed not to match.
15251 var noMatch = /(.)^/;
15253 // Certain characters need to be escaped so that they can be put into a
15264 var escaper = /\\|'|\r|\n|\u2028|\u2029/g;
15266 var escapeChar = function(match) {
15267 return '\\' + escapes[match];
15270 // JavaScript micro-templating, similar to John Resig's implementation.
15271 // Underscore templating handles arbitrary delimiters, preserves whitespace,
15272 // and correctly escapes quotes within interpolated code.
15273 // NB: `oldSettings` only exists for backwards compatibility.
15274 _.template = function(text, settings, oldSettings) {
15275 if (!settings && oldSettings) settings = oldSettings;
15276 settings = _.defaults({}, settings, _.templateSettings);
15278 // Combine delimiters into one regular expression via alternation.
15279 var matcher = RegExp([
15280 (settings.escape || noMatch).source,
15281 (settings.interpolate || noMatch).source,
15282 (settings.evaluate || noMatch).source
15283 ].join('|') + '|$', 'g');
15285 // Compile the template source, escaping string literals appropriately.
15287 var source = "__p+='";
15288 text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
15289 source += text.slice(index, offset).replace(escaper, escapeChar);
15290 index = offset + match.length;
15293 source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
15294 } else if (interpolate) {
15295 source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
15296 } else if (evaluate) {
15297 source += "';\n" + evaluate + "\n__p+='";
15300 // Adobe VMs need the match returned to produce the correct offest.
15305 // If a variable is not specified, place data values in local scope.
15306 if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
15308 source = "var __t,__p='',__j=Array.prototype.join," +
15309 "print=function(){__p+=__j.call(arguments,'');};\n" +
15310 source + 'return __p;\n';
15313 var render = new Function(settings.variable || 'obj', '_', source);
15319 var template = function(data) {
15320 return render.call(this, data, _);
15323 // Provide the compiled source as a convenience for precompilation.
15324 var argument = settings.variable || 'obj';
15325 template.source = 'function(' + argument + '){\n' + source + '}';
15330 // Add a "chain" function. Start chaining a wrapped Underscore object.
15331 _.chain = function(obj) {
15332 var instance = _(obj);
15333 instance._chain = true;
15339 // If Underscore is called as a function, it returns a wrapped object that
15340 // can be used OO-style. This wrapper holds altered versions of all the
15341 // underscore functions. Wrapped objects may be chained.
15343 // Helper function to continue chaining intermediate results.
15344 var result = function(instance, obj) {
15345 return instance._chain ? _(obj).chain() : obj;
15348 // Add your own custom functions to the Underscore object.
15349 _.mixin = function(obj) {
15350 _.each(_.functions(obj), function(name) {
15351 var func = _[name] = obj[name];
15352 _.prototype[name] = function() {
15353 var args = [this._wrapped];
15354 push.apply(args, arguments);
15355 return result(this, func.apply(_, args));
15360 // Add all of the Underscore functions to the wrapper object.
15363 // Add all mutator Array functions to the wrapper.
15364 _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
15365 var method = ArrayProto[name];
15366 _.prototype[name] = function() {
15367 var obj = this._wrapped;
15368 method.apply(obj, arguments);
15369 if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
15370 return result(this, obj);
15374 // Add all accessor Array functions to the wrapper.
15375 _.each(['concat', 'join', 'slice'], function(name) {
15376 var method = ArrayProto[name];
15377 _.prototype[name] = function() {
15378 return result(this, method.apply(this._wrapped, arguments));
15382 // Extracts the result from a wrapped and chained object.
15383 _.prototype.value = function() {
15384 return this._wrapped;
15387 // Provide unwrapping proxy for some methods used in engine operations
15388 // such as arithmetic and JSON stringification.
15389 _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
15391 _.prototype.toString = function() {
15392 return '' + this._wrapped;
15395 // AMD registration happens at the end for compatibility with AMD loaders
15396 // that may not enforce next-turn semantics on modules. Even though general
15397 // practice for AMD registration is to be anonymous, underscore registers
15398 // as a named module because, like jQuery, it is a base library that is
15399 // popular enough to be bundled in a third party lib, but not be part of
15400 // an AMD load request. Those cases could generate an error when an
15401 // anonymous define() is called outside of a loader request.
15402 if (typeof define === 'function' && define.amd) {
15403 define('underscore', [], function() {
15409 },{}],176:[function(require,module,exports){
15411 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
15413 * Redistribution and use in source and binary forms, with or without
15414 * modification, are permitted provided that the following conditions
15416 * 1. Redistributions of source code must retain the above copyright
15417 * notice, this list of conditions and the following disclaimer.
15418 * 2. Redistributions in binary form must reproduce the above copyright
15419 * notice, this list of conditions and the following disclaimer in the
15420 * documentation and/or other materials provided with the distribution.
15422 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15423 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15424 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
15425 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
15426 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
15427 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
15428 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
15429 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
15430 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
15431 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15432 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
15434 * Ported from Webkit
15435 * http://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/UnitBezier.h
15438 module.exports = UnitBezier;
15440 function UnitBezier(p1x, p1y, p2x, p2y) {
15441 // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).
15442 this.cx = 3.0 * p1x;
15443 this.bx = 3.0 * (p2x - p1x) - this.cx;
15444 this.ax = 1.0 - this.cx - this.bx;
15446 this.cy = 3.0 * p1y;
15447 this.by = 3.0 * (p2y - p1y) - this.cy;
15448 this.ay = 1.0 - this.cy - this.by;
15456 UnitBezier.prototype.sampleCurveX = function(t) {
15457 // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule.
15458 return ((this.ax * t + this.bx) * t + this.cx) * t;
15461 UnitBezier.prototype.sampleCurveY = function(t) {
15462 return ((this.ay * t + this.by) * t + this.cy) * t;
15465 UnitBezier.prototype.sampleCurveDerivativeX = function(t) {
15466 return (3.0 * this.ax * t + 2.0 * this.bx) * t + this.cx;
15469 UnitBezier.prototype.solveCurveX = function(x, epsilon) {
15470 if (typeof epsilon === 'undefined') epsilon = 1e-6;
15472 var t0, t1, t2, x2, i;
15474 // First try a few iterations of Newton's method -- normally very fast.
15475 for (t2 = x, i = 0; i < 8; i++) {
15477 x2 = this.sampleCurveX(t2) - x;
15478 if (Math.abs(x2) < epsilon) return t2;
15480 var d2 = this.sampleCurveDerivativeX(t2);
15481 if (Math.abs(d2) < 1e-6) break;
15486 // Fall back to the bisection method for reliability.
15491 if (t2 < t0) return t0;
15492 if (t2 > t1) return t1;
15496 x2 = this.sampleCurveX(t2);
15497 if (Math.abs(x2 - x) < epsilon) return t2;
15505 t2 = (t1 - t0) * 0.5 + t0;
15512 UnitBezier.prototype.solve = function(x, epsilon) {
15513 return this.sampleCurveY(this.solveCurveX(x, epsilon));
15516 },{}],177:[function(require,module,exports){
15517 var createElement = require("./vdom/create-element.js")
15519 module.exports = createElement
15521 },{"./vdom/create-element.js":183}],178:[function(require,module,exports){
15522 var diff = require("./vtree/diff.js")
15524 module.exports = diff
15526 },{"./vtree/diff.js":203}],179:[function(require,module,exports){
15527 var h = require("./virtual-hyperscript/index.js")
15531 },{"./virtual-hyperscript/index.js":190}],180:[function(require,module,exports){
15532 var diff = require("./diff.js")
15533 var patch = require("./patch.js")
15534 var h = require("./h.js")
15535 var create = require("./create-element.js")
15536 var VNode = require('./vnode/vnode.js')
15537 var VText = require('./vnode/vtext.js')
15548 },{"./create-element.js":177,"./diff.js":178,"./h.js":179,"./patch.js":181,"./vnode/vnode.js":199,"./vnode/vtext.js":201}],181:[function(require,module,exports){
15549 var patch = require("./vdom/patch.js")
15551 module.exports = patch
15553 },{"./vdom/patch.js":186}],182:[function(require,module,exports){
15554 var isObject = require("is-object")
15555 var isHook = require("../vnode/is-vhook.js")
15557 module.exports = applyProperties
15559 function applyProperties(node, props, previous) {
15560 for (var propName in props) {
15561 var propValue = props[propName]
15563 if (propValue === undefined) {
15564 removeProperty(node, propName, propValue, previous);
15565 } else if (isHook(propValue)) {
15566 removeProperty(node, propName, propValue, previous)
15567 if (propValue.hook) {
15568 propValue.hook(node,
15570 previous ? previous[propName] : undefined)
15573 if (isObject(propValue)) {
15574 patchObject(node, props, previous, propName, propValue);
15576 node[propName] = propValue
15582 function removeProperty(node, propName, propValue, previous) {
15584 var previousValue = previous[propName]
15586 if (!isHook(previousValue)) {
15587 if (propName === "attributes") {
15588 for (var attrName in previousValue) {
15589 node.removeAttribute(attrName)
15591 } else if (propName === "style") {
15592 for (var i in previousValue) {
15595 } else if (typeof previousValue === "string") {
15596 node[propName] = ""
15598 node[propName] = null
15600 } else if (previousValue.unhook) {
15601 previousValue.unhook(node, propName, propValue)
15606 function patchObject(node, props, previous, propName, propValue) {
15607 var previousValue = previous ? previous[propName] : undefined
15610 if (propName === "attributes") {
15611 for (var attrName in propValue) {
15612 var attrValue = propValue[attrName]
15614 if (attrValue === undefined) {
15615 node.removeAttribute(attrName)
15617 node.setAttribute(attrName, attrValue)
15624 if(previousValue && isObject(previousValue) &&
15625 getPrototype(previousValue) !== getPrototype(propValue)) {
15626 node[propName] = propValue
15630 if (!isObject(node[propName])) {
15631 node[propName] = {}
15634 var replacer = propName === "style" ? "" : undefined
15636 for (var k in propValue) {
15637 var value = propValue[k]
15638 node[propName][k] = (value === undefined) ? replacer : value
15642 function getPrototype(value) {
15643 if (Object.getPrototypeOf) {
15644 return Object.getPrototypeOf(value)
15645 } else if (value.__proto__) {
15646 return value.__proto__
15647 } else if (value.constructor) {
15648 return value.constructor.prototype
15652 },{"../vnode/is-vhook.js":194,"is-object":18}],183:[function(require,module,exports){
15653 var document = require("global/document")
15655 var applyProperties = require("./apply-properties")
15657 var isVNode = require("../vnode/is-vnode.js")
15658 var isVText = require("../vnode/is-vtext.js")
15659 var isWidget = require("../vnode/is-widget.js")
15660 var handleThunk = require("../vnode/handle-thunk.js")
15662 module.exports = createElement
15664 function createElement(vnode, opts) {
15665 var doc = opts ? opts.document || document : document
15666 var warn = opts ? opts.warn : null
15668 vnode = handleThunk(vnode).a
15670 if (isWidget(vnode)) {
15671 return vnode.init()
15672 } else if (isVText(vnode)) {
15673 return doc.createTextNode(vnode.text)
15674 } else if (!isVNode(vnode)) {
15676 warn("Item is not a valid virtual dom node", vnode)
15681 var node = (vnode.namespace === null) ?
15682 doc.createElement(vnode.tagName) :
15683 doc.createElementNS(vnode.namespace, vnode.tagName)
15685 var props = vnode.properties
15686 applyProperties(node, props)
15688 var children = vnode.children
15690 for (var i = 0; i < children.length; i++) {
15691 var childNode = createElement(children[i], opts)
15693 node.appendChild(childNode)
15700 },{"../vnode/handle-thunk.js":192,"../vnode/is-vnode.js":195,"../vnode/is-vtext.js":196,"../vnode/is-widget.js":197,"./apply-properties":182,"global/document":14}],184:[function(require,module,exports){
15701 // Maps a virtual DOM tree onto a real DOM tree in an efficient manner.
15702 // We don't want to read all of the DOM nodes in the tree so we use
15703 // the in-order tree indexing to eliminate recursion down certain branches.
15704 // We only recurse into a DOM node if we know that it contains a child of
15709 module.exports = domIndex
15711 function domIndex(rootNode, tree, indices, nodes) {
15712 if (!indices || indices.length === 0) {
15715 indices.sort(ascending)
15716 return recurse(rootNode, tree, indices, nodes, 0)
15720 function recurse(rootNode, tree, indices, nodes, rootIndex) {
15721 nodes = nodes || {}
15725 if (indexInRange(indices, rootIndex, rootIndex)) {
15726 nodes[rootIndex] = rootNode
15729 var vChildren = tree.children
15733 var childNodes = rootNode.childNodes
15735 for (var i = 0; i < tree.children.length; i++) {
15738 var vChild = vChildren[i] || noChild
15739 var nextIndex = rootIndex + (vChild.count || 0)
15741 // skip recursion down the tree if there are no nodes down here
15742 if (indexInRange(indices, rootIndex, nextIndex)) {
15743 recurse(childNodes[i], vChild, indices, nodes, rootIndex)
15746 rootIndex = nextIndex
15754 // Binary search for an index in the interval [left, right]
15755 function indexInRange(indices, left, right) {
15756 if (indices.length === 0) {
15761 var maxIndex = indices.length - 1
15765 while (minIndex <= maxIndex) {
15766 currentIndex = ((maxIndex + minIndex) / 2) >> 0
15767 currentItem = indices[currentIndex]
15769 if (minIndex === maxIndex) {
15770 return currentItem >= left && currentItem <= right
15771 } else if (currentItem < left) {
15772 minIndex = currentIndex + 1
15773 } else if (currentItem > right) {
15774 maxIndex = currentIndex - 1
15783 function ascending(a, b) {
15784 return a > b ? 1 : -1
15787 },{}],185:[function(require,module,exports){
15788 var applyProperties = require("./apply-properties")
15790 var isWidget = require("../vnode/is-widget.js")
15791 var VPatch = require("../vnode/vpatch.js")
15793 var updateWidget = require("./update-widget")
15795 module.exports = applyPatch
15797 function applyPatch(vpatch, domNode, renderOptions) {
15798 var type = vpatch.type
15799 var vNode = vpatch.vNode
15800 var patch = vpatch.patch
15803 case VPatch.REMOVE:
15804 return removeNode(domNode, vNode)
15805 case VPatch.INSERT:
15806 return insertNode(domNode, patch, renderOptions)
15808 return stringPatch(domNode, vNode, patch, renderOptions)
15809 case VPatch.WIDGET:
15810 return widgetPatch(domNode, vNode, patch, renderOptions)
15812 return vNodePatch(domNode, vNode, patch, renderOptions)
15814 reorderChildren(domNode, patch)
15817 applyProperties(domNode, patch, vNode.properties)
15820 return replaceRoot(domNode,
15821 renderOptions.patch(domNode, patch, renderOptions))
15827 function removeNode(domNode, vNode) {
15828 var parentNode = domNode.parentNode
15831 parentNode.removeChild(domNode)
15834 destroyWidget(domNode, vNode);
15839 function insertNode(parentNode, vNode, renderOptions) {
15840 var newNode = renderOptions.render(vNode, renderOptions)
15843 parentNode.appendChild(newNode)
15849 function stringPatch(domNode, leftVNode, vText, renderOptions) {
15852 if (domNode.nodeType === 3) {
15853 domNode.replaceData(0, domNode.length, vText.text)
15856 var parentNode = domNode.parentNode
15857 newNode = renderOptions.render(vText, renderOptions)
15859 if (parentNode && newNode !== domNode) {
15860 parentNode.replaceChild(newNode, domNode)
15867 function widgetPatch(domNode, leftVNode, widget, renderOptions) {
15868 var updating = updateWidget(leftVNode, widget)
15872 newNode = widget.update(leftVNode, domNode) || domNode
15874 newNode = renderOptions.render(widget, renderOptions)
15877 var parentNode = domNode.parentNode
15879 if (parentNode && newNode !== domNode) {
15880 parentNode.replaceChild(newNode, domNode)
15884 destroyWidget(domNode, leftVNode)
15890 function vNodePatch(domNode, leftVNode, vNode, renderOptions) {
15891 var parentNode = domNode.parentNode
15892 var newNode = renderOptions.render(vNode, renderOptions)
15894 if (parentNode && newNode !== domNode) {
15895 parentNode.replaceChild(newNode, domNode)
15901 function destroyWidget(domNode, w) {
15902 if (typeof w.destroy === "function" && isWidget(w)) {
15907 function reorderChildren(domNode, moves) {
15908 var childNodes = domNode.childNodes
15914 for (var i = 0; i < moves.removes.length; i++) {
15915 remove = moves.removes[i]
15916 node = childNodes[remove.from]
15918 keyMap[remove.key] = node
15920 domNode.removeChild(node)
15923 var length = childNodes.length
15924 for (var j = 0; j < moves.inserts.length; j++) {
15925 insert = moves.inserts[j]
15926 node = keyMap[insert.key]
15927 // this is the weirdest bug i've ever seen in webkit
15928 domNode.insertBefore(node, insert.to >= length++ ? null : childNodes[insert.to])
15932 function replaceRoot(oldRoot, newRoot) {
15933 if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) {
15934 oldRoot.parentNode.replaceChild(newRoot, oldRoot)
15940 },{"../vnode/is-widget.js":197,"../vnode/vpatch.js":200,"./apply-properties":182,"./update-widget":187}],186:[function(require,module,exports){
15941 var document = require("global/document")
15942 var isArray = require("x-is-array")
15944 var render = require("./create-element")
15945 var domIndex = require("./dom-index")
15946 var patchOp = require("./patch-op")
15947 module.exports = patch
15949 function patch(rootNode, patches, renderOptions) {
15950 renderOptions = renderOptions || {}
15951 renderOptions.patch = renderOptions.patch && renderOptions.patch !== patch
15952 ? renderOptions.patch
15954 renderOptions.render = renderOptions.render || render
15956 return renderOptions.patch(rootNode, patches, renderOptions)
15959 function patchRecursive(rootNode, patches, renderOptions) {
15960 var indices = patchIndices(patches)
15962 if (indices.length === 0) {
15966 var index = domIndex(rootNode, patches.a, indices)
15967 var ownerDocument = rootNode.ownerDocument
15969 if (!renderOptions.document && ownerDocument !== document) {
15970 renderOptions.document = ownerDocument
15973 for (var i = 0; i < indices.length; i++) {
15974 var nodeIndex = indices[i]
15975 rootNode = applyPatch(rootNode,
15977 patches[nodeIndex],
15984 function applyPatch(rootNode, domNode, patchList, renderOptions) {
15991 if (isArray(patchList)) {
15992 for (var i = 0; i < patchList.length; i++) {
15993 newNode = patchOp(patchList[i], domNode, renderOptions)
15995 if (domNode === rootNode) {
16000 newNode = patchOp(patchList, domNode, renderOptions)
16002 if (domNode === rootNode) {
16010 function patchIndices(patches) {
16013 for (var key in patches) {
16015 indices.push(Number(key))
16022 },{"./create-element":183,"./dom-index":184,"./patch-op":185,"global/document":14,"x-is-array":222}],187:[function(require,module,exports){
16023 var isWidget = require("../vnode/is-widget.js")
16025 module.exports = updateWidget
16027 function updateWidget(a, b) {
16028 if (isWidget(a) && isWidget(b)) {
16029 if ("name" in a && "name" in b) {
16030 return a.id === b.id
16032 return a.init === b.init
16039 },{"../vnode/is-widget.js":197}],188:[function(require,module,exports){
16042 var EvStore = require('ev-store');
16044 module.exports = EvHook;
16046 function EvHook(value) {
16047 if (!(this instanceof EvHook)) {
16048 return new EvHook(value);
16051 this.value = value;
16054 EvHook.prototype.hook = function (node, propertyName) {
16055 var es = EvStore(node);
16056 var propName = propertyName.substr(3);
16058 es[propName] = this.value;
16061 EvHook.prototype.unhook = function(node, propertyName) {
16062 var es = EvStore(node);
16063 var propName = propertyName.substr(3);
16065 es[propName] = undefined;
16068 },{"ev-store":7}],189:[function(require,module,exports){
16071 module.exports = SoftSetHook;
16073 function SoftSetHook(value) {
16074 if (!(this instanceof SoftSetHook)) {
16075 return new SoftSetHook(value);
16078 this.value = value;
16081 SoftSetHook.prototype.hook = function (node, propertyName) {
16082 if (node[propertyName] !== this.value) {
16083 node[propertyName] = this.value;
16087 },{}],190:[function(require,module,exports){
16090 var isArray = require('x-is-array');
16092 var VNode = require('../vnode/vnode.js');
16093 var VText = require('../vnode/vtext.js');
16094 var isVNode = require('../vnode/is-vnode');
16095 var isVText = require('../vnode/is-vtext');
16096 var isWidget = require('../vnode/is-widget');
16097 var isHook = require('../vnode/is-vhook');
16098 var isVThunk = require('../vnode/is-thunk');
16100 var parseTag = require('./parse-tag.js');
16101 var softSetHook = require('./hooks/soft-set-hook.js');
16102 var evHook = require('./hooks/ev-hook.js');
16104 module.exports = h;
16106 function h(tagName, properties, children) {
16107 var childNodes = [];
16108 var tag, props, key, namespace;
16110 if (!children && isChildren(properties)) {
16111 children = properties;
16115 props = props || properties || {};
16116 tag = parseTag(tagName, props);
16119 if (props.hasOwnProperty('key')) {
16121 props.key = undefined;
16124 // support namespace
16125 if (props.hasOwnProperty('namespace')) {
16126 namespace = props.namespace;
16127 props.namespace = undefined;
16131 if (tag === 'INPUT' &&
16133 props.hasOwnProperty('value') &&
16134 props.value !== undefined &&
16135 !isHook(props.value)
16137 props.value = softSetHook(props.value);
16140 transformProperties(props);
16142 if (children !== undefined && children !== null) {
16143 addChild(children, childNodes, tag, props);
16147 return new VNode(tag, props, childNodes, key, namespace);
16150 function addChild(c, childNodes, tag, props) {
16151 if (typeof c === 'string') {
16152 childNodes.push(new VText(c));
16153 } else if (typeof c === 'number') {
16154 childNodes.push(new VText(String(c)));
16155 } else if (isChild(c)) {
16156 childNodes.push(c);
16157 } else if (isArray(c)) {
16158 for (var i = 0; i < c.length; i++) {
16159 addChild(c[i], childNodes, tag, props);
16161 } else if (c === null || c === undefined) {
16164 throw UnexpectedVirtualElement({
16174 function transformProperties(props) {
16175 for (var propName in props) {
16176 if (props.hasOwnProperty(propName)) {
16177 var value = props[propName];
16179 if (isHook(value)) {
16183 if (propName.substr(0, 3) === 'ev-') {
16184 // add ev-foo support
16185 props[propName] = evHook(value);
16191 function isChild(x) {
16192 return isVNode(x) || isVText(x) || isWidget(x) || isVThunk(x);
16195 function isChildren(x) {
16196 return typeof x === 'string' || isArray(x) || isChild(x);
16199 function UnexpectedVirtualElement(data) {
16200 var err = new Error();
16202 err.type = 'virtual-hyperscript.unexpected.virtual-element';
16203 err.message = 'Unexpected virtual child passed to h().\n' +
16204 'Expected a VNode / Vthunk / VWidget / string but:\n' +
16206 errorString(data.foreignObject) +
16208 'The parent vnode is:\n' +
16209 errorString(data.parentVnode)
16211 'Suggested fix: change your `h(..., [ ... ])` callsite.';
16212 err.foreignObject = data.foreignObject;
16213 err.parentVnode = data.parentVnode;
16218 function errorString(obj) {
16220 return JSON.stringify(obj, null, ' ');
16222 return String(obj);
16226 },{"../vnode/is-thunk":193,"../vnode/is-vhook":194,"../vnode/is-vnode":195,"../vnode/is-vtext":196,"../vnode/is-widget":197,"../vnode/vnode.js":199,"../vnode/vtext.js":201,"./hooks/ev-hook.js":188,"./hooks/soft-set-hook.js":189,"./parse-tag.js":191,"x-is-array":222}],191:[function(require,module,exports){
16229 var split = require('browser-split');
16231 var classIdSplit = /([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/;
16232 var notClassId = /^\.|#/;
16234 module.exports = parseTag;
16236 function parseTag(tag, props) {
16241 var noId = !(props.hasOwnProperty('id'));
16243 var tagParts = split(tag, classIdSplit);
16244 var tagName = null;
16246 if (notClassId.test(tagParts[1])) {
16250 var classes, part, type, i;
16252 for (i = 0; i < tagParts.length; i++) {
16253 part = tagParts[i];
16259 type = part.charAt(0);
16263 } else if (type === '.') {
16264 classes = classes || [];
16265 classes.push(part.substring(1, part.length));
16266 } else if (type === '#' && noId) {
16267 props.id = part.substring(1, part.length);
16272 if (props.className) {
16273 classes.push(props.className);
16276 props.className = classes.join(' ');
16279 return props.namespace ? tagName : tagName.toUpperCase();
16282 },{"browser-split":3}],192:[function(require,module,exports){
16283 var isVNode = require("./is-vnode")
16284 var isVText = require("./is-vtext")
16285 var isWidget = require("./is-widget")
16286 var isThunk = require("./is-thunk")
16288 module.exports = handleThunk
16290 function handleThunk(a, b) {
16295 renderedB = renderThunk(b, a)
16299 renderedA = renderThunk(a, null)
16308 function renderThunk(thunk, previous) {
16309 var renderedThunk = thunk.vnode
16311 if (!renderedThunk) {
16312 renderedThunk = thunk.vnode = thunk.render(previous)
16315 if (!(isVNode(renderedThunk) ||
16316 isVText(renderedThunk) ||
16317 isWidget(renderedThunk))) {
16318 throw new Error("thunk did not return a valid node");
16321 return renderedThunk
16324 },{"./is-thunk":193,"./is-vnode":195,"./is-vtext":196,"./is-widget":197}],193:[function(require,module,exports){
16325 module.exports = isThunk
16327 function isThunk(t) {
16328 return t && t.type === "Thunk"
16331 },{}],194:[function(require,module,exports){
16332 module.exports = isHook
16334 function isHook(hook) {
16336 (typeof hook.hook === "function" && !hook.hasOwnProperty("hook") ||
16337 typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook"))
16340 },{}],195:[function(require,module,exports){
16341 var version = require("./version")
16343 module.exports = isVirtualNode
16345 function isVirtualNode(x) {
16346 return x && x.type === "VirtualNode" && x.version === version
16349 },{"./version":198}],196:[function(require,module,exports){
16350 var version = require("./version")
16352 module.exports = isVirtualText
16354 function isVirtualText(x) {
16355 return x && x.type === "VirtualText" && x.version === version
16358 },{"./version":198}],197:[function(require,module,exports){
16359 module.exports = isWidget
16361 function isWidget(w) {
16362 return w && w.type === "Widget"
16365 },{}],198:[function(require,module,exports){
16366 module.exports = "2"
16368 },{}],199:[function(require,module,exports){
16369 var version = require("./version")
16370 var isVNode = require("./is-vnode")
16371 var isWidget = require("./is-widget")
16372 var isThunk = require("./is-thunk")
16373 var isVHook = require("./is-vhook")
16375 module.exports = VirtualNode
16377 var noProperties = {}
16378 var noChildren = []
16380 function VirtualNode(tagName, properties, children, key, namespace) {
16381 this.tagName = tagName
16382 this.properties = properties || noProperties
16383 this.children = children || noChildren
16384 this.key = key != null ? String(key) : undefined
16385 this.namespace = (typeof namespace === "string") ? namespace : null
16387 var count = (children && children.length) || 0
16388 var descendants = 0
16389 var hasWidgets = false
16390 var hasThunks = false
16391 var descendantHooks = false
16394 for (var propName in properties) {
16395 if (properties.hasOwnProperty(propName)) {
16396 var property = properties[propName]
16397 if (isVHook(property) && property.unhook) {
16402 hooks[propName] = property
16407 for (var i = 0; i < count; i++) {
16408 var child = children[i]
16409 if (isVNode(child)) {
16410 descendants += child.count || 0
16412 if (!hasWidgets && child.hasWidgets) {
16416 if (!hasThunks && child.hasThunks) {
16420 if (!descendantHooks && (child.hooks || child.descendantHooks)) {
16421 descendantHooks = true
16423 } else if (!hasWidgets && isWidget(child)) {
16424 if (typeof child.destroy === "function") {
16427 } else if (!hasThunks && isThunk(child)) {
16432 this.count = count + descendants
16433 this.hasWidgets = hasWidgets
16434 this.hasThunks = hasThunks
16436 this.descendantHooks = descendantHooks
16439 VirtualNode.prototype.version = version
16440 VirtualNode.prototype.type = "VirtualNode"
16442 },{"./is-thunk":193,"./is-vhook":194,"./is-vnode":195,"./is-widget":197,"./version":198}],200:[function(require,module,exports){
16443 var version = require("./version")
16445 VirtualPatch.NONE = 0
16446 VirtualPatch.VTEXT = 1
16447 VirtualPatch.VNODE = 2
16448 VirtualPatch.WIDGET = 3
16449 VirtualPatch.PROPS = 4
16450 VirtualPatch.ORDER = 5
16451 VirtualPatch.INSERT = 6
16452 VirtualPatch.REMOVE = 7
16453 VirtualPatch.THUNK = 8
16455 module.exports = VirtualPatch
16457 function VirtualPatch(type, vNode, patch) {
16458 this.type = Number(type)
16463 VirtualPatch.prototype.version = version
16464 VirtualPatch.prototype.type = "VirtualPatch"
16466 },{"./version":198}],201:[function(require,module,exports){
16467 var version = require("./version")
16469 module.exports = VirtualText
16471 function VirtualText(text) {
16472 this.text = String(text)
16475 VirtualText.prototype.version = version
16476 VirtualText.prototype.type = "VirtualText"
16478 },{"./version":198}],202:[function(require,module,exports){
16479 var isObject = require("is-object")
16480 var isHook = require("../vnode/is-vhook")
16482 module.exports = diffProps
16484 function diffProps(a, b) {
16487 for (var aKey in a) {
16488 if (!(aKey in b)) {
16490 diff[aKey] = undefined
16493 var aValue = a[aKey]
16494 var bValue = b[aKey]
16496 if (aValue === bValue) {
16498 } else if (isObject(aValue) && isObject(bValue)) {
16499 if (getPrototype(bValue) !== getPrototype(aValue)) {
16501 diff[aKey] = bValue
16502 } else if (isHook(bValue)) {
16504 diff[aKey] = bValue
16506 var objectDiff = diffProps(aValue, bValue)
16509 diff[aKey] = objectDiff
16514 diff[aKey] = bValue
16518 for (var bKey in b) {
16519 if (!(bKey in a)) {
16521 diff[bKey] = b[bKey]
16528 function getPrototype(value) {
16529 if (Object.getPrototypeOf) {
16530 return Object.getPrototypeOf(value)
16531 } else if (value.__proto__) {
16532 return value.__proto__
16533 } else if (value.constructor) {
16534 return value.constructor.prototype
16538 },{"../vnode/is-vhook":194,"is-object":18}],203:[function(require,module,exports){
16539 var isArray = require("x-is-array")
16541 var VPatch = require("../vnode/vpatch")
16542 var isVNode = require("../vnode/is-vnode")
16543 var isVText = require("../vnode/is-vtext")
16544 var isWidget = require("../vnode/is-widget")
16545 var isThunk = require("../vnode/is-thunk")
16546 var handleThunk = require("../vnode/handle-thunk")
16548 var diffProps = require("./diff-props")
16550 module.exports = diff
16552 function diff(a, b) {
16553 var patch = { a: a }
16554 walk(a, b, patch, 0)
16558 function walk(a, b, patch, index) {
16563 var apply = patch[index]
16564 var applyClear = false
16566 if (isThunk(a) || isThunk(b)) {
16567 thunks(a, b, patch, index)
16568 } else if (b == null) {
16570 // If a is a widget we will add a remove patch for it
16571 // Otherwise any child widgets/hooks must be destroyed.
16572 // This prevents adding two remove patches for a widget.
16573 if (!isWidget(a)) {
16574 clearState(a, patch, index)
16575 apply = patch[index]
16578 apply = appendPatch(apply, new VPatch(VPatch.REMOVE, a, b))
16579 } else if (isVNode(b)) {
16581 if (a.tagName === b.tagName &&
16582 a.namespace === b.namespace &&
16584 var propsPatch = diffProps(a.properties, b.properties)
16586 apply = appendPatch(apply,
16587 new VPatch(VPatch.PROPS, a, propsPatch))
16589 apply = diffChildren(a, b, patch, apply, index)
16591 apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))
16595 apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))
16598 } else if (isVText(b)) {
16600 apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))
16602 } else if (a.text !== b.text) {
16603 apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))
16605 } else if (isWidget(b)) {
16606 if (!isWidget(a)) {
16610 apply = appendPatch(apply, new VPatch(VPatch.WIDGET, a, b))
16614 patch[index] = apply
16618 clearState(a, patch, index)
16622 function diffChildren(a, b, patch, apply, index) {
16623 var aChildren = a.children
16624 var orderedSet = reorder(aChildren, b.children)
16625 var bChildren = orderedSet.children
16627 var aLen = aChildren.length
16628 var bLen = bChildren.length
16629 var len = aLen > bLen ? aLen : bLen
16631 for (var i = 0; i < len; i++) {
16632 var leftNode = aChildren[i]
16633 var rightNode = bChildren[i]
16638 // Excess nodes in b need to be added
16639 apply = appendPatch(apply,
16640 new VPatch(VPatch.INSERT, null, rightNode))
16643 walk(leftNode, rightNode, patch, index)
16646 if (isVNode(leftNode) && leftNode.count) {
16647 index += leftNode.count
16651 if (orderedSet.moves) {
16652 // Reorder nodes last
16653 apply = appendPatch(apply, new VPatch(
16663 function clearState(vNode, patch, index) {
16664 // TODO: Make this a single walk, not two
16665 unhook(vNode, patch, index)
16666 destroyWidgets(vNode, patch, index)
16669 // Patch records for all destroyed widgets must be added because we need
16670 // a DOM node reference for the destroy function
16671 function destroyWidgets(vNode, patch, index) {
16672 if (isWidget(vNode)) {
16673 if (typeof vNode.destroy === "function") {
16674 patch[index] = appendPatch(
16676 new VPatch(VPatch.REMOVE, vNode, null)
16679 } else if (isVNode(vNode) && (vNode.hasWidgets || vNode.hasThunks)) {
16680 var children = vNode.children
16681 var len = children.length
16682 for (var i = 0; i < len; i++) {
16683 var child = children[i]
16686 destroyWidgets(child, patch, index)
16688 if (isVNode(child) && child.count) {
16689 index += child.count
16692 } else if (isThunk(vNode)) {
16693 thunks(vNode, null, patch, index)
16697 // Create a sub-patch for thunks
16698 function thunks(a, b, patch, index) {
16699 var nodes = handleThunk(a, b)
16700 var thunkPatch = diff(nodes.a, nodes.b)
16701 if (hasPatches(thunkPatch)) {
16702 patch[index] = new VPatch(VPatch.THUNK, null, thunkPatch)
16706 function hasPatches(patch) {
16707 for (var index in patch) {
16708 if (index !== "a") {
16716 // Execute hooks when two nodes are identical
16717 function unhook(vNode, patch, index) {
16718 if (isVNode(vNode)) {
16720 patch[index] = appendPatch(
16725 undefinedKeys(vNode.hooks)
16730 if (vNode.descendantHooks || vNode.hasThunks) {
16731 var children = vNode.children
16732 var len = children.length
16733 for (var i = 0; i < len; i++) {
16734 var child = children[i]
16737 unhook(child, patch, index)
16739 if (isVNode(child) && child.count) {
16740 index += child.count
16744 } else if (isThunk(vNode)) {
16745 thunks(vNode, null, patch, index)
16749 function undefinedKeys(obj) {
16752 for (var key in obj) {
16753 result[key] = undefined
16759 // List diff, naive left to right reordering
16760 function reorder(aChildren, bChildren) {
16761 // O(M) time, O(M) memory
16762 var bChildIndex = keyIndex(bChildren)
16763 var bKeys = bChildIndex.keys
16764 var bFree = bChildIndex.free
16766 if (bFree.length === bChildren.length) {
16768 children: bChildren,
16773 // O(N) time, O(N) memory
16774 var aChildIndex = keyIndex(aChildren)
16775 var aKeys = aChildIndex.keys
16776 var aFree = aChildIndex.free
16778 if (aFree.length === aChildren.length) {
16780 children: bChildren,
16785 // O(MAX(N, M)) memory
16786 var newChildren = []
16789 var freeCount = bFree.length
16790 var deletedItems = 0
16792 // Iterate through a and match a node in b
16794 for (var i = 0 ; i < aChildren.length; i++) {
16795 var aItem = aChildren[i]
16799 if (bKeys.hasOwnProperty(aItem.key)) {
16800 // Match up the old keys
16801 itemIndex = bKeys[aItem.key]
16802 newChildren.push(bChildren[itemIndex])
16805 // Remove old keyed items
16806 itemIndex = i - deletedItems++
16807 newChildren.push(null)
16810 // Match the item in a with the next free item in b
16811 if (freeIndex < freeCount) {
16812 itemIndex = bFree[freeIndex++]
16813 newChildren.push(bChildren[itemIndex])
16815 // There are no free items in b to match with
16816 // the free items in a, so the extra free nodes
16818 itemIndex = i - deletedItems++
16819 newChildren.push(null)
16824 var lastFreeIndex = freeIndex >= bFree.length ?
16828 // Iterate through b and append any new keys
16830 for (var j = 0; j < bChildren.length; j++) {
16831 var newItem = bChildren[j]
16834 if (!aKeys.hasOwnProperty(newItem.key)) {
16835 // Add any new keyed items
16836 // We are adding new items to the end and then sorting them
16837 // in place. In future we should insert new items in place.
16838 newChildren.push(newItem)
16840 } else if (j >= lastFreeIndex) {
16841 // Add any leftover non-keyed items
16842 newChildren.push(newItem)
16846 var simulate = newChildren.slice()
16847 var simulateIndex = 0
16852 for (var k = 0; k < bChildren.length;) {
16853 var wantedItem = bChildren[k]
16854 simulateItem = simulate[simulateIndex]
16857 while (simulateItem === null && simulate.length) {
16858 removes.push(remove(simulate, simulateIndex, null))
16859 simulateItem = simulate[simulateIndex]
16862 if (!simulateItem || simulateItem.key !== wantedItem.key) {
16863 // if we need a key in this position...
16864 if (wantedItem.key) {
16865 if (simulateItem && simulateItem.key) {
16866 // if an insert doesn't put this key in place, it needs to move
16867 if (bKeys[simulateItem.key] !== k + 1) {
16868 removes.push(remove(simulate, simulateIndex, simulateItem.key))
16869 simulateItem = simulate[simulateIndex]
16870 // if the remove didn't put the wanted item in place, we need to insert it
16871 if (!simulateItem || simulateItem.key !== wantedItem.key) {
16872 inserts.push({key: wantedItem.key, to: k})
16874 // items are matching, so skip ahead
16880 inserts.push({key: wantedItem.key, to: k})
16884 inserts.push({key: wantedItem.key, to: k})
16888 // a key in simulate has no matching wanted key, remove it
16889 else if (simulateItem && simulateItem.key) {
16890 removes.push(remove(simulate, simulateIndex, simulateItem.key))
16899 // remove all the remaining nodes from simulate
16900 while(simulateIndex < simulate.length) {
16901 simulateItem = simulate[simulateIndex]
16902 removes.push(remove(simulate, simulateIndex, simulateItem && simulateItem.key))
16905 // If the only moves we have are deletes then we can just
16906 // let the delete patch remove these items.
16907 if (removes.length === deletedItems && !inserts.length) {
16909 children: newChildren,
16915 children: newChildren,
16923 function remove(arr, index, key) {
16924 arr.splice(index, 1)
16932 function keyIndex(children) {
16935 var length = children.length
16937 for (var i = 0; i < length; i++) {
16938 var child = children[i]
16941 keys[child.key] = i
16948 keys: keys, // A hash of key name to index
16949 free: free // An array of unkeyed item indices
16953 function appendPatch(apply, patch) {
16955 if (isArray(apply)) {
16958 apply = [apply, patch]
16967 },{"../vnode/handle-thunk":192,"../vnode/is-thunk":193,"../vnode/is-vnode":195,"../vnode/is-vtext":196,"../vnode/is-widget":197,"../vnode/vpatch":200,"./diff-props":202,"x-is-array":222}],204:[function(require,module,exports){
16968 /** @license MIT License (c) copyright 2010-2014 original author or authors */
16969 /** @author Brian Cavalier */
16970 /** @author John Hann */
16972 (function(define) { 'use strict';
16973 define(function (require) {
16975 var makePromise = require('./makePromise');
16976 var Scheduler = require('./Scheduler');
16977 var async = require('./env').asap;
16979 return makePromise({
16980 scheduler: new Scheduler(async)
16984 })(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });
16986 },{"./Scheduler":205,"./env":217,"./makePromise":219}],205:[function(require,module,exports){
16987 /** @license MIT License (c) copyright 2010-2014 original author or authors */
16988 /** @author Brian Cavalier */
16989 /** @author John Hann */
16991 (function(define) { 'use strict';
16992 define(function() {
16994 // Credit to Twisol (https://github.com/Twisol) for suggesting
16995 // this type of extensible queue + trampoline approach for next-tick conflation.
16998 * Async task scheduler
16999 * @param {function} async function to schedule a single async function
17002 function Scheduler(async) {
17003 this._async = async;
17004 this._running = false;
17006 this._queue = this;
17007 this._queueLen = 0;
17008 this._afterQueue = {};
17009 this._afterQueueLen = 0;
17012 this.drain = function() {
17019 * @param {{ run:function }} task
17021 Scheduler.prototype.enqueue = function(task) {
17022 this._queue[this._queueLen++] = task;
17027 * Enqueue a task to run after the main task queue
17028 * @param {{ run:function }} task
17030 Scheduler.prototype.afterQueue = function(task) {
17031 this._afterQueue[this._afterQueueLen++] = task;
17035 Scheduler.prototype.run = function() {
17036 if (!this._running) {
17037 this._running = true;
17038 this._async(this.drain);
17043 * Drain the handler queue entirely, and then the after queue
17045 Scheduler.prototype._drain = function() {
17047 for (; i < this._queueLen; ++i) {
17048 this._queue[i].run();
17049 this._queue[i] = void 0;
17052 this._queueLen = 0;
17053 this._running = false;
17055 for (i = 0; i < this._afterQueueLen; ++i) {
17056 this._afterQueue[i].run();
17057 this._afterQueue[i] = void 0;
17060 this._afterQueueLen = 0;
17066 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
17068 },{}],206:[function(require,module,exports){
17069 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17070 /** @author Brian Cavalier */
17071 /** @author John Hann */
17073 (function(define) { 'use strict';
17074 define(function() {
17077 * Custom error type for promises rejected by promise.timeout
17078 * @param {string} message
17081 function TimeoutError (message) {
17083 this.message = message;
17084 this.name = TimeoutError.name;
17085 if (typeof Error.captureStackTrace === 'function') {
17086 Error.captureStackTrace(this, TimeoutError);
17090 TimeoutError.prototype = Object.create(Error.prototype);
17091 TimeoutError.prototype.constructor = TimeoutError;
17093 return TimeoutError;
17095 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
17096 },{}],207:[function(require,module,exports){
17097 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17098 /** @author Brian Cavalier */
17099 /** @author John Hann */
17101 (function(define) { 'use strict';
17102 define(function() {
17104 makeApply.tryCatchResolve = tryCatchResolve;
17108 function makeApply(Promise, call) {
17109 if(arguments.length < 2) {
17110 call = tryCatchResolve;
17115 function apply(f, thisArg, args) {
17116 var p = Promise._defer();
17117 var l = args.length;
17118 var params = new Array(l);
17119 callAndResolve({ f:f, thisArg:thisArg, args:args, params:params, i:l-1, call:call }, p._handler);
17124 function callAndResolve(c, h) {
17126 return call(c.f, c.thisArg, c.params, h);
17129 var handler = Promise._handler(c.args[c.i]);
17130 handler.fold(callAndResolveNext, c, void 0, h);
17133 function callAndResolveNext(c, x, h) {
17136 callAndResolve(c, h);
17140 function tryCatchResolve(f, thisArg, args, resolver) {
17142 resolver.resolve(f.apply(thisArg, args));
17144 resolver.reject(e);
17149 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
17153 },{}],208:[function(require,module,exports){
17154 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17155 /** @author Brian Cavalier */
17156 /** @author John Hann */
17158 (function(define) { 'use strict';
17159 define(function(require) {
17161 var state = require('../state');
17162 var applier = require('../apply');
17164 return function array(Promise) {
17166 var applyFold = applier(Promise);
17167 var toPromise = Promise.resolve;
17168 var all = Promise.all;
17170 var ar = Array.prototype.reduce;
17171 var arr = Array.prototype.reduceRight;
17172 var slice = Array.prototype.slice;
17174 // Additional array combinators
17177 Promise.some = some;
17178 Promise.settle = settle;
17181 Promise.filter = filter;
17182 Promise.reduce = reduce;
17183 Promise.reduceRight = reduceRight;
17186 * When this promise fulfills with an array, do
17187 * onFulfilled.apply(void 0, array)
17188 * @param {function} onFulfilled function to apply
17189 * @returns {Promise} promise for the result of applying onFulfilled
17191 Promise.prototype.spread = function(onFulfilled) {
17192 return this.then(all).then(function(array) {
17193 return onFulfilled.apply(this, array);
17200 * One-winner competitive race.
17201 * Return a promise that will fulfill when one of the promises
17202 * in the input array fulfills, or will reject when all promises
17204 * @param {array} promises
17205 * @returns {Promise} promise for the first fulfilled value
17207 function any(promises) {
17208 var p = Promise._defer();
17209 var resolver = p._handler;
17210 var l = promises.length>>>0;
17215 for (var h, x, i = 0; i < l; ++i) {
17217 if(x === void 0 && !(i in promises)) {
17222 h = Promise._handler(x);
17223 if(h.state() > 0) {
17224 resolver.become(h);
17225 Promise._visitRemaining(promises, i, h);
17228 h.visit(resolver, handleFulfill, handleReject);
17232 if(pending === 0) {
17233 resolver.reject(new RangeError('any(): array must not be empty'));
17238 function handleFulfill(x) {
17239 /*jshint validthis:true*/
17241 this.resolve(x); // this === resolver
17244 function handleReject(e) {
17245 /*jshint validthis:true*/
17246 if(this.resolved) { // this === resolver
17251 if(--pending === 0) {
17252 this.reject(errors);
17258 * N-winner competitive race
17259 * Return a promise that will fulfill when n input promises have
17260 * fulfilled, or will reject when it becomes impossible for n
17261 * input promises to fulfill (ie when promises.length - n + 1
17263 * @param {array} promises
17264 * @param {number} n
17265 * @returns {Promise} promise for the earliest n fulfillment values
17269 function some(promises, n) {
17270 /*jshint maxcomplexity:7*/
17271 var p = Promise._defer();
17272 var resolver = p._handler;
17277 var l = promises.length>>>0;
17280 var x, i; // reused in both for() loops
17282 // First pass: count actual array items
17283 for(i=0; i<l; ++i) {
17285 if(x === void 0 && !(i in promises)) {
17291 // Compute actual goals
17292 n = Math.max(n, 0);
17293 nReject = (nFulfill - n + 1);
17294 nFulfill = Math.min(n, nFulfill);
17297 resolver.reject(new RangeError('some(): array must contain at least '
17298 + n + ' item(s), but had ' + nFulfill));
17299 } else if(nFulfill === 0) {
17300 resolver.resolve(results);
17303 // Second pass: observe each array item, make progress toward goals
17304 for(i=0; i<l; ++i) {
17306 if(x === void 0 && !(i in promises)) {
17310 Promise._handler(x).visit(resolver, fulfill, reject, resolver.notify);
17315 function fulfill(x) {
17316 /*jshint validthis:true*/
17317 if(this.resolved) { // this === resolver
17322 if(--nFulfill === 0) {
17324 this.resolve(results);
17328 function reject(e) {
17329 /*jshint validthis:true*/
17330 if(this.resolved) { // this === resolver
17335 if(--nReject === 0) {
17337 this.reject(errors);
17343 * Apply f to the value of each promise in a list of promises
17344 * and return a new list containing the results.
17345 * @param {array} promises
17346 * @param {function(x:*, index:Number):*} f mapping function
17347 * @returns {Promise}
17349 function map(promises, f) {
17350 return Promise._traverse(f, promises);
17354 * Filter the provided array of promises using the provided predicate. Input may
17355 * contain promises and values
17356 * @param {Array} promises array of promises and values
17357 * @param {function(x:*, index:Number):boolean} predicate filtering predicate.
17358 * Must return truthy (or promise for truthy) for items to retain.
17359 * @returns {Promise} promise that will fulfill with an array containing all items
17360 * for which predicate returned truthy.
17362 function filter(promises, predicate) {
17363 var a = slice.call(promises);
17364 return Promise._traverse(predicate, a).then(function(keep) {
17365 return filterSync(a, keep);
17369 function filterSync(promises, keep) {
17370 // Safe because we know all promises have fulfilled if we've made it this far
17371 var l = keep.length;
17372 var filtered = new Array(l);
17373 for(var i=0, j=0; i<l; ++i) {
17375 filtered[j++] = Promise._handler(promises[i]).value;
17378 filtered.length = j;
17384 * Return a promise that will always fulfill with an array containing
17385 * the outcome states of all input promises. The returned promise
17386 * will never reject.
17387 * @param {Array} promises
17388 * @returns {Promise} promise for array of settled state descriptors
17390 function settle(promises) {
17391 return all(promises.map(settleOne));
17394 function settleOne(p) {
17395 // Optimize the case where we get an already-resolved when.js promise
17396 // by extracting its state:
17398 if (p instanceof Promise) {
17399 // This is our own Promise type and we can reach its handler internals:
17400 handler = p._handler.join();
17402 if((handler && handler.state() === 0) || !handler) {
17403 // Either still pending, or not a Promise at all:
17404 return toPromise(p).then(state.fulfilled, state.rejected);
17407 // The promise is our own, but it is already resolved. Take a shortcut.
17408 // Since we're not actually handling the resolution, we need to disable
17409 // rejection reporting.
17410 handler._unreport();
17411 return state.inspect(handler);
17415 * Traditional reduce function, similar to `Array.prototype.reduce()`, but
17416 * input may contain promises and/or values, and reduceFunc
17417 * may return either a value or a promise, *and* initialValue may
17418 * be a promise for the starting value.
17419 * @param {Array|Promise} promises array or promise for an array of anything,
17420 * may contain a mix of promises and values.
17421 * @param {function(accumulated:*, x:*, index:Number):*} f reduce function
17422 * @returns {Promise} that will resolve to the final reduced value
17424 function reduce(promises, f /*, initialValue */) {
17425 return arguments.length > 2 ? ar.call(promises, liftCombine(f), arguments[2])
17426 : ar.call(promises, liftCombine(f));
17430 * Traditional reduce function, similar to `Array.prototype.reduceRight()`, but
17431 * input may contain promises and/or values, and reduceFunc
17432 * may return either a value or a promise, *and* initialValue may
17433 * be a promise for the starting value.
17434 * @param {Array|Promise} promises array or promise for an array of anything,
17435 * may contain a mix of promises and values.
17436 * @param {function(accumulated:*, x:*, index:Number):*} f reduce function
17437 * @returns {Promise} that will resolve to the final reduced value
17439 function reduceRight(promises, f /*, initialValue */) {
17440 return arguments.length > 2 ? arr.call(promises, liftCombine(f), arguments[2])
17441 : arr.call(promises, liftCombine(f));
17444 function liftCombine(f) {
17445 return function(z, x, i) {
17446 return applyFold(f, void 0, [z,x,i]);
17452 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
17454 },{"../apply":207,"../state":220}],209:[function(require,module,exports){
17455 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17456 /** @author Brian Cavalier */
17457 /** @author John Hann */
17459 (function(define) { 'use strict';
17460 define(function() {
17462 return function flow(Promise) {
17464 var resolve = Promise.resolve;
17465 var reject = Promise.reject;
17466 var origCatch = Promise.prototype['catch'];
17469 * Handle the ultimate fulfillment value or rejection reason, and assume
17470 * responsibility for all errors. If an error propagates out of result
17471 * or handleFatalError, it will be rethrown to the host, resulting in a
17472 * loud stack track on most platforms and a crash on some.
17473 * @param {function?} onResult
17474 * @param {function?} onError
17475 * @returns {undefined}
17477 Promise.prototype.done = function(onResult, onError) {
17478 this._handler.visit(this._handler.receiver, onResult, onError);
17482 * Add Error-type and predicate matching to catch. Examples:
17483 * promise.catch(TypeError, handleTypeError)
17484 * .catch(predicate, handleMatchedErrors)
17485 * .catch(handleRemainingErrors)
17486 * @param onRejected
17489 Promise.prototype['catch'] = Promise.prototype.otherwise = function(onRejected) {
17490 if (arguments.length < 2) {
17491 return origCatch.call(this, onRejected);
17494 if(typeof onRejected !== 'function') {
17495 return this.ensure(rejectInvalidPredicate);
17498 return origCatch.call(this, createCatchFilter(arguments[1], onRejected));
17502 * Wraps the provided catch handler, so that it will only be called
17503 * if the predicate evaluates truthy
17504 * @param {?function} handler
17505 * @param {function} predicate
17506 * @returns {function} conditional catch handler
17508 function createCatchFilter(handler, predicate) {
17509 return function(e) {
17510 return evaluatePredicate(e, predicate)
17511 ? handler.call(this, e)
17517 * Ensures that onFulfilledOrRejected will be called regardless of whether
17518 * this promise is fulfilled or rejected. onFulfilledOrRejected WILL NOT
17519 * receive the promises' value or reason. Any returned value will be disregarded.
17520 * onFulfilledOrRejected may throw or return a rejected promise to signal
17521 * an additional error.
17522 * @param {function} handler handler to be called regardless of
17523 * fulfillment or rejection
17524 * @returns {Promise}
17526 Promise.prototype['finally'] = Promise.prototype.ensure = function(handler) {
17527 if(typeof handler !== 'function') {
17531 return this.then(function(x) {
17532 return runSideEffect(handler, this, identity, x);
17534 return runSideEffect(handler, this, reject, e);
17538 function runSideEffect (handler, thisArg, propagate, value) {
17539 var result = handler.call(thisArg);
17540 return maybeThenable(result)
17541 ? propagateValue(result, propagate, value)
17542 : propagate(value);
17545 function propagateValue (result, propagate, x) {
17546 return resolve(result).then(function () {
17547 return propagate(x);
17552 * Recover from a failure by returning a defaultValue. If defaultValue
17553 * is a promise, it's fulfillment value will be used. If defaultValue is
17554 * a promise that rejects, the returned promise will reject with the
17556 * @param {*} defaultValue
17557 * @returns {Promise} new promise
17559 Promise.prototype['else'] = Promise.prototype.orElse = function(defaultValue) {
17560 return this.then(void 0, function() {
17561 return defaultValue;
17566 * Shortcut for .then(function() { return value; })
17568 * @return {Promise} a promise that:
17569 * - is fulfilled if value is not a promise, or
17570 * - if value is a promise, will fulfill with its value, or reject
17573 Promise.prototype['yield'] = function(value) {
17574 return this.then(function() {
17580 * Runs a side effect when this promise fulfills, without changing the
17581 * fulfillment value.
17582 * @param {function} onFulfilledSideEffect
17583 * @returns {Promise}
17585 Promise.prototype.tap = function(onFulfilledSideEffect) {
17586 return this.then(onFulfilledSideEffect)['yield'](this);
17592 function rejectInvalidPredicate() {
17593 throw new TypeError('catch predicate must be a function');
17596 function evaluatePredicate(e, predicate) {
17597 return isError(predicate) ? e instanceof predicate : predicate(e);
17600 function isError(predicate) {
17601 return predicate === Error
17602 || (predicate != null && predicate.prototype instanceof Error);
17605 function maybeThenable(x) {
17606 return (typeof x === 'object' || typeof x === 'function') && x !== null;
17609 function identity(x) {
17614 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
17616 },{}],210:[function(require,module,exports){
17617 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17618 /** @author Brian Cavalier */
17619 /** @author John Hann */
17620 /** @author Jeff Escalante */
17622 (function(define) { 'use strict';
17623 define(function() {
17625 return function fold(Promise) {
17627 Promise.prototype.fold = function(f, z) {
17628 var promise = this._beget();
17630 this._handler.fold(function(z, x, to) {
17631 Promise._handler(z).fold(function(x, z, to) {
17632 to.resolve(f.call(this, z, x));
17634 }, z, promise._handler.receiver, promise._handler);
17643 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
17645 },{}],211:[function(require,module,exports){
17646 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17647 /** @author Brian Cavalier */
17648 /** @author John Hann */
17650 (function(define) { 'use strict';
17651 define(function(require) {
17653 var inspect = require('../state').inspect;
17655 return function inspection(Promise) {
17657 Promise.prototype.inspect = function() {
17658 return inspect(Promise._handler(this));
17665 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
17667 },{"../state":220}],212:[function(require,module,exports){
17668 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17669 /** @author Brian Cavalier */
17670 /** @author John Hann */
17672 (function(define) { 'use strict';
17673 define(function() {
17675 return function generate(Promise) {
17677 var resolve = Promise.resolve;
17679 Promise.iterate = iterate;
17680 Promise.unfold = unfold;
17685 * @deprecated Use github.com/cujojs/most streams and most.iterate
17686 * Generate a (potentially infinite) stream of promised values:
17687 * x, f(x), f(f(x)), etc. until condition(x) returns true
17688 * @param {function} f function to generate a new x from the previous x
17689 * @param {function} condition function that, given the current x, returns
17690 * truthy when the iterate should stop
17691 * @param {function} handler function to handle the value produced by f
17692 * @param {*|Promise} x starting value, may be a promise
17693 * @return {Promise} the result of the last call to f before
17694 * condition returns true
17696 function iterate(f, condition, handler, x) {
17697 return unfold(function(x) {
17699 }, condition, handler, x);
17703 * @deprecated Use github.com/cujojs/most streams and most.unfold
17704 * Generate a (potentially infinite) stream of promised values
17705 * by applying handler(generator(seed)) iteratively until
17706 * condition(seed) returns true.
17707 * @param {function} unspool function that generates a [value, newSeed]
17709 * @param {function} condition function that, given the current seed, returns
17710 * truthy when the unfold should stop
17711 * @param {function} handler function to handle the value produced by unspool
17712 * @param x {*|Promise} starting value, may be a promise
17713 * @return {Promise} the result of the last value produced by unspool before
17714 * condition returns true
17716 function unfold(unspool, condition, handler, x) {
17717 return resolve(x).then(function(seed) {
17718 return resolve(condition(seed)).then(function(done) {
17719 return done ? seed : resolve(unspool(seed)).spread(next);
17723 function next(item, newSeed) {
17724 return resolve(handler(item)).then(function() {
17725 return unfold(unspool, condition, handler, newSeed);
17732 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
17734 },{}],213:[function(require,module,exports){
17735 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17736 /** @author Brian Cavalier */
17737 /** @author John Hann */
17739 (function(define) { 'use strict';
17740 define(function() {
17742 return function progress(Promise) {
17746 * Register a progress handler for this promise
17747 * @param {function} onProgress
17748 * @returns {Promise}
17750 Promise.prototype.progress = function(onProgress) {
17751 return this.then(void 0, void 0, onProgress);
17758 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
17760 },{}],214:[function(require,module,exports){
17761 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17762 /** @author Brian Cavalier */
17763 /** @author John Hann */
17765 (function(define) { 'use strict';
17766 define(function(require) {
17768 var env = require('../env');
17769 var TimeoutError = require('../TimeoutError');
17771 function setTimeout(f, ms, x, y) {
17772 return env.setTimer(function() {
17777 return function timed(Promise) {
17779 * Return a new promise whose fulfillment value is revealed only
17780 * after ms milliseconds
17781 * @param {number} ms milliseconds
17782 * @returns {Promise}
17784 Promise.prototype.delay = function(ms) {
17785 var p = this._beget();
17786 this._handler.fold(handleDelay, ms, void 0, p._handler);
17790 function handleDelay(ms, x, h) {
17791 setTimeout(resolveDelay, ms, x, h);
17794 function resolveDelay(x, h) {
17799 * Return a new promise that rejects after ms milliseconds unless
17800 * this promise fulfills earlier, in which case the returned promise
17801 * fulfills with the same value.
17802 * @param {number} ms milliseconds
17803 * @param {Error|*=} reason optional rejection reason to use, defaults
17804 * to a TimeoutError if not provided
17805 * @returns {Promise}
17807 Promise.prototype.timeout = function(ms, reason) {
17808 var p = this._beget();
17809 var h = p._handler;
17811 var t = setTimeout(onTimeout, ms, reason, p._handler);
17813 this._handler.visit(h,
17814 function onFulfill(x) {
17816 this.resolve(x); // this = h
17818 function onReject(x) {
17820 this.reject(x); // this = h
17827 function onTimeout(reason, h, ms) {
17828 var e = typeof reason === 'undefined'
17829 ? new TimeoutError('timed out after ' + ms + 'ms')
17838 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
17840 },{"../TimeoutError":206,"../env":217}],215:[function(require,module,exports){
17841 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17842 /** @author Brian Cavalier */
17843 /** @author John Hann */
17845 (function(define) { 'use strict';
17846 define(function(require) {
17848 var setTimer = require('../env').setTimer;
17849 var format = require('../format');
17851 return function unhandledRejection(Promise) {
17853 var logError = noop;
17854 var logInfo = noop;
17857 if(typeof console !== 'undefined') {
17858 // Alias console to prevent things like uglify's drop_console option from
17859 // removing console.log/error. Unhandled rejections fall into the same
17860 // category as uncaught exceptions, and build tools shouldn't silence them.
17861 localConsole = console;
17862 logError = typeof localConsole.error !== 'undefined'
17863 ? function (e) { localConsole.error(e); }
17864 : function (e) { localConsole.log(e); };
17866 logInfo = typeof localConsole.info !== 'undefined'
17867 ? function (e) { localConsole.info(e); }
17868 : function (e) { localConsole.log(e); };
17871 Promise.onPotentiallyUnhandledRejection = function(rejection) {
17872 enqueue(report, rejection);
17875 Promise.onPotentiallyUnhandledRejectionHandled = function(rejection) {
17876 enqueue(unreport, rejection);
17879 Promise.onFatalRejection = function(rejection) {
17880 enqueue(throwit, rejection.value);
17885 var running = null;
17887 function report(r) {
17890 logError('Potentially unhandled rejection [' + r.id + '] ' + format.formatError(r.value));
17894 function unreport(r) {
17895 var i = reported.indexOf(r);
17897 reported.splice(i, 1);
17898 logInfo('Handled previous rejection [' + r.id + '] ' + format.formatObject(r.value));
17902 function enqueue(f, x) {
17904 if(running === null) {
17905 running = setTimer(flush, 0);
17911 while(tasks.length > 0) {
17912 tasks.shift()(tasks.shift());
17919 function throwit(e) {
17926 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
17928 },{"../env":217,"../format":218}],216:[function(require,module,exports){
17929 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17930 /** @author Brian Cavalier */
17931 /** @author John Hann */
17933 (function(define) { 'use strict';
17934 define(function() {
17936 return function addWith(Promise) {
17938 * Returns a promise whose handlers will be called with `this` set to
17939 * the supplied receiver. Subsequent promises derived from the
17940 * returned promise will also have their handlers called with receiver
17941 * as `this`. Calling `with` with undefined or no arguments will return
17942 * a promise whose handlers will again be called in the usual Promises/A+
17943 * way (no `this`) thus safely undoing any previous `with` in the
17946 * WARNING: Promises returned from `with`/`withThis` are NOT Promises/A+
17947 * compliant, specifically violating 2.2.5 (http://promisesaplus.com/#point-41)
17949 * @param {object} receiver `this` value for all handlers attached to
17950 * the returned promise.
17951 * @returns {Promise}
17953 Promise.prototype['with'] = Promise.prototype.withThis = function(receiver) {
17954 var p = this._beget();
17955 var child = p._handler;
17956 child.receiver = receiver;
17957 this._handler.chain(child, receiver);
17965 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
17968 },{}],217:[function(require,module,exports){
17969 (function (process){
17970 /** @license MIT License (c) copyright 2010-2014 original author or authors */
17971 /** @author Brian Cavalier */
17972 /** @author John Hann */
17974 /*global process,document,setTimeout,clearTimeout,MutationObserver,WebKitMutationObserver*/
17975 (function(define) { 'use strict';
17976 define(function(require) {
17977 /*jshint maxcomplexity:6*/
17979 // Sniff "best" async scheduling option
17980 // Prefer process.nextTick or MutationObserver, then check for
17981 // setTimeout, and finally vertx, since its the only env that doesn't
17985 var capturedSetTimeout = typeof setTimeout !== 'undefined' && setTimeout;
17988 var setTimer = function(f, ms) { return setTimeout(f, ms); };
17989 var clearTimer = function(t) { return clearTimeout(t); };
17990 var asap = function (f) { return capturedSetTimeout(f, 0); };
17992 // Detect specific env
17993 if (isNode()) { // Node
17994 asap = function (f) { return process.nextTick(f); };
17996 } else if (MutationObs = hasMutationObserver()) { // Modern browser
17997 asap = initMutationObserver(MutationObs);
17999 } else if (!capturedSetTimeout) { // vert.x
18000 var vertxRequire = require;
18001 var vertx = vertxRequire('vertx');
18002 setTimer = function (f, ms) { return vertx.setTimer(ms, f); };
18003 clearTimer = vertx.cancelTimer;
18004 asap = vertx.runOnLoop || vertx.runOnContext;
18008 setTimer: setTimer,
18009 clearTimer: clearTimer,
18013 function isNode () {
18014 return typeof process !== 'undefined' &&
18015 Object.prototype.toString.call(process) === '[object process]';
18018 function hasMutationObserver () {
18019 return (typeof MutationObserver !== 'undefined' && MutationObserver) ||
18020 (typeof WebKitMutationObserver !== 'undefined' && WebKitMutationObserver);
18023 function initMutationObserver(MutationObserver) {
18025 var node = document.createTextNode('');
18026 var o = new MutationObserver(run);
18027 o.observe(node, { characterData: true });
18031 scheduled = void 0;
18036 return function (f) {
18038 node.data = (i ^= 1);
18042 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
18044 }).call(this,require('_process'))
18046 },{"_process":4}],218:[function(require,module,exports){
18047 /** @license MIT License (c) copyright 2010-2014 original author or authors */
18048 /** @author Brian Cavalier */
18049 /** @author John Hann */
18051 (function(define) { 'use strict';
18052 define(function() {
18055 formatError: formatError,
18056 formatObject: formatObject,
18057 tryStringify: tryStringify
18061 * Format an error into a string. If e is an Error and has a stack property,
18062 * it's returned. Otherwise, e is formatted using formatObject, with a
18063 * warning added about e not being a proper Error.
18065 * @returns {String} formatted string, suitable for output to developers
18067 function formatError(e) {
18068 var s = typeof e === 'object' && e !== null && (e.stack || e.message) ? e.stack || e.message : formatObject(e);
18069 return e instanceof Error ? s : s + ' (WARNING: non-Error used)';
18073 * Format an object, detecting "plain" objects and running them through
18074 * JSON.stringify if possible.
18075 * @param {Object} o
18076 * @returns {string}
18078 function formatObject(o) {
18080 if(s === '[object Object]' && typeof JSON !== 'undefined') {
18081 s = tryStringify(o, s);
18087 * Try to return the result of JSON.stringify(x). If that fails, return
18090 * @param {*} defaultValue
18091 * @returns {String|*} JSON.stringify(x) or defaultValue
18093 function tryStringify(x, defaultValue) {
18095 return JSON.stringify(x);
18097 return defaultValue;
18102 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
18104 },{}],219:[function(require,module,exports){
18105 (function (process){
18106 /** @license MIT License (c) copyright 2010-2014 original author or authors */
18107 /** @author Brian Cavalier */
18108 /** @author John Hann */
18110 (function(define) { 'use strict';
18111 define(function() {
18113 return function makePromise(environment) {
18115 var tasks = environment.scheduler;
18116 var emitRejection = initEmitRejection();
18118 var objectCreate = Object.create ||
18120 function Child() {}
18121 Child.prototype = proto;
18122 return new Child();
18126 * Create a promise whose fate is determined by resolver
18128 * @returns {Promise} promise
18131 function Promise(resolver, handler) {
18132 this._handler = resolver === Handler ? handler : init(resolver);
18136 * Run the supplied resolver
18138 * @returns {Pending}
18140 function init(resolver) {
18141 var handler = new Pending();
18144 resolver(promiseResolve, promiseReject, promiseNotify);
18152 * Transition from pre-resolution state to post-resolution state, notifying
18153 * all listeners of the ultimate fulfillment or rejection
18154 * @param {*} x resolution value
18156 function promiseResolve (x) {
18157 handler.resolve(x);
18160 * Reject this promise with reason, which will be used verbatim
18161 * @param {Error|*} reason rejection reason, strongly suggested
18162 * to be an Error type
18164 function promiseReject (reason) {
18165 handler.reject(reason);
18170 * Issue a progress event, notifying all progress listeners
18171 * @param {*} x progress event payload to pass to all listeners
18173 function promiseNotify (x) {
18180 Promise.resolve = resolve;
18181 Promise.reject = reject;
18182 Promise.never = never;
18184 Promise._defer = defer;
18185 Promise._handler = getHandler;
18188 * Returns a trusted promise. If x is already a trusted promise, it is
18189 * returned, otherwise returns a new trusted Promise which follows x.
18191 * @return {Promise} promise
18193 function resolve(x) {
18194 return isPromise(x) ? x
18195 : new Promise(Handler, new Async(getHandler(x)));
18199 * Return a reject promise with x as its reason (x is used verbatim)
18201 * @returns {Promise} rejected promise
18203 function reject(x) {
18204 return new Promise(Handler, new Async(new Rejected(x)));
18208 * Return a promise that remains pending forever
18209 * @returns {Promise} forever-pending promise.
18212 return foreverPendingPromise; // Should be frozen
18216 * Creates an internal {promise, resolver} pair
18218 * @returns {Promise}
18221 return new Promise(Handler, new Pending());
18224 // Transformation and flow control
18227 * Transform this promise's fulfillment value, returning a new Promise
18228 * for the transformed result. If the promise cannot be fulfilled, onRejected
18229 * is called with the reason. onProgress *may* be called with updates toward
18230 * this promise's fulfillment.
18231 * @param {function=} onFulfilled fulfillment handler
18232 * @param {function=} onRejected rejection handler
18233 * @param {function=} onProgress @deprecated progress handler
18234 * @return {Promise} new promise
18236 Promise.prototype.then = function(onFulfilled, onRejected, onProgress) {
18237 var parent = this._handler;
18238 var state = parent.join().state();
18240 if ((typeof onFulfilled !== 'function' && state > 0) ||
18241 (typeof onRejected !== 'function' && state < 0)) {
18242 // Short circuit: value will not change, simply share handler
18243 return new this.constructor(Handler, parent);
18246 var p = this._beget();
18247 var child = p._handler;
18249 parent.chain(child, parent.receiver, onFulfilled, onRejected, onProgress);
18255 * If this promise cannot be fulfilled due to an error, call onRejected to
18256 * handle the error. Shortcut for .then(undefined, onRejected)
18257 * @param {function?} onRejected
18258 * @return {Promise}
18260 Promise.prototype['catch'] = function(onRejected) {
18261 return this.then(void 0, onRejected);
18265 * Creates a new, pending promise of the same type as this promise
18267 * @returns {Promise}
18269 Promise.prototype._beget = function() {
18270 return begetFrom(this._handler, this.constructor);
18273 function begetFrom(parent, Promise) {
18274 var child = new Pending(parent.receiver, parent.join().context);
18275 return new Promise(Handler, child);
18278 // Array combinators
18281 Promise.race = race;
18282 Promise._traverse = traverse;
18285 * Return a promise that will fulfill when all promises in the
18286 * input array have fulfilled, or will reject when one of the
18287 * promises rejects.
18288 * @param {array} promises array of promises
18289 * @returns {Promise} promise for array of fulfillment values
18291 function all(promises) {
18292 return traverseWith(snd, null, promises);
18296 * Array<Promise<X>> -> Promise<Array<f(X)>>
18298 * @param {function} f function to apply to each promise's value
18299 * @param {Array} promises array of promises
18300 * @returns {Promise} promise for transformed values
18302 function traverse(f, promises) {
18303 return traverseWith(tryCatch2, f, promises);
18306 function traverseWith(tryMap, f, promises) {
18307 var handler = typeof f === 'function' ? mapAt : settleAt;
18309 var resolver = new Pending();
18310 var pending = promises.length >>> 0;
18311 var results = new Array(pending);
18313 for (var i = 0, x; i < promises.length && !resolver.resolved; ++i) {
18316 if (x === void 0 && !(i in promises)) {
18321 traverseAt(promises, handler, i, x, resolver);
18324 if(pending === 0) {
18325 resolver.become(new Fulfilled(results));
18328 return new Promise(Handler, resolver);
18330 function mapAt(i, x, resolver) {
18331 if(!resolver.resolved) {
18332 traverseAt(promises, settleAt, i, tryMap(f, x, i), resolver);
18336 function settleAt(i, x, resolver) {
18338 if(--pending === 0) {
18339 resolver.become(new Fulfilled(results));
18344 function traverseAt(promises, handler, i, x, resolver) {
18345 if (maybeThenable(x)) {
18346 var h = getHandlerMaybeThenable(x);
18350 h.fold(handler, i, void 0, resolver);
18351 } else if (s > 0) {
18352 handler(i, h.value, resolver);
18354 resolver.become(h);
18355 visitRemaining(promises, i+1, h);
18358 handler(i, x, resolver);
18362 Promise._visitRemaining = visitRemaining;
18363 function visitRemaining(promises, start, handler) {
18364 for(var i=start; i<promises.length; ++i) {
18365 markAsHandled(getHandler(promises[i]), handler);
18369 function markAsHandled(h, handler) {
18370 if(h === handler) {
18376 h.visit(h, void 0, h._unreport);
18383 * Fulfill-reject competitive race. Return a promise that will settle
18384 * to the same state as the earliest input promise to settle.
18386 * WARNING: The ES6 Promise spec requires that race()ing an empty array
18387 * must return a promise that is pending forever. This implementation
18388 * returns a singleton forever-pending promise, the same singleton that is
18389 * returned by Promise.never(), thus can be checked with ===
18391 * @param {array} promises array of promises to race
18392 * @returns {Promise} if input is non-empty, a promise that will settle
18393 * to the same outcome as the earliest input promise to settle. if empty
18394 * is empty, returns a promise that will never settle.
18396 function race(promises) {
18397 if(typeof promises !== 'object' || promises === null) {
18398 return reject(new TypeError('non-iterable passed to race()'));
18401 // Sigh, race([]) is untestable unless we return *something*
18402 // that is recognizable without calling .then() on it.
18403 return promises.length === 0 ? never()
18404 : promises.length === 1 ? resolve(promises[0])
18405 : runRace(promises);
18408 function runRace(promises) {
18409 var resolver = new Pending();
18411 for(i=0; i<promises.length; ++i) {
18413 if (x === void 0 && !(i in promises)) {
18418 if(h.state() !== 0) {
18419 resolver.become(h);
18420 visitRemaining(promises, i+1, h);
18423 h.visit(resolver, resolver.resolve, resolver.reject);
18426 return new Promise(Handler, resolver);
18429 // Promise internals
18430 // Below this, everything is @private
18433 * Get an appropriate handler for x, without checking for cycles
18435 * @returns {object} handler
18437 function getHandler(x) {
18439 return x._handler.join();
18441 return maybeThenable(x) ? getHandlerUntrusted(x) : new Fulfilled(x);
18445 * Get a handler for thenable x.
18446 * NOTE: You must only call this if maybeThenable(x) == true
18447 * @param {object|function|Promise} x
18448 * @returns {object} handler
18450 function getHandlerMaybeThenable(x) {
18451 return isPromise(x) ? x._handler.join() : getHandlerUntrusted(x);
18455 * Get a handler for potentially untrusted thenable x
18457 * @returns {object} handler
18459 function getHandlerUntrusted(x) {
18461 var untrustedThen = x.then;
18462 return typeof untrustedThen === 'function'
18463 ? new Thenable(untrustedThen, x)
18464 : new Fulfilled(x);
18466 return new Rejected(e);
18471 * Handler for a promise that is pending forever
18474 function Handler() {}
18476 Handler.prototype.when
18477 = Handler.prototype.become
18478 = Handler.prototype.notify // deprecated
18479 = Handler.prototype.fail
18480 = Handler.prototype._unreport
18481 = Handler.prototype._report
18484 Handler.prototype._state = 0;
18486 Handler.prototype.state = function() {
18487 return this._state;
18491 * Recursively collapse handler chain to find the handler
18492 * nearest to the fully resolved value.
18493 * @returns {object} handler nearest the fully resolved value
18495 Handler.prototype.join = function() {
18497 while(h.handler !== void 0) {
18503 Handler.prototype.chain = function(to, receiver, fulfilled, rejected, progress) {
18506 receiver: receiver,
18507 fulfilled: fulfilled,
18508 rejected: rejected,
18513 Handler.prototype.visit = function(receiver, fulfilled, rejected, progress) {
18514 this.chain(failIfRejected, receiver, fulfilled, rejected, progress);
18517 Handler.prototype.fold = function(f, z, c, to) {
18518 this.when(new Fold(f, z, c, to));
18522 * Handler that invokes fail() on any handler it becomes
18525 function FailIfRejected() {}
18527 inherit(Handler, FailIfRejected);
18529 FailIfRejected.prototype.become = function(h) {
18533 var failIfRejected = new FailIfRejected();
18536 * Handler that manages a queue of consumers waiting on a pending promise
18539 function Pending(receiver, inheritedContext) {
18540 Promise.createContext(this, inheritedContext);
18542 this.consumers = void 0;
18543 this.receiver = receiver;
18544 this.handler = void 0;
18545 this.resolved = false;
18548 inherit(Handler, Pending);
18550 Pending.prototype._state = 0;
18552 Pending.prototype.resolve = function(x) {
18553 this.become(getHandler(x));
18556 Pending.prototype.reject = function(x) {
18557 if(this.resolved) {
18561 this.become(new Rejected(x));
18564 Pending.prototype.join = function() {
18565 if (!this.resolved) {
18571 while (h.handler !== void 0) {
18574 return this.handler = cycle();
18581 Pending.prototype.run = function() {
18582 var q = this.consumers;
18583 var handler = this.handler;
18584 this.handler = this.handler.join();
18585 this.consumers = void 0;
18587 for (var i = 0; i < q.length; ++i) {
18588 handler.when(q[i]);
18592 Pending.prototype.become = function(handler) {
18593 if(this.resolved) {
18597 this.resolved = true;
18598 this.handler = handler;
18599 if(this.consumers !== void 0) {
18600 tasks.enqueue(this);
18603 if(this.context !== void 0) {
18604 handler._report(this.context);
18608 Pending.prototype.when = function(continuation) {
18609 if(this.resolved) {
18610 tasks.enqueue(new ContinuationTask(continuation, this.handler));
18612 if(this.consumers === void 0) {
18613 this.consumers = [continuation];
18615 this.consumers.push(continuation);
18623 Pending.prototype.notify = function(x) {
18624 if(!this.resolved) {
18625 tasks.enqueue(new ProgressTask(x, this));
18629 Pending.prototype.fail = function(context) {
18630 var c = typeof context === 'undefined' ? this.context : context;
18631 this.resolved && this.handler.join().fail(c);
18634 Pending.prototype._report = function(context) {
18635 this.resolved && this.handler.join()._report(context);
18638 Pending.prototype._unreport = function() {
18639 this.resolved && this.handler.join()._unreport();
18643 * Wrap another handler and force it into a future stack
18644 * @param {object} handler
18647 function Async(handler) {
18648 this.handler = handler;
18651 inherit(Handler, Async);
18653 Async.prototype.when = function(continuation) {
18654 tasks.enqueue(new ContinuationTask(continuation, this));
18657 Async.prototype._report = function(context) {
18658 this.join()._report(context);
18661 Async.prototype._unreport = function() {
18662 this.join()._unreport();
18666 * Handler that wraps an untrusted thenable and assimilates it in a future stack
18667 * @param {function} then
18668 * @param {{then: function}} thenable
18671 function Thenable(then, thenable) {
18672 Pending.call(this);
18673 tasks.enqueue(new AssimilateTask(then, thenable, this));
18676 inherit(Pending, Thenable);
18679 * Handler for a fulfilled promise
18680 * @param {*} x fulfillment value
18683 function Fulfilled(x) {
18684 Promise.createContext(this);
18688 inherit(Handler, Fulfilled);
18690 Fulfilled.prototype._state = 1;
18692 Fulfilled.prototype.fold = function(f, z, c, to) {
18693 runContinuation3(f, z, this, c, to);
18696 Fulfilled.prototype.when = function(cont) {
18697 runContinuation1(cont.fulfilled, this, cont.receiver, cont.resolver);
18703 * Handler for a rejected promise
18704 * @param {*} x rejection reason
18707 function Rejected(x) {
18708 Promise.createContext(this);
18710 this.id = ++errorId;
18712 this.handled = false;
18713 this.reported = false;
18718 inherit(Handler, Rejected);
18720 Rejected.prototype._state = -1;
18722 Rejected.prototype.fold = function(f, z, c, to) {
18726 Rejected.prototype.when = function(cont) {
18727 if(typeof cont.rejected === 'function') {
18730 runContinuation1(cont.rejected, this, cont.receiver, cont.resolver);
18733 Rejected.prototype._report = function(context) {
18734 tasks.afterQueue(new ReportTask(this, context));
18737 Rejected.prototype._unreport = function() {
18741 this.handled = true;
18742 tasks.afterQueue(new UnreportTask(this));
18745 Rejected.prototype.fail = function(context) {
18746 this.reported = true;
18747 emitRejection('unhandledRejection', this);
18748 Promise.onFatalRejection(this, context === void 0 ? this.context : context);
18751 function ReportTask(rejection, context) {
18752 this.rejection = rejection;
18753 this.context = context;
18756 ReportTask.prototype.run = function() {
18757 if(!this.rejection.handled && !this.rejection.reported) {
18758 this.rejection.reported = true;
18759 emitRejection('unhandledRejection', this.rejection) ||
18760 Promise.onPotentiallyUnhandledRejection(this.rejection, this.context);
18764 function UnreportTask(rejection) {
18765 this.rejection = rejection;
18768 UnreportTask.prototype.run = function() {
18769 if(this.rejection.reported) {
18770 emitRejection('rejectionHandled', this.rejection) ||
18771 Promise.onPotentiallyUnhandledRejectionHandled(this.rejection);
18775 // Unhandled rejection hooks
18776 // By default, everything is a noop
18778 Promise.createContext
18779 = Promise.enterContext
18780 = Promise.exitContext
18781 = Promise.onPotentiallyUnhandledRejection
18782 = Promise.onPotentiallyUnhandledRejectionHandled
18783 = Promise.onFatalRejection
18786 // Errors and singletons
18788 var foreverPendingHandler = new Handler();
18789 var foreverPendingPromise = new Promise(Handler, foreverPendingHandler);
18792 return new Rejected(new TypeError('Promise cycle'));
18798 * Run a single consumer
18801 function ContinuationTask(continuation, handler) {
18802 this.continuation = continuation;
18803 this.handler = handler;
18806 ContinuationTask.prototype.run = function() {
18807 this.handler.join().when(this.continuation);
18811 * Run a queue of progress handlers
18814 function ProgressTask(value, handler) {
18815 this.handler = handler;
18816 this.value = value;
18819 ProgressTask.prototype.run = function() {
18820 var q = this.handler.consumers;
18825 for (var c, i = 0; i < q.length; ++i) {
18827 runNotify(c.progress, this.value, this.handler, c.receiver, c.resolver);
18832 * Assimilate a thenable, sending it's value to resolver
18833 * @param {function} then
18834 * @param {object|function} thenable
18835 * @param {object} resolver
18838 function AssimilateTask(then, thenable, resolver) {
18840 this.thenable = thenable;
18841 this.resolver = resolver;
18844 AssimilateTask.prototype.run = function() {
18845 var h = this.resolver;
18846 tryAssimilate(this._then, this.thenable, _resolve, _reject, _notify);
18848 function _resolve(x) { h.resolve(x); }
18849 function _reject(x) { h.reject(x); }
18850 function _notify(x) { h.notify(x); }
18853 function tryAssimilate(then, thenable, resolve, reject, notify) {
18855 then.call(thenable, resolve, reject, notify);
18862 * Fold a handler value with z
18865 function Fold(f, z, c, to) {
18866 this.f = f; this.z = z; this.c = c; this.to = to;
18867 this.resolver = failIfRejected;
18868 this.receiver = this;
18871 Fold.prototype.fulfilled = function(x) {
18872 this.f.call(this.c, this.z, x, this.to);
18875 Fold.prototype.rejected = function(x) {
18879 Fold.prototype.progress = function(x) {
18887 * @returns {boolean} true iff x is a trusted Promise
18889 function isPromise(x) {
18890 return x instanceof Promise;
18894 * Test just enough to rule out primitives, in order to take faster
18895 * paths in some code
18897 * @returns {boolean} false iff x is guaranteed *not* to be a thenable
18899 function maybeThenable(x) {
18900 return (typeof x === 'object' || typeof x === 'function') && x !== null;
18903 function runContinuation1(f, h, receiver, next) {
18904 if(typeof f !== 'function') {
18905 return next.become(h);
18908 Promise.enterContext(h);
18909 tryCatchReject(f, h.value, receiver, next);
18910 Promise.exitContext();
18913 function runContinuation3(f, x, h, receiver, next) {
18914 if(typeof f !== 'function') {
18915 return next.become(h);
18918 Promise.enterContext(h);
18919 tryCatchReject3(f, x, h.value, receiver, next);
18920 Promise.exitContext();
18926 function runNotify(f, x, h, receiver, next) {
18927 if(typeof f !== 'function') {
18928 return next.notify(x);
18931 Promise.enterContext(h);
18932 tryCatchReturn(f, x, receiver, next);
18933 Promise.exitContext();
18936 function tryCatch2(f, a, b) {
18945 * Return f.call(thisArg, x), or if it throws return a rejected promise for
18946 * the thrown exception
18948 function tryCatchReject(f, x, thisArg, next) {
18950 next.become(getHandler(f.call(thisArg, x)));
18952 next.become(new Rejected(e));
18957 * Same as above, but includes the extra argument parameter.
18959 function tryCatchReject3(f, x, y, thisArg, next) {
18961 f.call(thisArg, x, y, next);
18963 next.become(new Rejected(e));
18969 * Return f.call(thisArg, x), or if it throws, *return* the exception
18971 function tryCatchReturn(f, x, thisArg, next) {
18973 next.notify(f.call(thisArg, x));
18979 function inherit(Parent, Child) {
18980 Child.prototype = objectCreate(Parent.prototype);
18981 Child.prototype.constructor = Child;
18984 function snd(x, y) {
18990 function hasCustomEvent() {
18991 if(typeof CustomEvent === 'function') {
18993 var ev = new CustomEvent('unhandledRejection');
18994 return ev instanceof CustomEvent;
18995 } catch (ignoredException) {}
19000 function hasInternetExplorerCustomEvent() {
19001 if(typeof document !== 'undefined' && typeof document.createEvent === 'function') {
19003 // Try to create one event to make sure it's supported
19004 var ev = document.createEvent('CustomEvent');
19005 ev.initCustomEvent('eventType', false, true, {});
19007 } catch (ignoredException) {}
19012 function initEmitRejection() {
19013 /*global process, self, CustomEvent*/
19014 if(typeof process !== 'undefined' && process !== null
19015 && typeof process.emit === 'function') {
19016 // Returning falsy here means to call the default
19017 // onPotentiallyUnhandledRejection API. This is safe even in
19018 // browserify since process.emit always returns falsy in browserify:
19019 // https://github.com/defunctzombie/node-process/blob/master/browser.js#L40-L46
19020 return function(type, rejection) {
19021 return type === 'unhandledRejection'
19022 ? process.emit(type, rejection.value, rejection)
19023 : process.emit(type, rejection);
19025 } else if(typeof self !== 'undefined' && hasCustomEvent()) {
19026 return (function (self, CustomEvent) {
19027 return function (type, rejection) {
19028 var ev = new CustomEvent(type, {
19030 reason: rejection.value,
19037 return !self.dispatchEvent(ev);
19039 }(self, CustomEvent));
19040 } else if(typeof self !== 'undefined' && hasInternetExplorerCustomEvent()) {
19041 return (function(self, document) {
19042 return function(type, rejection) {
19043 var ev = document.createEvent('CustomEvent');
19044 ev.initCustomEvent(type, false, true, {
19045 reason: rejection.value,
19049 return !self.dispatchEvent(ev);
19051 }(self, document));
19060 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
19062 }).call(this,require('_process'))
19064 },{"_process":4}],220:[function(require,module,exports){
19065 /** @license MIT License (c) copyright 2010-2014 original author or authors */
19066 /** @author Brian Cavalier */
19067 /** @author John Hann */
19069 (function(define) { 'use strict';
19070 define(function() {
19073 pending: toPendingState,
19074 fulfilled: toFulfilledState,
19075 rejected: toRejectedState,
19079 function toPendingState() {
19080 return { state: 'pending' };
19083 function toRejectedState(e) {
19084 return { state: 'rejected', reason: e };
19087 function toFulfilledState(x) {
19088 return { state: 'fulfilled', value: x };
19091 function inspect(handler) {
19092 var state = handler.state();
19093 return state === 0 ? toPendingState()
19094 : state > 0 ? toFulfilledState(handler.value)
19095 : toRejectedState(handler.value);
19099 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
19101 },{}],221:[function(require,module,exports){
19102 /** @license MIT License (c) copyright 2010-2014 original author or authors */
19105 * Promises/A+ and when() implementation
19106 * when is part of the cujoJS family of libraries (http://cujojs.com/)
19107 * @author Brian Cavalier
19108 * @author John Hann
19110 (function(define) { 'use strict';
19111 define(function (require) {
19113 var timed = require('./lib/decorators/timed');
19114 var array = require('./lib/decorators/array');
19115 var flow = require('./lib/decorators/flow');
19116 var fold = require('./lib/decorators/fold');
19117 var inspect = require('./lib/decorators/inspect');
19118 var generate = require('./lib/decorators/iterate');
19119 var progress = require('./lib/decorators/progress');
19120 var withThis = require('./lib/decorators/with');
19121 var unhandledRejection = require('./lib/decorators/unhandledRejection');
19122 var TimeoutError = require('./lib/TimeoutError');
19124 var Promise = [array, flow, fold, generate, progress,
19125 inspect, withThis, timed, unhandledRejection]
19126 .reduce(function(Promise, feature) {
19127 return feature(Promise);
19128 }, require('./lib/Promise'));
19130 var apply = require('./lib/apply')(Promise);
19134 when.promise = promise; // Create a pending promise
19135 when.resolve = Promise.resolve; // Create a resolved promise
19136 when.reject = Promise.reject; // Create a rejected promise
19138 when.lift = lift; // lift a function to return promises
19139 when['try'] = attempt; // call a function and return a promise
19140 when.attempt = attempt; // alias for when.try
19142 when.iterate = Promise.iterate; // DEPRECATED (use cujojs/most streams) Generate a stream of promises
19143 when.unfold = Promise.unfold; // DEPRECATED (use cujojs/most streams) Generate a stream of promises
19145 when.join = join; // Join 2 or more promises
19147 when.all = all; // Resolve a list of promises
19148 when.settle = settle; // Settle a list of promises
19150 when.any = lift(Promise.any); // One-winner race
19151 when.some = lift(Promise.some); // Multi-winner race
19152 when.race = lift(Promise.race); // First-to-settle race
19154 when.map = map; // Array.map() for promises
19155 when.filter = filter; // Array.filter() for promises
19156 when.reduce = lift(Promise.reduce); // Array.reduce() for promises
19157 when.reduceRight = lift(Promise.reduceRight); // Array.reduceRight() for promises
19159 when.isPromiseLike = isPromiseLike; // Is something promise-like, aka thenable
19161 when.Promise = Promise; // Promise constructor
19162 when.defer = defer; // Create a {promise, resolve, reject} tuple
19166 when.TimeoutError = TimeoutError;
19169 * Get a trusted promise for x, or by transforming x with onFulfilled
19172 * @param {function?} onFulfilled callback to be called when x is
19173 * successfully fulfilled. If promiseOrValue is an immediate value, callback
19174 * will be invoked immediately.
19175 * @param {function?} onRejected callback to be called when x is
19177 * @param {function?} onProgress callback to be called when progress updates
19178 * are issued for x. @deprecated
19179 * @returns {Promise} a new promise that will fulfill with the return
19180 * value of callback or errback or the completion value of promiseOrValue if
19181 * callback and/or errback is not supplied.
19183 function when(x, onFulfilled, onRejected, onProgress) {
19184 var p = Promise.resolve(x);
19185 if (arguments.length < 2) {
19189 return p.then(onFulfilled, onRejected, onProgress);
19193 * Creates a new promise whose fate is determined by resolver.
19194 * @param {function} resolver function(resolve, reject, notify)
19195 * @returns {Promise} promise whose fate is determine by resolver
19197 function promise(resolver) {
19198 return new Promise(resolver);
19202 * Lift the supplied function, creating a version of f that returns
19203 * promises, and accepts promises as arguments.
19204 * @param {function} f
19205 * @returns {Function} version of f that returns promises
19208 return function() {
19209 for(var i=0, l=arguments.length, a=new Array(l); i<l; ++i) {
19210 a[i] = arguments[i];
19212 return apply(f, this, a);
19217 * Call f in a future turn, with the supplied args, and return a promise
19219 * @param {function} f
19220 * @returns {Promise}
19222 function attempt(f /*, args... */) {
19223 /*jshint validthis:true */
19224 for(var i=0, l=arguments.length-1, a=new Array(l); i<l; ++i) {
19225 a[i] = arguments[i+1];
19227 return apply(f, this, a);
19231 * Creates a {promise, resolver} pair, either or both of which
19232 * may be given out safely to consumers.
19233 * @return {{promise: Promise, resolve: function, reject: function, notify: function}}
19236 return new Deferred();
19239 function Deferred() {
19240 var p = Promise._defer();
19242 function resolve(x) { p._handler.resolve(x); }
19243 function reject(x) { p._handler.reject(x); }
19244 function notify(x) { p._handler.notify(x); }
19247 this.resolve = resolve;
19248 this.reject = reject;
19249 this.notify = notify;
19250 this.resolver = { resolve: resolve, reject: reject, notify: notify };
19254 * Determines if x is promise-like, i.e. a thenable object
19255 * NOTE: Will return true for *any thenable object*, and isn't truly
19256 * safe, since it may attempt to access the `then` property of x (i.e.
19257 * clever/malicious getters may do weird things)
19258 * @param {*} x anything
19259 * @returns {boolean} true if x is promise-like
19261 function isPromiseLike(x) {
19262 return x && typeof x.then === 'function';
19266 * Return a promise that will resolve only once all the supplied arguments
19267 * have resolved. The resolution value of the returned promise will be an array
19268 * containing the resolution values of each of the arguments.
19269 * @param {...*} arguments may be a mix of promises and values
19270 * @returns {Promise}
19272 function join(/* ...promises */) {
19273 return Promise.all(arguments);
19277 * Return a promise that will fulfill once all input promises have
19278 * fulfilled, or reject when any one input promise rejects.
19279 * @param {array|Promise} promises array (or promise for an array) of promises
19280 * @returns {Promise}
19282 function all(promises) {
19283 return when(promises, Promise.all);
19287 * Return a promise that will always fulfill with an array containing
19288 * the outcome states of all input promises. The returned promise
19289 * will only reject if `promises` itself is a rejected promise.
19290 * @param {array|Promise} promises array (or promise for an array) of promises
19291 * @returns {Promise} promise for array of settled state descriptors
19293 function settle(promises) {
19294 return when(promises, Promise.settle);
19298 * Promise-aware array map function, similar to `Array.prototype.map()`,
19299 * but input array may contain promises or values.
19300 * @param {Array|Promise} promises array of anything, may contain promises and values
19301 * @param {function(x:*, index:Number):*} mapFunc map function which may
19302 * return a promise or value
19303 * @returns {Promise} promise that will fulfill with an array of mapped values
19304 * or reject if any input promise rejects.
19306 function map(promises, mapFunc) {
19307 return when(promises, function(promises) {
19308 return Promise.map(promises, mapFunc);
19313 * Filter the provided array of promises using the provided predicate. Input may
19314 * contain promises and values
19315 * @param {Array|Promise} promises array of promises and values
19316 * @param {function(x:*, index:Number):boolean} predicate filtering predicate.
19317 * Must return truthy (or promise for truthy) for items to retain.
19318 * @returns {Promise} promise that will fulfill with an array containing all items
19319 * for which predicate returned truthy.
19321 function filter(promises, predicate) {
19322 return when(promises, function(promises) {
19323 return Promise.filter(promises, predicate);
19329 })(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });
19331 },{"./lib/Promise":204,"./lib/TimeoutError":206,"./lib/apply":207,"./lib/decorators/array":208,"./lib/decorators/flow":209,"./lib/decorators/fold":210,"./lib/decorators/inspect":211,"./lib/decorators/iterate":212,"./lib/decorators/progress":213,"./lib/decorators/timed":214,"./lib/decorators/unhandledRejection":215,"./lib/decorators/with":216}],222:[function(require,module,exports){
19332 var nativeIsArray = Array.isArray
19333 var toString = Object.prototype.toString
19335 module.exports = nativeIsArray || isArray
19337 function isArray(obj) {
19338 return toString.call(obj) === "[object Array]"
19341 },{}],223:[function(require,module,exports){
19343 var APIv3_1 = require("./api/APIv3");
19344 exports.APIv3 = APIv3_1.APIv3;
19345 var ModelCreator_1 = require("./api/ModelCreator");
19346 exports.ModelCreator = ModelCreator_1.ModelCreator;
19348 },{"./api/APIv3":235,"./api/ModelCreator":236}],224:[function(require,module,exports){
19350 var Component_1 = require("./component/Component");
19351 exports.Component = Component_1.Component;
19352 var ComponentService_1 = require("./component/ComponentService");
19353 exports.ComponentService = ComponentService_1.ComponentService;
19354 var AttributionComponent_1 = require("./component/AttributionComponent");
19355 exports.AttributionComponent = AttributionComponent_1.AttributionComponent;
19356 var BackgroundComponent_1 = require("./component/BackgroundComponent");
19357 exports.BackgroundComponent = BackgroundComponent_1.BackgroundComponent;
19358 var BearingComponent_1 = require("./component/BearingComponent");
19359 exports.BearingComponent = BearingComponent_1.BearingComponent;
19360 var CacheComponent_1 = require("./component/CacheComponent");
19361 exports.CacheComponent = CacheComponent_1.CacheComponent;
19362 var CoverComponent_1 = require("./component/CoverComponent");
19363 exports.CoverComponent = CoverComponent_1.CoverComponent;
19364 var DebugComponent_1 = require("./component/DebugComponent");
19365 exports.DebugComponent = DebugComponent_1.DebugComponent;
19366 var DirectionComponent_1 = require("./component/direction/DirectionComponent");
19367 exports.DirectionComponent = DirectionComponent_1.DirectionComponent;
19368 var DirectionDOMCalculator_1 = require("./component/direction/DirectionDOMCalculator");
19369 exports.DirectionDOMCalculator = DirectionDOMCalculator_1.DirectionDOMCalculator;
19370 var DirectionDOMRenderer_1 = require("./component/direction/DirectionDOMRenderer");
19371 exports.DirectionDOMRenderer = DirectionDOMRenderer_1.DirectionDOMRenderer;
19372 var ImageComponent_1 = require("./component/ImageComponent");
19373 exports.ImageComponent = ImageComponent_1.ImageComponent;
19374 var KeyboardComponent_1 = require("./component/KeyboardComponent");
19375 exports.KeyboardComponent = KeyboardComponent_1.KeyboardComponent;
19376 var LoadingComponent_1 = require("./component/LoadingComponent");
19377 exports.LoadingComponent = LoadingComponent_1.LoadingComponent;
19378 var Marker_1 = require("./component/marker/marker/Marker");
19379 exports.Marker = Marker_1.Marker;
19380 var MarkerComponent_1 = require("./component/marker/MarkerComponent");
19381 exports.MarkerComponent = MarkerComponent_1.MarkerComponent;
19382 var MarkerScene_1 = require("./component/marker/MarkerScene");
19383 exports.MarkerScene = MarkerScene_1.MarkerScene;
19384 var MarkerSet_1 = require("./component/marker/MarkerSet");
19385 exports.MarkerSet = MarkerSet_1.MarkerSet;
19386 var MouseComponent_1 = require("./component/mouse/MouseComponent");
19387 exports.MouseComponent = MouseComponent_1.MouseComponent;
19388 var MouseHandlerBase_1 = require("./component/mouse/MouseHandlerBase");
19389 exports.MouseHandlerBase = MouseHandlerBase_1.MouseHandlerBase;
19390 var DragPanHandler_1 = require("./component/mouse/DragPanHandler");
19391 exports.DragPanHandler = DragPanHandler_1.DragPanHandler;
19392 var DoubleClickZoomHandler_1 = require("./component/mouse/DoubleClickZoomHandler");
19393 exports.DoubleClickZoomHandler = DoubleClickZoomHandler_1.DoubleClickZoomHandler;
19394 var ScrollZoomHandler_1 = require("./component/mouse/ScrollZoomHandler");
19395 exports.ScrollZoomHandler = ScrollZoomHandler_1.ScrollZoomHandler;
19396 var TouchZoomHandler_1 = require("./component/mouse/TouchZoomHandler");
19397 exports.TouchZoomHandler = TouchZoomHandler_1.TouchZoomHandler;
19398 var NavigationComponent_1 = require("./component/NavigationComponent");
19399 exports.NavigationComponent = NavigationComponent_1.NavigationComponent;
19400 var RouteComponent_1 = require("./component/RouteComponent");
19401 exports.RouteComponent = RouteComponent_1.RouteComponent;
19402 var SequenceComponent_1 = require("./component/sequence/SequenceComponent");
19403 exports.SequenceComponent = SequenceComponent_1.SequenceComponent;
19404 var SequenceDOMRenderer_1 = require("./component/sequence/SequenceDOMRenderer");
19405 exports.SequenceDOMRenderer = SequenceDOMRenderer_1.SequenceDOMRenderer;
19406 var SequenceDOMInteraction_1 = require("./component/sequence/SequenceDOMInteraction");
19407 exports.SequenceDOMInteraction = SequenceDOMInteraction_1.SequenceDOMInteraction;
19408 var ImagePlaneComponent_1 = require("./component/imageplane/ImagePlaneComponent");
19409 exports.ImagePlaneComponent = ImagePlaneComponent_1.ImagePlaneComponent;
19410 var ImagePlaneFactory_1 = require("./component/imageplane/ImagePlaneFactory");
19411 exports.ImagePlaneFactory = ImagePlaneFactory_1.ImagePlaneFactory;
19412 var ImagePlaneGLRenderer_1 = require("./component/imageplane/ImagePlaneGLRenderer");
19413 exports.ImagePlaneGLRenderer = ImagePlaneGLRenderer_1.ImagePlaneGLRenderer;
19414 var ImagePlaneScene_1 = require("./component/imageplane/ImagePlaneScene");
19415 exports.ImagePlaneScene = ImagePlaneScene_1.ImagePlaneScene;
19416 var ImagePlaneShaders_1 = require("./component/imageplane/ImagePlaneShaders");
19417 exports.ImagePlaneShaders = ImagePlaneShaders_1.ImagePlaneShaders;
19418 var SimpleMarker_1 = require("./component/marker/marker/SimpleMarker");
19419 exports.SimpleMarker = SimpleMarker_1.SimpleMarker;
19420 var CircleMarker_1 = require("./component/marker/marker/CircleMarker");
19421 exports.CircleMarker = CircleMarker_1.CircleMarker;
19422 var SliderComponent_1 = require("./component/imageplane/SliderComponent");
19423 exports.SliderComponent = SliderComponent_1.SliderComponent;
19424 var StatsComponent_1 = require("./component/StatsComponent");
19425 exports.StatsComponent = StatsComponent_1.StatsComponent;
19426 var Tag_1 = require("./component/tag/tag/Tag");
19427 exports.Tag = Tag_1.Tag;
19428 var Alignment_1 = require("./component/tag/tag/Alignment");
19429 exports.Alignment = Alignment_1.Alignment;
19430 var OutlineTag_1 = require("./component/tag/tag/OutlineTag");
19431 exports.OutlineTag = OutlineTag_1.OutlineTag;
19432 var RenderTag_1 = require("./component/tag/tag/RenderTag");
19433 exports.RenderTag = RenderTag_1.RenderTag;
19434 var OutlineRenderTag_1 = require("./component/tag/tag/OutlineRenderTag");
19435 exports.OutlineRenderTag = OutlineRenderTag_1.OutlineRenderTag;
19436 var OutlineCreateTag_1 = require("./component/tag/tag/OutlineCreateTag");
19437 exports.OutlineCreateTag = OutlineCreateTag_1.OutlineCreateTag;
19438 var SpotTag_1 = require("./component/tag/tag/SpotTag");
19439 exports.SpotTag = SpotTag_1.SpotTag;
19440 var SpotRenderTag_1 = require("./component/tag/tag/SpotRenderTag");
19441 exports.SpotRenderTag = SpotRenderTag_1.SpotRenderTag;
19442 var TagComponent_1 = require("./component/tag/TagComponent");
19443 exports.TagComponent = TagComponent_1.TagComponent;
19444 var TagCreator_1 = require("./component/tag/TagCreator");
19445 exports.TagCreator = TagCreator_1.TagCreator;
19446 var TagDOMRenderer_1 = require("./component/tag/TagDOMRenderer");
19447 exports.TagDOMRenderer = TagDOMRenderer_1.TagDOMRenderer;
19448 var TagGLRenderer_1 = require("./component/tag/TagGLRenderer");
19449 exports.TagGLRenderer = TagGLRenderer_1.TagGLRenderer;
19450 var TagOperation_1 = require("./component/tag/TagOperation");
19451 exports.TagOperation = TagOperation_1.TagOperation;
19452 var TagSet_1 = require("./component/tag/TagSet");
19453 exports.TagSet = TagSet_1.TagSet;
19454 var Geometry_1 = require("./component/tag/geometry/Geometry");
19455 exports.Geometry = Geometry_1.Geometry;
19456 var VertexGeometry_1 = require("./component/tag/geometry/VertexGeometry");
19457 exports.VertexGeometry = VertexGeometry_1.VertexGeometry;
19458 var RectGeometry_1 = require("./component/tag/geometry/RectGeometry");
19459 exports.RectGeometry = RectGeometry_1.RectGeometry;
19460 var PointGeometry_1 = require("./component/tag/geometry/PointGeometry");
19461 exports.PointGeometry = PointGeometry_1.PointGeometry;
19462 var PolygonGeometry_1 = require("./component/tag/geometry/PolygonGeometry");
19463 exports.PolygonGeometry = PolygonGeometry_1.PolygonGeometry;
19464 var GeometryTagError_1 = require("./component/tag/error/GeometryTagError");
19465 exports.GeometryTagError = GeometryTagError_1.GeometryTagError;
19467 },{"./component/AttributionComponent":237,"./component/BackgroundComponent":238,"./component/BearingComponent":239,"./component/CacheComponent":240,"./component/Component":241,"./component/ComponentService":242,"./component/CoverComponent":243,"./component/DebugComponent":244,"./component/ImageComponent":245,"./component/KeyboardComponent":246,"./component/LoadingComponent":247,"./component/NavigationComponent":248,"./component/RouteComponent":249,"./component/StatsComponent":250,"./component/direction/DirectionComponent":251,"./component/direction/DirectionDOMCalculator":252,"./component/direction/DirectionDOMRenderer":253,"./component/imageplane/ImagePlaneComponent":254,"./component/imageplane/ImagePlaneFactory":255,"./component/imageplane/ImagePlaneGLRenderer":256,"./component/imageplane/ImagePlaneScene":257,"./component/imageplane/ImagePlaneShaders":258,"./component/imageplane/SliderComponent":259,"./component/marker/MarkerComponent":261,"./component/marker/MarkerScene":262,"./component/marker/MarkerSet":263,"./component/marker/marker/CircleMarker":264,"./component/marker/marker/Marker":265,"./component/marker/marker/SimpleMarker":266,"./component/mouse/DoubleClickZoomHandler":267,"./component/mouse/DragPanHandler":268,"./component/mouse/MouseComponent":269,"./component/mouse/MouseHandlerBase":270,"./component/mouse/ScrollZoomHandler":271,"./component/mouse/TouchZoomHandler":272,"./component/sequence/SequenceComponent":273,"./component/sequence/SequenceDOMInteraction":274,"./component/sequence/SequenceDOMRenderer":275,"./component/tag/TagComponent":277,"./component/tag/TagCreator":278,"./component/tag/TagDOMRenderer":279,"./component/tag/TagGLRenderer":280,"./component/tag/TagOperation":281,"./component/tag/TagSet":282,"./component/tag/error/GeometryTagError":283,"./component/tag/geometry/Geometry":284,"./component/tag/geometry/PointGeometry":285,"./component/tag/geometry/PolygonGeometry":286,"./component/tag/geometry/RectGeometry":287,"./component/tag/geometry/VertexGeometry":288,"./component/tag/tag/Alignment":289,"./component/tag/tag/OutlineCreateTag":290,"./component/tag/tag/OutlineRenderTag":291,"./component/tag/tag/OutlineTag":292,"./component/tag/tag/RenderTag":293,"./component/tag/tag/SpotRenderTag":294,"./component/tag/tag/SpotTag":295,"./component/tag/tag/Tag":296}],225:[function(require,module,exports){
19469 var EdgeDirection_1 = require("./graph/edge/EdgeDirection");
19470 exports.EdgeDirection = EdgeDirection_1.EdgeDirection;
19471 var EdgeCalculatorSettings_1 = require("./graph/edge/EdgeCalculatorSettings");
19472 exports.EdgeCalculatorSettings = EdgeCalculatorSettings_1.EdgeCalculatorSettings;
19473 var EdgeCalculatorDirections_1 = require("./graph/edge/EdgeCalculatorDirections");
19474 exports.EdgeCalculatorDirections = EdgeCalculatorDirections_1.EdgeCalculatorDirections;
19475 var EdgeCalculatorCoefficients_1 = require("./graph/edge/EdgeCalculatorCoefficients");
19476 exports.EdgeCalculatorCoefficients = EdgeCalculatorCoefficients_1.EdgeCalculatorCoefficients;
19477 var EdgeCalculator_1 = require("./graph/edge/EdgeCalculator");
19478 exports.EdgeCalculator = EdgeCalculator_1.EdgeCalculator;
19480 },{"./graph/edge/EdgeCalculator":314,"./graph/edge/EdgeCalculatorCoefficients":315,"./graph/edge/EdgeCalculatorDirections":316,"./graph/edge/EdgeCalculatorSettings":317,"./graph/edge/EdgeDirection":318}],226:[function(require,module,exports){
19482 var ArgumentMapillaryError_1 = require("./error/ArgumentMapillaryError");
19483 exports.ArgumentMapillaryError = ArgumentMapillaryError_1.ArgumentMapillaryError;
19484 var GraphMapillaryError_1 = require("./error/GraphMapillaryError");
19485 exports.GraphMapillaryError = GraphMapillaryError_1.GraphMapillaryError;
19486 var MapillaryError_1 = require("./error/MapillaryError");
19487 exports.MapillaryError = MapillaryError_1.MapillaryError;
19489 },{"./error/ArgumentMapillaryError":297,"./error/GraphMapillaryError":298,"./error/MapillaryError":299}],227:[function(require,module,exports){
19491 var Camera_1 = require("./geo/Camera");
19492 exports.Camera = Camera_1.Camera;
19493 var GeoCoords_1 = require("./geo/GeoCoords");
19494 exports.GeoCoords = GeoCoords_1.GeoCoords;
19495 var ViewportCoords_1 = require("./geo/ViewportCoords");
19496 exports.ViewportCoords = ViewportCoords_1.ViewportCoords;
19497 var Spatial_1 = require("./geo/Spatial");
19498 exports.Spatial = Spatial_1.Spatial;
19499 var Transform_1 = require("./geo/Transform");
19500 exports.Transform = Transform_1.Transform;
19502 },{"./geo/Camera":300,"./geo/GeoCoords":301,"./geo/Spatial":302,"./geo/Transform":303,"./geo/ViewportCoords":304}],228:[function(require,module,exports){
19504 var FilterCreator_1 = require("./graph/FilterCreator");
19505 exports.FilterCreator = FilterCreator_1.FilterCreator;
19506 var Graph_1 = require("./graph/Graph");
19507 exports.Graph = Graph_1.Graph;
19508 var GraphCalculator_1 = require("./graph/GraphCalculator");
19509 exports.GraphCalculator = GraphCalculator_1.GraphCalculator;
19510 var GraphService_1 = require("./graph/GraphService");
19511 exports.GraphService = GraphService_1.GraphService;
19512 var ImageLoadingService_1 = require("./graph/ImageLoadingService");
19513 exports.ImageLoadingService = ImageLoadingService_1.ImageLoadingService;
19514 var MeshReader_1 = require("./graph/MeshReader");
19515 exports.MeshReader = MeshReader_1.MeshReader;
19516 var Node_1 = require("./graph/Node");
19517 exports.Node = Node_1.Node;
19518 var NodeCache_1 = require("./graph/NodeCache");
19519 exports.NodeCache = NodeCache_1.NodeCache;
19520 var Sequence_1 = require("./graph/Sequence");
19521 exports.Sequence = Sequence_1.Sequence;
19523 },{"./graph/FilterCreator":305,"./graph/Graph":306,"./graph/GraphCalculator":307,"./graph/GraphService":308,"./graph/ImageLoadingService":309,"./graph/MeshReader":310,"./graph/Node":311,"./graph/NodeCache":312,"./graph/Sequence":313}],229:[function(require,module,exports){
19525 * MapillaryJS is a WebGL JavaScript library for exploring street level imagery
19529 var Edge_1 = require("./Edge");
19530 exports.EdgeDirection = Edge_1.EdgeDirection;
19531 var Render_1 = require("./Render");
19532 exports.RenderMode = Render_1.RenderMode;
19533 var Viewer_1 = require("./Viewer");
19534 exports.ImageSize = Viewer_1.ImageSize;
19535 exports.Viewer = Viewer_1.Viewer;
19536 var TagComponent = require("./component/tag/Tag");
19537 exports.TagComponent = TagComponent;
19538 var MarkerComponent = require("./component/marker/Marker");
19539 exports.MarkerComponent = MarkerComponent;
19541 },{"./Edge":225,"./Render":230,"./Viewer":234,"./component/marker/Marker":260,"./component/tag/Tag":276}],230:[function(require,module,exports){
19543 var DOMRenderer_1 = require("./render/DOMRenderer");
19544 exports.DOMRenderer = DOMRenderer_1.DOMRenderer;
19545 var GLRenderer_1 = require("./render/GLRenderer");
19546 exports.GLRenderer = GLRenderer_1.GLRenderer;
19547 var GLRenderStage_1 = require("./render/GLRenderStage");
19548 exports.GLRenderStage = GLRenderStage_1.GLRenderStage;
19549 var RenderCamera_1 = require("./render/RenderCamera");
19550 exports.RenderCamera = RenderCamera_1.RenderCamera;
19551 var RenderMode_1 = require("./render/RenderMode");
19552 exports.RenderMode = RenderMode_1.RenderMode;
19553 var RenderService_1 = require("./render/RenderService");
19554 exports.RenderService = RenderService_1.RenderService;
19556 },{"./render/DOMRenderer":319,"./render/GLRenderStage":320,"./render/GLRenderer":321,"./render/RenderCamera":322,"./render/RenderMode":323,"./render/RenderService":324}],231:[function(require,module,exports){
19558 var State_1 = require("./state/State");
19559 exports.State = State_1.State;
19560 var StateBase_1 = require("./state/states/StateBase");
19561 exports.StateBase = StateBase_1.StateBase;
19562 var StateContext_1 = require("./state/StateContext");
19563 exports.StateContext = StateContext_1.StateContext;
19564 var StateService_1 = require("./state/StateService");
19565 exports.StateService = StateService_1.StateService;
19566 var TraversingState_1 = require("./state/states/TraversingState");
19567 exports.TraversingState = TraversingState_1.TraversingState;
19568 var WaitingState_1 = require("./state/states/WaitingState");
19569 exports.WaitingState = WaitingState_1.WaitingState;
19571 },{"./state/State":325,"./state/StateContext":326,"./state/StateService":327,"./state/states/StateBase":328,"./state/states/TraversingState":329,"./state/states/WaitingState":330}],232:[function(require,module,exports){
19573 var ImageTileLoader_1 = require("./tiles/ImageTileLoader");
19574 exports.ImageTileLoader = ImageTileLoader_1.ImageTileLoader;
19575 var ImageTileStore_1 = require("./tiles/ImageTileStore");
19576 exports.ImageTileStore = ImageTileStore_1.ImageTileStore;
19577 var TextureProvider_1 = require("./tiles/TextureProvider");
19578 exports.TextureProvider = TextureProvider_1.TextureProvider;
19579 var RegionOfInterestCalculator_1 = require("./tiles/RegionOfInterestCalculator");
19580 exports.RegionOfInterestCalculator = RegionOfInterestCalculator_1.RegionOfInterestCalculator;
19582 },{"./tiles/ImageTileLoader":331,"./tiles/ImageTileStore":332,"./tiles/RegionOfInterestCalculator":333,"./tiles/TextureProvider":334}],233:[function(require,module,exports){
19584 var EventEmitter_1 = require("./utils/EventEmitter");
19585 exports.EventEmitter = EventEmitter_1.EventEmitter;
19586 var Settings_1 = require("./utils/Settings");
19587 exports.Settings = Settings_1.Settings;
19588 var Urls_1 = require("./utils/Urls");
19589 exports.Urls = Urls_1.Urls;
19591 },{"./utils/EventEmitter":335,"./utils/Settings":336,"./utils/Urls":337}],234:[function(require,module,exports){
19593 var CacheService_1 = require("./viewer/CacheService");
19594 exports.CacheService = CacheService_1.CacheService;
19595 var ComponentController_1 = require("./viewer/ComponentController");
19596 exports.ComponentController = ComponentController_1.ComponentController;
19597 var Container_1 = require("./viewer/Container");
19598 exports.Container = Container_1.Container;
19599 var Observer_1 = require("./viewer/Observer");
19600 exports.Observer = Observer_1.Observer;
19601 var ImageSize_1 = require("./viewer/ImageSize");
19602 exports.ImageSize = ImageSize_1.ImageSize;
19603 var LoadingService_1 = require("./viewer/LoadingService");
19604 exports.LoadingService = LoadingService_1.LoadingService;
19605 var MouseService_1 = require("./viewer/MouseService");
19606 exports.MouseService = MouseService_1.MouseService;
19607 var Navigator_1 = require("./viewer/Navigator");
19608 exports.Navigator = Navigator_1.Navigator;
19609 var Projection_1 = require("./viewer/Projection");
19610 exports.Projection = Projection_1.Projection;
19611 var SpriteAlignment_1 = require("./viewer/SpriteAlignment");
19612 exports.SpriteAlignment = SpriteAlignment_1.SpriteAlignment;
19613 var SpriteService_1 = require("./viewer/SpriteService");
19614 exports.SpriteService = SpriteService_1.SpriteService;
19615 var TouchService_1 = require("./viewer/TouchService");
19616 exports.TouchService = TouchService_1.TouchService;
19617 var Viewer_1 = require("./viewer/Viewer");
19618 exports.Viewer = Viewer_1.Viewer;
19620 },{"./viewer/CacheService":338,"./viewer/ComponentController":339,"./viewer/Container":340,"./viewer/ImageSize":341,"./viewer/LoadingService":342,"./viewer/MouseService":343,"./viewer/Navigator":344,"./viewer/Observer":345,"./viewer/Projection":346,"./viewer/SpriteAlignment":347,"./viewer/SpriteService":348,"./viewer/TouchService":349,"./viewer/Viewer":350}],235:[function(require,module,exports){
19621 /// <reference path="../../typings/index.d.ts" />
19623 var Observable_1 = require("rxjs/Observable");
19624 require("rxjs/add/observable/defer");
19625 require("rxjs/add/observable/fromPromise");
19626 require("rxjs/add/operator/catch");
19627 require("rxjs/add/operator/map");
19628 var API_1 = require("../API");
19632 * @classdesc Provides methods for access of API v3.
19634 var APIv3 = (function () {
19636 * Create a new api v3 instance.
19638 * @param {number} clientId - Client id for API requests.
19639 * @param {number} [token] - Optional bearer token for API requests of
19640 * protected resources.
19641 * @param {ModelCreator} [creator] - Optional model creator instance.
19643 function APIv3(clientId, token, creator) {
19644 this._clientId = clientId;
19645 this._modelCreator = creator != null ? creator : new API_1.ModelCreator();
19646 this._model = this._modelCreator.createModel(clientId, token);
19647 this._pageCount = 999;
19648 this._pathImageByKey = "imageByKey";
19649 this._pathImageCloseTo = "imageCloseTo";
19650 this._pathImagesByH = "imagesByH";
19651 this._pathImageViewAdd = "imageViewAdd";
19652 this._pathSequenceByKey = "sequenceByKey";
19653 this._pathSequenceViewAdd = "sequenceViewAdd";
19654 this._propertiesCore = [
19659 this._propertiesFill = [
19664 this._propertiesKey = [
19667 this._propertiesSequence = [
19670 this._propertiesSpatial = [
19684 this._propertiesUser = [
19689 APIv3.prototype.imageByKeyFill$ = function (keys) {
19690 return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([
19691 this._pathImageByKey,
19693 this._propertiesKey
19694 .concat(this._propertiesFill)
19695 .concat(this._propertiesSpatial),
19696 this._propertiesKey
19697 .concat(this._propertiesUser)
19699 .map(function (value) {
19700 return value.json.imageByKey;
19701 }), this._pathImageByKey, keys);
19703 APIv3.prototype.imageByKeyFull$ = function (keys) {
19704 return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([
19705 this._pathImageByKey,
19707 this._propertiesKey
19708 .concat(this._propertiesCore)
19709 .concat(this._propertiesFill)
19710 .concat(this._propertiesSpatial),
19711 this._propertiesKey
19712 .concat(this._propertiesUser)
19714 .map(function (value) {
19715 return value.json.imageByKey;
19716 }), this._pathImageByKey, keys);
19718 APIv3.prototype.imageCloseTo$ = function (lat, lon) {
19719 var lonLat = lon + ":" + lat;
19720 return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([
19721 this._pathImageCloseTo,
19723 this._propertiesKey
19724 .concat(this._propertiesCore)
19725 .concat(this._propertiesFill)
19726 .concat(this._propertiesSpatial),
19727 this._propertiesKey
19728 .concat(this._propertiesUser)
19730 .map(function (value) {
19731 return value != null ? value.json.imageCloseTo[lonLat] : null;
19732 }), this._pathImageCloseTo, [lonLat]);
19734 APIv3.prototype.imagesByH$ = function (hs) {
19736 return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([
19737 this._pathImagesByH,
19739 { from: 0, to: this._pageCount },
19740 this._propertiesKey
19741 .concat(this._propertiesCore),
19742 this._propertiesKey
19744 .map(function (value) {
19745 if (value == null) {
19746 value = { json: { imagesByH: {} } };
19747 for (var _i = 0, hs_1 = hs; _i < hs_1.length; _i++) {
19749 value.json.imagesByH[h] = {};
19750 for (var i = 0; i <= _this._pageCount; i++) {
19751 value.json.imagesByH[h][i] = null;
19755 return value.json.imagesByH;
19756 }), this._pathImagesByH, hs);
19758 APIv3.prototype.imageViewAdd$ = function (keys) {
19759 return this._catchInvalidateCall$(this._wrapPromise$(this._model.call([this._pathImageViewAdd], [keys])), this._pathImageViewAdd, keys);
19761 APIv3.prototype.invalidateImageByKey = function (keys) {
19762 this._invalidateGet(this._pathImageByKey, keys);
19764 APIv3.prototype.invalidateImagesByH = function (hs) {
19765 this._invalidateGet(this._pathImagesByH, hs);
19767 APIv3.prototype.invalidateSequenceByKey = function (sKeys) {
19768 this._invalidateGet(this._pathSequenceByKey, sKeys);
19770 APIv3.prototype.setToken = function (token) {
19771 this._model.invalidate([]);
19772 this._model = null;
19773 this._model = this._modelCreator.createModel(this._clientId, token);
19775 APIv3.prototype.sequenceByKey$ = function (sequenceKeys) {
19776 return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([
19777 this._pathSequenceByKey,
19779 this._propertiesKey
19780 .concat(this._propertiesSequence)
19782 .map(function (value) {
19783 return value.json.sequenceByKey;
19784 }), this._pathSequenceByKey, sequenceKeys);
19786 APIv3.prototype.sequenceViewAdd$ = function (sequenceKeys) {
19787 return this._catchInvalidateCall$(this._wrapPromise$(this._model.call([this._pathSequenceViewAdd], [sequenceKeys])), this._pathSequenceViewAdd, sequenceKeys);
19789 Object.defineProperty(APIv3.prototype, "clientId", {
19791 return this._clientId;
19796 APIv3.prototype._catchInvalidateGet$ = function (observable, path, paths) {
19799 .catch(function (error) {
19800 _this._invalidateGet(path, paths);
19804 APIv3.prototype._catchInvalidateCall$ = function (observable, path, paths) {
19807 .catch(function (error) {
19808 _this._invalidateCall(path, paths);
19812 APIv3.prototype._invalidateGet = function (path, paths) {
19813 this._model.invalidate([path, paths]);
19815 APIv3.prototype._invalidateCall = function (path, paths) {
19816 this._model.invalidate([path], [paths]);
19818 APIv3.prototype._wrapPromise$ = function (promise) {
19819 return Observable_1.Observable.defer(function () { return Observable_1.Observable.fromPromise(promise); });
19823 exports.APIv3 = APIv3;
19824 Object.defineProperty(exports, "__esModule", { value: true });
19825 exports.default = APIv3;
19827 },{"../API":223,"rxjs/Observable":28,"rxjs/add/observable/defer":38,"rxjs/add/observable/fromPromise":42,"rxjs/add/operator/catch":51,"rxjs/add/operator/map":64}],236:[function(require,module,exports){
19828 /// <reference path="../../typings/index.d.ts" />
19830 var falcor = require("falcor");
19831 var HttpDataSource = require("falcor-http-datasource");
19832 var Utils_1 = require("../Utils");
19834 * @class ModelCreator
19836 * @classdesc Creates API models.
19838 var ModelCreator = (function () {
19839 function ModelCreator() {
19842 * Creates a Falcor model.
19844 * @description Max cache size will be set to 16 MB. Authorization
19845 * header will be added if bearer token is supplied.
19847 * @param {number} clientId - Client id for API requests.
19848 * @param {number} [token] - Optional bearer token for API requests of
19849 * protected resources.
19850 * @returns {falcor.Model} Falcor model for HTTP requests.
19852 ModelCreator.prototype.createModel = function (clientId, token) {
19853 var configuration = {
19855 withCredentials: false,
19857 if (token != null) {
19858 configuration.headers = { "Authorization": "Bearer " + token };
19860 return new falcor.Model({
19861 maxSize: 16 * 1024 * 1024,
19862 source: new HttpDataSource(Utils_1.Urls.falcorModel(clientId), configuration),
19865 return ModelCreator;
19867 exports.ModelCreator = ModelCreator;
19868 Object.defineProperty(exports, "__esModule", { value: true });
19869 exports.default = ModelCreator;
19871 },{"../Utils":233,"falcor":13,"falcor-http-datasource":8}],237:[function(require,module,exports){
19872 /// <reference path="../../typings/index.d.ts" />
19874 var __extends = (this && this.__extends) || function (d, b) {
19875 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
19876 function __() { this.constructor = d; }
19877 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
19879 var vd = require("virtual-dom");
19880 var Component_1 = require("../Component");
19881 var AttributionComponent = (function (_super) {
19882 __extends(AttributionComponent, _super);
19883 function AttributionComponent(name, container, navigator) {
19884 return _super.call(this, name, container, navigator) || this;
19886 AttributionComponent.prototype._activate = function () {
19888 this._disposable = this._navigator.stateService.currentNode$
19889 .map(function (node) {
19890 return { name: _this._name, vnode: _this._getAttributionNode(node.username, node.key) };
19892 .subscribe(this._container.domRenderer.render$);
19894 AttributionComponent.prototype._deactivate = function () {
19895 this._disposable.unsubscribe();
19897 AttributionComponent.prototype._getDefaultConfiguration = function () {
19900 AttributionComponent.prototype._getAttributionNode = function (username, photoId) {
19901 return vd.h("div.Attribution", {}, [
19902 vd.h("a", { href: "https://www.mapillary.com/app/user/" + username,
19904 textContent: "@" + username,
19906 vd.h("span", { textContent: "|" }, []),
19907 vd.h("a", { href: "https://www.mapillary.com/app/?pKey=" + photoId + "&focus=photo",
19909 textContent: "mapillary.com",
19913 return AttributionComponent;
19914 }(Component_1.Component));
19915 AttributionComponent.componentName = "attribution";
19916 exports.AttributionComponent = AttributionComponent;
19917 Component_1.ComponentService.register(AttributionComponent);
19918 Object.defineProperty(exports, "__esModule", { value: true });
19919 exports.default = AttributionComponent;
19921 },{"../Component":224,"virtual-dom":180}],238:[function(require,module,exports){
19922 /// <reference path="../../typings/index.d.ts" />
19924 var __extends = (this && this.__extends) || function (d, b) {
19925 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
19926 function __() { this.constructor = d; }
19927 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
19929 var vd = require("virtual-dom");
19930 var Component_1 = require("../Component");
19931 var BackgroundComponent = (function (_super) {
19932 __extends(BackgroundComponent, _super);
19933 function BackgroundComponent(name, container, navigator) {
19934 return _super.call(this, name, container, navigator) || this;
19936 BackgroundComponent.prototype._activate = function () {
19937 this._container.domRenderer.render$
19938 .next({ name: this._name, vnode: this._getBackgroundNode("The viewer can't display the given photo.") });
19940 BackgroundComponent.prototype._deactivate = function () {
19943 BackgroundComponent.prototype._getDefaultConfiguration = function () {
19946 BackgroundComponent.prototype._getBackgroundNode = function (notice) {
19947 // todo: add condition for when to display the DOM node
19948 return vd.h("div.BackgroundWrapper", {}, [
19949 vd.h("p", { textContent: notice }, []),
19952 return BackgroundComponent;
19953 }(Component_1.Component));
19954 BackgroundComponent.componentName = "background";
19955 exports.BackgroundComponent = BackgroundComponent;
19956 Component_1.ComponentService.register(BackgroundComponent);
19957 Object.defineProperty(exports, "__esModule", { value: true });
19958 exports.default = BackgroundComponent;
19960 },{"../Component":224,"virtual-dom":180}],239:[function(require,module,exports){
19961 /// <reference path="../../typings/index.d.ts" />
19963 var __extends = (this && this.__extends) || function (d, b) {
19964 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
19965 function __() { this.constructor = d; }
19966 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
19968 var vd = require("virtual-dom");
19969 var Observable_1 = require("rxjs/Observable");
19970 var Component_1 = require("../Component");
19971 var Geo_1 = require("../Geo");
19972 var BearingComponent = (function (_super) {
19973 __extends(BearingComponent, _super);
19974 function BearingComponent(name, container, navigator) {
19975 var _this = _super.call(this, name, container, navigator) || this;
19976 _this._spatial = new Geo_1.Spatial();
19977 _this._svgNamespace = "http://www.w3.org/2000/svg";
19978 _this._distinctThreshold = Math.PI / 90;
19981 BearingComponent.prototype._activate = function () {
19983 var nodeBearingFov$ = this._navigator.stateService.currentState$
19984 .distinctUntilChanged(undefined, function (frame) {
19985 return frame.state.currentNode.key;
19987 .map(function (frame) {
19988 var node = frame.state.currentNode;
19989 var transform = frame.state.currentTransform;
19991 var hFov_1 = 2 * Math.PI * node.gpano.CroppedAreaImageWidthPixels / node.gpano.FullPanoWidthPixels;
19992 return [_this._spatial.degToRad(node.ca), hFov_1];
19994 var size = Math.max(transform.basicWidth, transform.basicHeight);
19996 console.warn("Original image size (" + transform.basicWidth + ", " + transform.basicHeight + ") is invalid (" + node.key + ". " +
19997 "Not showing available fov.");
19999 var hFov = size > 0 ?
20000 2 * Math.atan(0.5 * transform.basicWidth / (size * transform.focal)) :
20002 return [_this._spatial.degToRad(node.ca), hFov];
20004 .distinctUntilChanged(function (a1, a2) {
20005 return Math.abs(a2[0] - a1[0]) < _this._distinctThreshold &&
20006 Math.abs(a2[1] - a1[1]) < _this._distinctThreshold;
20008 var cameraBearingFov$ = this._container.renderService.renderCamera$
20009 .map(function (rc) {
20010 var vFov = _this._spatial.degToRad(rc.perspective.fov);
20011 var hFov = Math.atan(rc.perspective.aspect * Math.tan(0.5 * vFov)) * 2;
20012 return [_this._spatial.azimuthalToBearing(rc.rotation.phi), hFov];
20014 .distinctUntilChanged(function (a1, a2) {
20015 return Math.abs(a2[0] - a1[0]) < _this._distinctThreshold &&
20016 Math.abs(a2[1] - a1[1]) < _this._distinctThreshold;
20018 this._renderSubscription = Observable_1.Observable
20019 .combineLatest(nodeBearingFov$, cameraBearingFov$)
20020 .map(function (args) {
20021 var background = vd.h("div.BearingIndicatorBackground", { oncontextmenu: function (event) { event.preventDefault(); } }, [
20022 vd.h("div.BearingIndicatorBackgroundRectangle", {}, []),
20023 vd.h("div.BearingIndicatorBackgroundCircle", {}, []),
20025 var north = vd.h("div.BearingIndicatorNorth", {}, []);
20026 var nodeSector = _this._createCircleSector(args[0][0], args[0][1], "#000");
20027 var cameraSector = _this._createCircleSector(args[1][0], args[1][1], "#fff");
20028 var compass = _this._createCircleSectorCompass(nodeSector, cameraSector);
20031 vnode: vd.h("div.BearingIndicator", {}, [
20038 .subscribe(this._container.domRenderer.render$);
20040 BearingComponent.prototype._deactivate = function () {
20041 this._renderSubscription.unsubscribe();
20043 BearingComponent.prototype._getDefaultConfiguration = function () {
20046 BearingComponent.prototype._createCircleSectorCompass = function (nodeSector, cameraSector) {
20047 var group = vd.h("g", {
20048 attributes: { transform: "translate(1,1)" },
20049 namespace: this._svgNamespace,
20050 }, [nodeSector, cameraSector]);
20051 var centerCircle = vd.h("circle", {
20058 "stroke-width": "0.0833333",
20060 namespace: this._svgNamespace,
20062 var svg = vd.h("svg", {
20063 attributes: { viewBox: "0 0 2 2" },
20064 namespace: this._svgNamespace,
20069 position: "absolute",
20072 }, [group, centerCircle]);
20075 BearingComponent.prototype._createCircleSector = function (bearing, fov, fill) {
20076 if (fov > 2 * Math.PI - Math.PI / 90) {
20077 return vd.h("circle", {
20078 attributes: { cx: "0", cy: "0", fill: fill, r: "1" },
20079 namespace: this._svgNamespace,
20082 var arcStart = bearing - fov / 2 - Math.PI / 2;
20083 var arcEnd = arcStart + fov;
20084 var startX = Math.cos(arcStart);
20085 var startY = Math.sin(arcStart);
20086 var endX = Math.cos(arcEnd);
20087 var endY = Math.sin(arcEnd);
20088 var largeArc = fov >= Math.PI ? 1 : 0;
20089 var description = "M 0 0 " + startX + " " + startY + " A 1 1 0 " + largeArc + " 1 " + endX + " " + endY;
20090 return vd.h("path", {
20091 attributes: { d: description, fill: fill },
20092 namespace: this._svgNamespace,
20095 return BearingComponent;
20096 }(Component_1.Component));
20097 BearingComponent.componentName = "bearing";
20098 exports.BearingComponent = BearingComponent;
20099 Component_1.ComponentService.register(BearingComponent);
20100 Object.defineProperty(exports, "__esModule", { value: true });
20101 exports.default = BearingComponent;
20103 },{"../Component":224,"../Geo":227,"rxjs/Observable":28,"virtual-dom":180}],240:[function(require,module,exports){
20105 var __extends = (this && this.__extends) || function (d, b) {
20106 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
20107 function __() { this.constructor = d; }
20108 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20110 var Observable_1 = require("rxjs/Observable");
20111 require("rxjs/add/observable/combineLatest");
20112 require("rxjs/add/observable/from");
20113 require("rxjs/add/observable/merge");
20114 require("rxjs/add/observable/of");
20115 require("rxjs/add/observable/zip");
20116 require("rxjs/add/operator/catch");
20117 require("rxjs/add/operator/combineLatest");
20118 require("rxjs/add/operator/distinct");
20119 require("rxjs/add/operator/expand");
20120 require("rxjs/add/operator/filter");
20121 require("rxjs/add/operator/map");
20122 require("rxjs/add/operator/merge");
20123 require("rxjs/add/operator/mergeMap");
20124 require("rxjs/add/operator/mergeAll");
20125 require("rxjs/add/operator/skip");
20126 require("rxjs/add/operator/switchMap");
20127 var Edge_1 = require("../Edge");
20128 var Component_1 = require("../Component");
20129 var CacheComponent = (function (_super) {
20130 __extends(CacheComponent, _super);
20131 function CacheComponent(name, container, navigator) {
20132 return _super.call(this, name, container, navigator) || this;
20135 * Set the cache depth.
20137 * Configures the cache depth. The cache depth can be different for
20138 * different edge direction types.
20140 * @param {ICacheDepth} depth - Cache depth structure.
20142 CacheComponent.prototype.setDepth = function (depth) {
20143 this.configure({ depth: depth });
20145 CacheComponent.prototype._activate = function () {
20147 this._sequenceSubscription = Observable_1.Observable
20148 .combineLatest(this._navigator.stateService.currentNode$
20149 .switchMap(function (node) {
20150 return node.sequenceEdges$;
20152 .filter(function (status) {
20153 return status.cached;
20154 }), this._configuration$)
20155 .switchMap(function (nc) {
20156 var status = nc[0];
20157 var configuration = nc[1];
20158 var sequenceDepth = Math.max(0, Math.min(4, configuration.depth.sequence));
20159 var next$ = _this._cache$(status.edges, Edge_1.EdgeDirection.Next, sequenceDepth);
20160 var prev$ = _this._cache$(status.edges, Edge_1.EdgeDirection.Prev, sequenceDepth);
20161 return Observable_1.Observable
20162 .merge(next$, prev$)
20163 .catch(function (error, caught) {
20164 console.error("Failed to cache sequence edges.", error);
20165 return Observable_1.Observable.empty();
20168 .subscribe(function () { });
20169 this._spatialSubscription = this._navigator.stateService.currentNode$
20170 .switchMap(function (node) {
20171 return Observable_1.Observable
20172 .combineLatest(Observable_1.Observable.of(node), node.spatialEdges$
20173 .filter(function (status) {
20174 return status.cached;
20177 .combineLatest(this._configuration$, function (ns, configuration) {
20178 return [ns[0], ns[1], configuration];
20180 .switchMap(function (args) {
20181 var node = args[0];
20182 var edges = args[1].edges;
20183 var depth = args[2].depth;
20184 var panoDepth = Math.max(0, Math.min(2, depth.pano));
20185 var stepDepth = node.pano ? 0 : Math.max(0, Math.min(3, depth.step));
20186 var turnDepth = node.pano ? 0 : Math.max(0, Math.min(1, depth.turn));
20187 var pano$ = _this._cache$(edges, Edge_1.EdgeDirection.Pano, panoDepth);
20188 var forward$ = _this._cache$(edges, Edge_1.EdgeDirection.StepForward, stepDepth);
20189 var backward$ = _this._cache$(edges, Edge_1.EdgeDirection.StepBackward, stepDepth);
20190 var left$ = _this._cache$(edges, Edge_1.EdgeDirection.StepLeft, stepDepth);
20191 var right$ = _this._cache$(edges, Edge_1.EdgeDirection.StepRight, stepDepth);
20192 var turnLeft$ = _this._cache$(edges, Edge_1.EdgeDirection.TurnLeft, turnDepth);
20193 var turnRight$ = _this._cache$(edges, Edge_1.EdgeDirection.TurnRight, turnDepth);
20194 var turnU$ = _this._cache$(edges, Edge_1.EdgeDirection.TurnU, turnDepth);
20195 return Observable_1.Observable
20196 .merge(forward$, backward$, left$, right$, pano$, turnLeft$, turnRight$, turnU$)
20197 .catch(function (error, caught) {
20198 console.error("Failed to cache spatial edges.", error);
20199 return Observable_1.Observable.empty();
20202 .subscribe(function () { });
20204 CacheComponent.prototype._deactivate = function () {
20205 this._sequenceSubscription.unsubscribe();
20206 this._spatialSubscription.unsubscribe();
20208 CacheComponent.prototype._getDefaultConfiguration = function () {
20209 return { depth: { pano: 1, sequence: 2, step: 1, turn: 0 } };
20211 CacheComponent.prototype._cache$ = function (edges, direction, depth) {
20213 return Observable_1.Observable
20214 .zip(Observable_1.Observable.of(edges), Observable_1.Observable.of(depth))
20215 .expand(function (ed) {
20218 var edgesDepths$ = [];
20220 for (var _i = 0, es_1 = es; _i < es_1.length; _i++) {
20221 var edge = es_1[_i];
20222 if (edge.data.direction === direction) {
20223 edgesDepths$.push(Observable_1.Observable
20224 .zip(_this._navigator.graphService.cacheNode$(edge.to)
20225 .mergeMap(function (n) {
20226 return _this._nodeToEdges$(n, direction);
20227 }), Observable_1.Observable.of(d - 1)));
20231 return Observable_1.Observable
20232 .from(edgesDepths$)
20237 CacheComponent.prototype._nodeToEdges$ = function (node, direction) {
20238 return ([Edge_1.EdgeDirection.Next, Edge_1.EdgeDirection.Prev].indexOf(direction) > -1 ?
20239 node.sequenceEdges$ :
20240 node.spatialEdges$)
20241 .first(function (status) {
20242 return status.cached;
20244 .map(function (status) {
20245 return status.edges;
20248 return CacheComponent;
20249 }(Component_1.Component));
20250 CacheComponent.componentName = "cache";
20251 exports.CacheComponent = CacheComponent;
20252 Component_1.ComponentService.register(CacheComponent);
20253 Object.defineProperty(exports, "__esModule", { value: true });
20254 exports.default = CacheComponent;
20256 },{"../Component":224,"../Edge":225,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/from":40,"rxjs/add/observable/merge":43,"rxjs/add/observable/of":44,"rxjs/add/observable/zip":47,"rxjs/add/operator/catch":51,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinct":56,"rxjs/add/operator/expand":59,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeAll":66,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/skip":74,"rxjs/add/operator/switchMap":78}],241:[function(require,module,exports){
20258 var __extends = (this && this.__extends) || function (d, b) {
20259 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
20260 function __() { this.constructor = d; }
20261 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20263 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
20264 var Subject_1 = require("rxjs/Subject");
20265 require("rxjs/add/operator/publishReplay");
20266 require("rxjs/add/operator/scan");
20267 require("rxjs/add/operator/startWith");
20268 var Utils_1 = require("../Utils");
20269 var Component = (function (_super) {
20270 __extends(Component, _super);
20271 function Component(name, container, navigator) {
20272 var _this = _super.call(this) || this;
20273 _this._activated$ = new BehaviorSubject_1.BehaviorSubject(false);
20274 _this._configurationSubject$ = new Subject_1.Subject();
20275 _this._activated = false;
20276 _this._container = container;
20277 _this._name = name;
20278 _this._navigator = navigator;
20279 _this._configuration$ =
20280 _this._configurationSubject$
20281 .startWith(_this.defaultConfiguration)
20282 .scan(function (conf, newConf) {
20283 for (var key in newConf) {
20284 if (newConf.hasOwnProperty(key)) {
20285 conf[key] = newConf[key];
20292 _this._configuration$.subscribe(function () { });
20295 Object.defineProperty(Component.prototype, "activated", {
20297 return this._activated;
20302 Object.defineProperty(Component.prototype, "activated$", {
20304 return this._activated$;
20309 Object.defineProperty(Component.prototype, "defaultConfiguration", {
20311 * Get default configuration.
20313 * @returns {TConfiguration} Default configuration for component.
20316 return this._getDefaultConfiguration();
20321 Object.defineProperty(Component.prototype, "configuration$", {
20323 return this._configuration$;
20328 Object.defineProperty(Component.prototype, "name", {
20335 Component.prototype.activate = function (conf) {
20336 if (this._activated) {
20339 if (conf !== undefined) {
20340 this._configurationSubject$.next(conf);
20342 this._activated = true;
20344 this._activated$.next(true);
20347 Component.prototype.configure = function (conf) {
20348 this._configurationSubject$.next(conf);
20350 Component.prototype.deactivate = function () {
20351 if (!this._activated) {
20354 this._activated = false;
20355 this._deactivate();
20356 this._container.domRenderer.clear(this._name);
20357 this._container.glRenderer.clear(this._name);
20358 this._activated$.next(false);
20362 * Detect the viewer's new width and height and resize the component's
20363 * rendered elements accordingly if applicable.
20365 Component.prototype.resize = function () { return; };
20367 }(Utils_1.EventEmitter));
20369 * Component name. Used when interacting with component through the Viewer's API.
20371 Component.componentName = "not_worthy";
20372 exports.Component = Component;
20373 Object.defineProperty(exports, "__esModule", { value: true });
20374 exports.default = Component;
20376 },{"../Utils":233,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77}],242:[function(require,module,exports){
20377 /// <reference path="../../typings/index.d.ts" />
20379 var _ = require("underscore");
20380 var Error_1 = require("../Error");
20381 var ComponentService = (function () {
20382 function ComponentService(container, navigator) {
20383 this._components = {};
20384 this._container = container;
20385 this._navigator = navigator;
20386 for (var _i = 0, _a = _.values(ComponentService.registeredComponents); _i < _a.length; _i++) {
20387 var component = _a[_i];
20388 this._components[component.componentName] = {
20390 component: new component(component.componentName, container, navigator),
20393 this._coverComponent = new ComponentService.registeredCoverComponent("cover", container, navigator);
20394 this._coverComponent.activate();
20395 this._coverActivated = true;
20397 ComponentService.register = function (component) {
20398 if (ComponentService.registeredComponents[component.componentName] === undefined) {
20399 ComponentService.registeredComponents[component.componentName] = component;
20402 ComponentService.registerCover = function (coverComponent) {
20403 ComponentService.registeredCoverComponent = coverComponent;
20405 ComponentService.prototype.activateCover = function () {
20406 if (this._coverActivated) {
20409 this._coverActivated = true;
20410 for (var _i = 0, _a = _.values(this._components); _i < _a.length; _i++) {
20411 var component = _a[_i];
20412 if (component.active) {
20413 component.component.deactivate();
20418 ComponentService.prototype.deactivateCover = function () {
20419 if (!this._coverActivated) {
20422 this._coverActivated = false;
20423 for (var _i = 0, _a = _.values(this._components); _i < _a.length; _i++) {
20424 var component = _a[_i];
20425 if (component.active) {
20426 component.component.activate();
20431 ComponentService.prototype.activate = function (name) {
20432 this._checkName(name);
20433 this._components[name].active = true;
20434 if (!this._coverActivated) {
20435 this.get(name).activate();
20438 ComponentService.prototype.configure = function (name, conf) {
20439 this._checkName(name);
20440 this.get(name).configure(conf);
20442 ComponentService.prototype.deactivate = function (name) {
20443 this._checkName(name);
20444 this._components[name].active = false;
20445 if (!this._coverActivated) {
20446 this.get(name).deactivate();
20449 ComponentService.prototype.resize = function () {
20450 for (var _i = 0, _a = _.values(this._components); _i < _a.length; _i++) {
20451 var component = _a[_i];
20452 component.component.resize();
20455 ComponentService.prototype.get = function (name) {
20456 return this._components[name].component;
20458 ComponentService.prototype.getCover = function () {
20459 return this._coverComponent;
20461 ComponentService.prototype._checkName = function (name) {
20462 if (!(name in this._components)) {
20463 throw new Error_1.ArgumentMapillaryError("Component does not exist: " + name);
20466 return ComponentService;
20468 ComponentService.registeredComponents = {};
20469 exports.ComponentService = ComponentService;
20470 Object.defineProperty(exports, "__esModule", { value: true });
20471 exports.default = ComponentService;
20473 },{"../Error":226,"underscore":175}],243:[function(require,module,exports){
20474 /// <reference path="../../typings/index.d.ts" />
20476 var __extends = (this && this.__extends) || function (d, b) {
20477 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
20478 function __() { this.constructor = d; }
20479 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20481 var vd = require("virtual-dom");
20482 require("rxjs/add/operator/filter");
20483 require("rxjs/add/operator/map");
20484 require("rxjs/add/operator/withLatestFrom");
20485 var Component_1 = require("../Component");
20486 var CoverComponent = (function (_super) {
20487 __extends(CoverComponent, _super);
20488 function CoverComponent(name, container, navigator) {
20489 return _super.call(this, name, container, navigator) || this;
20491 CoverComponent.prototype._activate = function () {
20493 this._keyDisposable = this._navigator.stateService.currentNode$
20494 .withLatestFrom(this._configuration$, function (node, configuration) {
20495 return [node, configuration];
20497 .filter(function (nc) {
20498 return nc[0].key !== nc[1].key;
20500 .map(function (nc) { return nc[0]; })
20501 .map(function (node) {
20502 return { key: node.key, src: node.image.src };
20504 .subscribe(this._configurationSubject$);
20505 this._disposable = this._configuration$
20506 .map(function (conf) {
20508 return { name: _this._name, vnode: vd.h("div", []) };
20510 if (!conf.visible) {
20511 return { name: _this._name, vnode: vd.h("div.Cover.CoverDone", [_this._getCoverBackgroundVNode(conf)]) };
20513 return { name: _this._name, vnode: _this._getCoverButtonVNode(conf) };
20515 .subscribe(this._container.domRenderer.render$);
20517 CoverComponent.prototype._deactivate = function () {
20518 this._disposable.unsubscribe();
20519 this._keyDisposable.unsubscribe();
20521 CoverComponent.prototype._getDefaultConfiguration = function () {
20522 return { "loading": false, "visible": true };
20524 CoverComponent.prototype._getCoverButtonVNode = function (conf) {
20526 var cover = conf.loading ? "div.Cover.CoverLoading" : "div.Cover";
20527 return vd.h(cover, [
20528 this._getCoverBackgroundVNode(conf),
20529 vd.h("button.CoverButton", { onclick: function () { _this.configure({ loading: true }); } }, ["Explore"]),
20530 vd.h("a.CoverLogo", { href: "https://www.mapillary.com", target: "_blank" }, []),
20533 CoverComponent.prototype._getCoverBackgroundVNode = function (conf) {
20534 var url = conf.src != null ?
20535 "url(" + conf.src + ")" :
20536 "url(https://d1cuyjsrcm0gby.cloudfront.net/" + conf.key + "/thumb-640.jpg)";
20537 var properties = { style: { backgroundImage: url } };
20539 if (conf.loading) {
20540 children.push(vd.h("div.Spinner", {}, []));
20542 children.push(vd.h("div.CoverBackgroundGradient", {}, []));
20543 return vd.h("div.CoverBackground", properties, children);
20545 return CoverComponent;
20546 }(Component_1.Component));
20547 CoverComponent.componentName = "cover";
20548 exports.CoverComponent = CoverComponent;
20549 Component_1.ComponentService.registerCover(CoverComponent);
20550 Object.defineProperty(exports, "__esModule", { value: true });
20551 exports.default = CoverComponent;
20553 },{"../Component":224,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/withLatestFrom":82,"virtual-dom":180}],244:[function(require,module,exports){
20554 /// <reference path="../../typings/index.d.ts" />
20556 var __extends = (this && this.__extends) || function (d, b) {
20557 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
20558 function __() { this.constructor = d; }
20559 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20561 var _ = require("underscore");
20562 var vd = require("virtual-dom");
20563 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
20564 require("rxjs/add/operator/combineLatest");
20565 var Component_1 = require("../Component");
20566 var DebugComponent = (function (_super) {
20567 __extends(DebugComponent, _super);
20568 function DebugComponent(name, container, navigator) {
20569 var _this = _super.call(this, name, container, navigator) || this;
20570 _this._open$ = new BehaviorSubject_1.BehaviorSubject(false);
20571 _this._displaying = false;
20574 DebugComponent.prototype._activate = function () {
20576 this._disposable = this._navigator.stateService.currentState$
20577 .combineLatest(this._open$, this._navigator.imageLoadingService.loadstatus$, function (frame, open, loadStatus) {
20578 return { name: _this._name, vnode: _this._getDebugVNode(open, _this._getDebugInfo(frame, loadStatus)) };
20580 .subscribe(this._container.domRenderer.render$);
20582 DebugComponent.prototype._deactivate = function () {
20583 this._disposable.unsubscribe();
20585 DebugComponent.prototype._getDefaultConfiguration = function () {
20588 DebugComponent.prototype._getDebugInfo = function (frame, loadStatus) {
20590 ret.push(vd.h("h2", "Node"));
20591 if (frame.state.currentNode) {
20592 ret.push(vd.h("p", "currentNode: " + frame.state.currentNode.key));
20594 if (frame.state.previousNode) {
20595 ret.push(vd.h("p", "previousNode: " + frame.state.previousNode.key));
20597 ret.push(vd.h("h2", "Loading"));
20601 for (var _i = 0, _a = _.values(loadStatus); _i < _a.length; _i++) {
20602 var loadStat = _a[_i];
20603 total += loadStat.loaded;
20604 if (loadStat.loaded !== loadStat.total) {
20611 ret.push(vd.h("p", "Loaded Images: " + loaded));
20612 ret.push(vd.h("p", "Loading Images: " + loading));
20613 ret.push(vd.h("p", "Total bytes loaded: " + total));
20614 ret.push(vd.h("h2", "Camera"));
20615 ret.push(vd.h("p", "camera.position.x: " + frame.state.camera.position.x));
20616 ret.push(vd.h("p", "camera.position.y: " + frame.state.camera.position.y));
20617 ret.push(vd.h("p", "camera.position.z: " + frame.state.camera.position.z));
20618 ret.push(vd.h("p", "camera.lookat.x: " + frame.state.camera.lookat.x));
20619 ret.push(vd.h("p", "camera.lookat.y: " + frame.state.camera.lookat.y));
20620 ret.push(vd.h("p", "camera.lookat.z: " + frame.state.camera.lookat.z));
20621 ret.push(vd.h("p", "camera.up.x: " + frame.state.camera.up.x));
20622 ret.push(vd.h("p", "camera.up.y: " + frame.state.camera.up.y));
20623 ret.push(vd.h("p", "camera.up.z: " + frame.state.camera.up.z));
20626 DebugComponent.prototype._getDebugVNode = function (open, info) {
20628 return vd.h("div.Debug", {}, [
20629 vd.h("h2", {}, ["Debug"]),
20630 this._getDebugVNodeButton(open),
20631 vd.h("pre", {}, info),
20635 return this._getDebugVNodeButton(open);
20638 DebugComponent.prototype._getDebugVNodeButton = function (open) {
20639 var buttonText = open ? "Disable Debug" : "D";
20640 var buttonCssClass = open ? "" : ".DebugButtonFixed";
20642 return vd.h("button.DebugButton" + buttonCssClass, { onclick: this._closeDebugElement.bind(this) }, [buttonText]);
20645 return vd.h("button.DebugButton" + buttonCssClass, { onclick: this._openDebugElement.bind(this) }, [buttonText]);
20648 DebugComponent.prototype._closeDebugElement = function (open) {
20649 this._open$.next(false);
20651 DebugComponent.prototype._openDebugElement = function () {
20652 this._open$.next(true);
20654 return DebugComponent;
20655 }(Component_1.Component));
20656 DebugComponent.componentName = "debug";
20657 exports.DebugComponent = DebugComponent;
20658 Component_1.ComponentService.register(DebugComponent);
20659 Object.defineProperty(exports, "__esModule", { value: true });
20660 exports.default = DebugComponent;
20662 },{"../Component":224,"rxjs/BehaviorSubject":25,"rxjs/add/operator/combineLatest":52,"underscore":175,"virtual-dom":180}],245:[function(require,module,exports){
20663 /// <reference path="../../typings/index.d.ts" />
20665 var __extends = (this && this.__extends) || function (d, b) {
20666 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
20667 function __() { this.constructor = d; }
20668 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20670 var vd = require("virtual-dom");
20671 require("rxjs/add/operator/combineLatest");
20672 var Component_1 = require("../Component");
20673 var ImageComponent = (function (_super) {
20674 __extends(ImageComponent, _super);
20675 function ImageComponent(name, container, navigator) {
20676 var _this = _super.call(this, name, container, navigator) || this;
20677 _this._canvasId = container.id + "-" + _this._name;
20680 ImageComponent.prototype._activate = function () {
20682 this.drawSubscription = this._container.domRenderer.element$
20683 .combineLatest(this._navigator.stateService.currentNode$, function (element, node) {
20684 var canvas = document.getElementById(_this._canvasId);
20685 return { canvas: canvas, node: node };
20687 .subscribe(function (canvasNode) {
20688 var canvas = canvasNode.canvas;
20689 var node = canvasNode.node;
20690 if (!node || !canvas) {
20693 var adaptableDomRenderer = canvas.parentElement;
20694 var width = adaptableDomRenderer.offsetWidth;
20695 var height = adaptableDomRenderer.offsetHeight;
20696 canvas.width = width;
20697 canvas.height = height;
20698 var ctx = canvas.getContext("2d");
20699 ctx.drawImage(node.image, 0, 0, width, height);
20701 this._container.domRenderer.renderAdaptive$.next({ name: this._name, vnode: vd.h("canvas#" + this._canvasId, []) });
20703 ImageComponent.prototype._deactivate = function () {
20704 this.drawSubscription.unsubscribe();
20706 ImageComponent.prototype._getDefaultConfiguration = function () {
20709 return ImageComponent;
20710 }(Component_1.Component));
20711 ImageComponent.componentName = "image";
20712 exports.ImageComponent = ImageComponent;
20713 Component_1.ComponentService.register(ImageComponent);
20714 Object.defineProperty(exports, "__esModule", { value: true });
20715 exports.default = ImageComponent;
20717 },{"../Component":224,"rxjs/add/operator/combineLatest":52,"virtual-dom":180}],246:[function(require,module,exports){
20719 var __extends = (this && this.__extends) || function (d, b) {
20720 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
20721 function __() { this.constructor = d; }
20722 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20724 var Observable_1 = require("rxjs/Observable");
20725 require("rxjs/add/observable/fromEvent");
20726 require("rxjs/add/operator/withLatestFrom");
20727 var Edge_1 = require("../Edge");
20728 var Component_1 = require("../Component");
20729 var Geo_1 = require("../Geo");
20730 var KeyboardComponent = (function (_super) {
20731 __extends(KeyboardComponent, _super);
20732 function KeyboardComponent(name, container, navigator) {
20733 var _this = _super.call(this, name, container, navigator) || this;
20734 _this._spatial = new Geo_1.Spatial();
20735 _this._perspectiveDirections = [
20736 Edge_1.EdgeDirection.StepForward,
20737 Edge_1.EdgeDirection.StepBackward,
20738 Edge_1.EdgeDirection.StepLeft,
20739 Edge_1.EdgeDirection.StepRight,
20740 Edge_1.EdgeDirection.TurnLeft,
20741 Edge_1.EdgeDirection.TurnRight,
20742 Edge_1.EdgeDirection.TurnU,
20746 KeyboardComponent.prototype._activate = function () {
20748 var sequenceEdges$ = this._navigator.stateService.currentNode$
20749 .switchMap(function (node) {
20750 return node.sequenceEdges$;
20752 var spatialEdges$ = this._navigator.stateService.currentNode$
20753 .switchMap(function (node) {
20754 return node.spatialEdges$;
20756 this._disposable = Observable_1.Observable
20757 .fromEvent(document, "keydown")
20758 .withLatestFrom(this._navigator.stateService.currentState$, sequenceEdges$, spatialEdges$, function (event, frame, sequenceEdges, spatialEdges) {
20759 return { event: event, frame: frame, sequenceEdges: sequenceEdges, spatialEdges: spatialEdges };
20761 .subscribe(function (kf) {
20762 if (!kf.frame.state.currentNode.pano) {
20763 _this._navigatePerspective(kf.event, kf.sequenceEdges, kf.spatialEdges);
20766 _this._navigatePanorama(kf.event, kf.sequenceEdges, kf.spatialEdges, kf.frame.state.camera);
20770 KeyboardComponent.prototype._deactivate = function () {
20771 this._disposable.unsubscribe();
20773 KeyboardComponent.prototype._getDefaultConfiguration = function () {
20776 KeyboardComponent.prototype._navigatePanorama = function (event, sequenceEdges, spatialEdges, camera) {
20777 var navigationAngle = 0;
20778 var stepDirection = null;
20779 var sequenceDirection = null;
20780 var phi = this._rotationFromCamera(camera).phi;
20781 switch (event.keyCode) {
20783 if (event.shiftKey || event.altKey) {
20786 navigationAngle = Math.PI / 2 + phi;
20787 stepDirection = Edge_1.EdgeDirection.StepLeft;
20790 if (event.shiftKey) {
20793 if (event.altKey) {
20794 sequenceDirection = Edge_1.EdgeDirection.Next;
20797 navigationAngle = phi;
20798 stepDirection = Edge_1.EdgeDirection.StepForward;
20801 if (event.shiftKey || event.altKey) {
20804 navigationAngle = -Math.PI / 2 + phi;
20805 stepDirection = Edge_1.EdgeDirection.StepRight;
20808 if (event.shiftKey) {
20811 if (event.altKey) {
20812 sequenceDirection = Edge_1.EdgeDirection.Prev;
20815 navigationAngle = Math.PI + phi;
20816 stepDirection = Edge_1.EdgeDirection.StepBackward;
20821 event.preventDefault();
20822 if (sequenceDirection != null) {
20823 this._moveInDir(sequenceDirection, sequenceEdges);
20826 if (stepDirection == null || !spatialEdges.cached) {
20829 navigationAngle = this._spatial.wrapAngle(navigationAngle);
20830 var threshold = Math.PI / 4;
20831 var edges = spatialEdges.edges.filter(function (e) {
20832 return e.data.direction === Edge_1.EdgeDirection.Pano ||
20833 e.data.direction === stepDirection;
20835 var smallestAngle = Number.MAX_VALUE;
20837 for (var _i = 0, edges_1 = edges; _i < edges_1.length; _i++) {
20838 var edge = edges_1[_i];
20839 var angle = Math.abs(this._spatial.wrapAngle(edge.data.worldMotionAzimuth - navigationAngle));
20840 if (angle < Math.min(smallestAngle, threshold)) {
20841 smallestAngle = angle;
20845 if (toKey == null) {
20848 this._navigator.moveToKey$(toKey)
20849 .subscribe(function (n) { return; }, function (e) { console.error(e); });
20851 KeyboardComponent.prototype._rotationFromCamera = function (camera) {
20852 var direction = camera.lookat.clone().sub(camera.position);
20853 var upProjection = direction.clone().dot(camera.up);
20854 var planeProjection = direction.clone().sub(camera.up.clone().multiplyScalar(upProjection));
20855 var phi = Math.atan2(planeProjection.y, planeProjection.x);
20856 var theta = Math.PI / 2 - this._spatial.angleToPlane(direction.toArray(), [0, 0, 1]);
20857 return { phi: phi, theta: theta };
20859 KeyboardComponent.prototype._navigatePerspective = function (event, sequenceEdges, spatialEdges) {
20860 var direction = null;
20861 var sequenceDirection = null;
20862 switch (event.keyCode) {
20864 if (event.altKey) {
20867 direction = event.shiftKey ? Edge_1.EdgeDirection.TurnLeft : Edge_1.EdgeDirection.StepLeft;
20870 if (event.altKey) {
20871 sequenceDirection = Edge_1.EdgeDirection.Next;
20874 direction = event.shiftKey ? Edge_1.EdgeDirection.Pano : Edge_1.EdgeDirection.StepForward;
20877 if (event.altKey) {
20880 direction = event.shiftKey ? Edge_1.EdgeDirection.TurnRight : Edge_1.EdgeDirection.StepRight;
20883 if (event.altKey) {
20884 sequenceDirection = Edge_1.EdgeDirection.Prev;
20887 direction = event.shiftKey ? Edge_1.EdgeDirection.TurnU : Edge_1.EdgeDirection.StepBackward;
20892 event.preventDefault();
20893 if (sequenceDirection != null) {
20894 this._moveInDir(sequenceDirection, sequenceEdges);
20897 this._moveInDir(direction, spatialEdges);
20899 KeyboardComponent.prototype._moveInDir = function (direction, edgeStatus) {
20900 if (!edgeStatus.cached) {
20903 for (var _i = 0, _a = edgeStatus.edges; _i < _a.length; _i++) {
20905 if (edge.data.direction === direction) {
20906 this._navigator.moveToKey$(edge.to)
20907 .subscribe(function (n) { return; }, function (e) { console.error(e); });
20912 return KeyboardComponent;
20913 }(Component_1.Component));
20914 KeyboardComponent.componentName = "keyboard";
20915 exports.KeyboardComponent = KeyboardComponent;
20916 Component_1.ComponentService.register(KeyboardComponent);
20917 Object.defineProperty(exports, "__esModule", { value: true });
20918 exports.default = KeyboardComponent;
20920 },{"../Component":224,"../Edge":225,"../Geo":227,"rxjs/Observable":28,"rxjs/add/observable/fromEvent":41,"rxjs/add/operator/withLatestFrom":82}],247:[function(require,module,exports){
20921 /// <reference path="../../typings/index.d.ts" />
20923 var __extends = (this && this.__extends) || function (d, b) {
20924 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
20925 function __() { this.constructor = d; }
20926 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20928 var _ = require("underscore");
20929 var vd = require("virtual-dom");
20930 require("rxjs/add/operator/combineLatest");
20931 var Component_1 = require("../Component");
20932 var LoadingComponent = (function (_super) {
20933 __extends(LoadingComponent, _super);
20934 function LoadingComponent(name, container, navigator) {
20935 return _super.call(this, name, container, navigator) || this;
20937 LoadingComponent.prototype._activate = function () {
20939 this._loadingSubscription = this._navigator.loadingService.loading$
20940 .combineLatest(this._navigator.imageLoadingService.loadstatus$, function (loading, loadStatus) {
20942 return { name: "loading", vnode: _this._getBarVNode(100) };
20946 for (var _i = 0, _a = _.values(loadStatus); _i < _a.length; _i++) {
20947 var loadStat = _a[_i];
20948 if (loadStat.loaded !== loadStat.total) {
20949 loaded += loadStat.loaded;
20950 total += loadStat.total;
20953 var percentage = 100;
20955 percentage = (loaded / total) * 100;
20957 return { name: _this._name, vnode: _this._getBarVNode(percentage) };
20959 .subscribe(this._container.domRenderer.render$);
20961 LoadingComponent.prototype._deactivate = function () {
20962 this._loadingSubscription.unsubscribe();
20964 LoadingComponent.prototype._getDefaultConfiguration = function () {
20967 LoadingComponent.prototype._getBarVNode = function (percentage) {
20968 var loadingBarStyle = {};
20969 var loadingContainerStyle = {};
20970 if (percentage !== 100) {
20971 loadingBarStyle.width = percentage.toFixed(0) + "%";
20972 loadingBarStyle.opacity = "1";
20975 loadingBarStyle.width = "100%";
20976 loadingBarStyle.opacity = "0";
20978 return vd.h("div.Loading", { style: loadingContainerStyle }, [vd.h("div.LoadingBar", { style: loadingBarStyle }, [])]);
20980 return LoadingComponent;
20981 }(Component_1.Component));
20982 LoadingComponent.componentName = "loading";
20983 exports.LoadingComponent = LoadingComponent;
20984 Component_1.ComponentService.register(LoadingComponent);
20985 Object.defineProperty(exports, "__esModule", { value: true });
20986 exports.default = LoadingComponent;
20988 },{"../Component":224,"rxjs/add/operator/combineLatest":52,"underscore":175,"virtual-dom":180}],248:[function(require,module,exports){
20989 /// <reference path="../../typings/index.d.ts" />
20991 var __extends = (this && this.__extends) || function (d, b) {
20992 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
20993 function __() { this.constructor = d; }
20994 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20996 var vd = require("virtual-dom");
20997 var Observable_1 = require("rxjs/Observable");
20998 require("rxjs/add/operator/map");
20999 require("rxjs/add/operator/first");
21000 var Edge_1 = require("../Edge");
21001 var Component_1 = require("../Component");
21002 var NavigationComponent = (function (_super) {
21003 __extends(NavigationComponent, _super);
21004 function NavigationComponent(name, container, navigator) {
21005 var _this = _super.call(this, name, container, navigator) || this;
21006 _this._dirNames = {};
21007 _this._dirNames[Edge_1.EdgeDirection.StepForward] = "Forward";
21008 _this._dirNames[Edge_1.EdgeDirection.StepBackward] = "Backward";
21009 _this._dirNames[Edge_1.EdgeDirection.StepLeft] = "Left";
21010 _this._dirNames[Edge_1.EdgeDirection.StepRight] = "Right";
21011 _this._dirNames[Edge_1.EdgeDirection.TurnLeft] = "Turnleft";
21012 _this._dirNames[Edge_1.EdgeDirection.TurnRight] = "Turnright";
21013 _this._dirNames[Edge_1.EdgeDirection.TurnU] = "Turnaround";
21016 NavigationComponent.prototype._activate = function () {
21018 this._renderSubscription = this._navigator.stateService.currentNode$
21019 .switchMap(function (node) {
21021 Observable_1.Observable.of([]) :
21022 Observable_1.Observable.combineLatest(node.sequenceEdges$, node.spatialEdges$, function (seq, spa) {
21023 return seq.edges.concat(spa.edges);
21026 .map(function (edges) {
21028 for (var _i = 0, edges_1 = edges; _i < edges_1.length; _i++) {
21029 var edge = edges_1[_i];
21030 var direction = edge.data.direction;
21031 var name_1 = _this._dirNames[direction];
21032 if (name_1 == null) {
21035 btns.push(_this._createVNode(direction, name_1));
21037 return { name: _this._name, vnode: vd.h("div.NavigationComponent", btns) };
21039 .subscribe(this._container.domRenderer.render$);
21041 NavigationComponent.prototype._deactivate = function () {
21042 this._renderSubscription.unsubscribe();
21044 NavigationComponent.prototype._getDefaultConfiguration = function () {
21047 NavigationComponent.prototype._createVNode = function (direction, name) {
21049 return vd.h("span.Direction.Direction" + name, {
21050 onclick: function (ev) {
21051 _this._navigator.moveDir$(direction)
21052 .subscribe(function (node) { return; }, function (error) { console.error(error); });
21056 return NavigationComponent;
21057 }(Component_1.Component));
21058 NavigationComponent.componentName = "navigation";
21059 exports.NavigationComponent = NavigationComponent;
21060 Component_1.ComponentService.register(NavigationComponent);
21061 Object.defineProperty(exports, "__esModule", { value: true });
21062 exports.default = NavigationComponent;
21064 },{"../Component":224,"../Edge":225,"rxjs/Observable":28,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"virtual-dom":180}],249:[function(require,module,exports){
21065 /// <reference path="../../typings/index.d.ts" />
21067 var __extends = (this && this.__extends) || function (d, b) {
21068 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
21069 function __() { this.constructor = d; }
21070 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
21072 var _ = require("underscore");
21073 var vd = require("virtual-dom");
21074 var Observable_1 = require("rxjs/Observable");
21075 require("rxjs/add/observable/fromPromise");
21076 require("rxjs/add/observable/of");
21077 require("rxjs/add/operator/combineLatest");
21078 require("rxjs/add/operator/distinct");
21079 require("rxjs/add/operator/distinctUntilChanged");
21080 require("rxjs/add/operator/filter");
21081 require("rxjs/add/operator/map");
21082 require("rxjs/add/operator/mergeMap");
21083 require("rxjs/add/operator/pluck");
21084 require("rxjs/add/operator/scan");
21085 var Component_1 = require("../Component");
21086 var DescriptionState = (function () {
21087 function DescriptionState() {
21089 return DescriptionState;
21091 var RouteState = (function () {
21092 function RouteState() {
21096 var RouteTrack = (function () {
21097 function RouteTrack() {
21098 this.nodeInstructions = [];
21099 this.nodeInstructionsOrdered = [];
21103 var RouteComponent = (function (_super) {
21104 __extends(RouteComponent, _super);
21105 function RouteComponent(name, container, navigator) {
21106 return _super.call(this, name, container, navigator) || this;
21108 RouteComponent.prototype._activate = function () {
21110 var _slowedStream$;
21111 _slowedStream$ = this._navigator.stateService.currentState$.filter(function (frame) {
21112 return (frame.id % 2) === 0;
21113 }).filter(function (frame) {
21114 return frame.state.nodesAhead < 15;
21115 }).distinctUntilChanged(undefined, function (frame) {
21116 return frame.state.lastNode.key;
21119 _routeTrack$ = this.configuration$.mergeMap(function (conf) {
21120 return Observable_1.Observable.from(conf.paths);
21121 }).distinct(function (p) {
21122 return p.sequenceKey;
21123 }).mergeMap(function (path) {
21124 return _this._navigator.apiV3.sequenceByKey$([path.sequenceKey])
21125 .map(function (sequenceByKey) {
21126 return sequenceByKey[path.sequenceKey];
21128 }).combineLatest(this.configuration$, function (sequence, conf) {
21130 var instructionPlaces = [];
21131 for (var _i = 0, _a = conf.paths; _i < _a.length; _i++) {
21133 if (path.sequenceKey === sequence.key) {
21134 var nodeInstructions = [];
21135 var saveKey = false;
21136 for (var _b = 0, _c = sequence.keys; _b < _c.length; _b++) {
21138 if (path.startKey === key) {
21142 var description = null;
21143 for (var _d = 0, _e = path.infoKeys; _d < _e.length; _d++) {
21144 var infoKey = _e[_d];
21145 if (infoKey.key === key) {
21146 description = infoKey.description;
21149 nodeInstructions.push({ description: description, key: key });
21151 if (path.stopKey === key) {
21155 instructionPlaces.push({ nodeInstructions: nodeInstructions, place: i });
21159 return instructionPlaces;
21160 }).scan(function (routeTrack, instructionPlaces) {
21161 for (var _i = 0, instructionPlaces_1 = instructionPlaces; _i < instructionPlaces_1.length; _i++) {
21162 var instructionPlace = instructionPlaces_1[_i];
21163 routeTrack.nodeInstructionsOrdered[instructionPlace.place] = instructionPlace.nodeInstructions;
21165 routeTrack.nodeInstructions = _.flatten(routeTrack.nodeInstructionsOrdered);
21167 }, new RouteTrack());
21168 this._disposable = _slowedStream$
21169 .combineLatest(_routeTrack$, this.configuration$, function (frame, routeTrack, conf) {
21170 return { conf: conf, frame: frame, routeTrack: routeTrack };
21171 }).scan(function (routeState, rtAndFrame) {
21172 if (rtAndFrame.conf.playing === undefined || rtAndFrame.conf.playing) {
21173 routeState.routeTrack = rtAndFrame.routeTrack;
21174 routeState.currentNode = rtAndFrame.frame.state.currentNode;
21175 routeState.lastNode = rtAndFrame.frame.state.lastNode;
21176 routeState.playing = true;
21179 _this._navigator.stateService.cutNodes();
21180 routeState.playing = false;
21183 }, new RouteState())
21184 .filter(function (routeState) {
21185 return routeState.playing;
21186 }).filter(function (routeState) {
21187 for (var _i = 0, _a = routeState.routeTrack.nodeInstructions; _i < _a.length; _i++) {
21188 var nodeInstruction = _a[_i];
21189 if (!nodeInstruction) {
21192 if (nodeInstruction.key === routeState.lastNode.key) {
21197 }).distinctUntilChanged(undefined, function (routeState) {
21198 return routeState.lastNode.key;
21199 }).mergeMap(function (routeState) {
21201 for (var _i = 0, _a = routeState.routeTrack.nodeInstructions; _i < _a.length; _i++) {
21202 var nodeInstruction = _a[_i];
21203 if (nodeInstruction.key === routeState.lastNode.key) {
21208 var nextInstruction = routeState.routeTrack.nodeInstructions[i + 1];
21209 if (!nextInstruction) {
21210 return Observable_1.Observable.of(null);
21212 return _this._navigator.graphService.cacheNode$(nextInstruction.key);
21213 }).combineLatest(this.configuration$, function (node, conf) {
21214 return { conf: conf, node: node };
21215 }).filter(function (cAN) {
21216 return cAN.node !== null && cAN.conf.playing;
21217 }).pluck("node").subscribe(this._navigator.stateService.appendNode$);
21218 this._disposableDescription = this._navigator.stateService.currentNode$
21219 .combineLatest(_routeTrack$, this.configuration$, function (node, routeTrack, conf) {
21220 if (conf.playing !== undefined && !conf.playing) {
21223 var description = null;
21224 for (var _i = 0, _a = routeTrack.nodeInstructions; _i < _a.length; _i++) {
21225 var nodeInstruction = _a[_i];
21226 if (nodeInstruction.key === node.key) {
21227 description = nodeInstruction.description;
21231 return description;
21232 }).scan(function (descriptionState, description) {
21233 if (description !== descriptionState.description && description !== null) {
21234 descriptionState.description = description;
21235 descriptionState.showsLeft = 6;
21238 descriptionState.showsLeft--;
21240 if (description === "quit") {
21241 descriptionState.description = null;
21243 return descriptionState;
21244 }, new DescriptionState()).map(function (descriptionState) {
21245 if (descriptionState.showsLeft > 0 && descriptionState.description) {
21246 return { name: _this._name, vnode: _this._getRouteAnnotationNode(descriptionState.description) };
21249 return { name: _this._name, vnode: vd.h("div", []) };
21251 }).subscribe(this._container.domRenderer.render$);
21253 RouteComponent.prototype._deactivate = function () {
21254 this._disposable.unsubscribe();
21255 this._disposableDescription.unsubscribe();
21257 RouteComponent.prototype._getDefaultConfiguration = function () {
21260 RouteComponent.prototype.play = function () {
21261 this.configure({ playing: true });
21263 RouteComponent.prototype.stop = function () {
21264 this.configure({ playing: false });
21266 RouteComponent.prototype._getRouteAnnotationNode = function (description) {
21267 return vd.h("div.RouteFrame", {}, [
21268 vd.h("p", { textContent: description }, []),
21271 return RouteComponent;
21272 }(Component_1.Component));
21273 RouteComponent.componentName = "route";
21274 exports.RouteComponent = RouteComponent;
21275 Component_1.ComponentService.register(RouteComponent);
21276 Object.defineProperty(exports, "__esModule", { value: true });
21277 exports.default = RouteComponent;
21279 },{"../Component":224,"rxjs/Observable":28,"rxjs/add/observable/fromPromise":42,"rxjs/add/observable/of":44,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinct":56,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/pluck":69,"rxjs/add/operator/scan":72,"underscore":175,"virtual-dom":180}],250:[function(require,module,exports){
21281 var __extends = (this && this.__extends) || function (d, b) {
21282 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
21283 function __() { this.constructor = d; }
21284 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
21286 var Observable_1 = require("rxjs/Observable");
21287 require("rxjs/add/operator/buffer");
21288 require("rxjs/add/operator/debounceTime");
21289 require("rxjs/add/operator/filter");
21290 require("rxjs/add/operator/map");
21291 require("rxjs/add/operator/scan");
21292 var Component_1 = require("../Component");
21293 var StatsComponent = (function (_super) {
21294 __extends(StatsComponent, _super);
21295 function StatsComponent(name, container, navigator) {
21296 return _super.call(this, name, container, navigator) || this;
21298 StatsComponent.prototype._activate = function () {
21300 this._sequenceSubscription = this._navigator.stateService.currentNode$
21301 .scan(function (keys, node) {
21302 var sKey = node.sequenceKey;
21304 if (!(sKey in keys.reported)) {
21305 keys.report = [sKey];
21306 keys.reported[sKey] = true;
21309 }, { report: [], reported: {} })
21310 .filter(function (keys) {
21311 return keys.report.length > 0;
21313 .mergeMap(function (keys) {
21314 return _this._navigator.apiV3.sequenceViewAdd$(keys.report)
21315 .catch(function (error, caught) {
21316 console.error("Failed to report sequence stats (" + keys.report + ")", error);
21317 return Observable_1.Observable.empty();
21320 .subscribe(function () { });
21321 this._imageSubscription = this._navigator.stateService.currentNode$
21322 .map(function (node) {
21325 .buffer(this._navigator.stateService.currentNode$.debounceTime(5000))
21326 .scan(function (keys, newKeys) {
21328 for (var _i = 0, newKeys_1 = newKeys; _i < newKeys_1.length; _i++) {
21329 var key = newKeys_1[_i];
21330 if (!(key in keys.reported)) {
21331 keys.report.push(key);
21332 keys.reported[key] = true;
21336 }, { report: [], reported: {} })
21337 .filter(function (keys) {
21338 return keys.report.length > 0;
21340 .mergeMap(function (keys) {
21341 return _this._navigator.apiV3.imageViewAdd$(keys.report)
21342 .catch(function (error, caught) {
21343 console.error("Failed to report image stats (" + keys.report + ")", error);
21344 return Observable_1.Observable.empty();
21347 .subscribe(function () { });
21349 StatsComponent.prototype._deactivate = function () {
21350 this._sequenceSubscription.unsubscribe();
21351 this._imageSubscription.unsubscribe();
21353 StatsComponent.prototype._getDefaultConfiguration = function () {
21356 return StatsComponent;
21357 }(Component_1.Component));
21358 StatsComponent.componentName = "stats";
21359 exports.StatsComponent = StatsComponent;
21360 Component_1.ComponentService.register(StatsComponent);
21361 Object.defineProperty(exports, "__esModule", { value: true });
21362 exports.default = StatsComponent;
21364 },{"../Component":224,"rxjs/Observable":28,"rxjs/add/operator/buffer":48,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72}],251:[function(require,module,exports){
21365 /// <reference path="../../../typings/index.d.ts" />
21367 var __extends = (this && this.__extends) || function (d, b) {
21368 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
21369 function __() { this.constructor = d; }
21370 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
21372 var vd = require("virtual-dom");
21373 var Observable_1 = require("rxjs/Observable");
21374 var Subject_1 = require("rxjs/Subject");
21375 require("rxjs/add/observable/combineLatest");
21376 require("rxjs/add/operator/do");
21377 require("rxjs/add/operator/distinctUntilChanged");
21378 require("rxjs/add/operator/filter");
21379 require("rxjs/add/operator/map");
21380 require("rxjs/add/operator/share");
21381 var Component_1 = require("../../Component");
21383 * @class DirectionComponent
21384 * @classdesc Component showing navigation arrows for steps and turns.
21386 var DirectionComponent = (function (_super) {
21387 __extends(DirectionComponent, _super);
21388 function DirectionComponent(name, container, navigator) {
21389 var _this = _super.call(this, name, container, navigator) || this;
21390 _this._renderer = new Component_1.DirectionDOMRenderer(_this.defaultConfiguration, container.element);
21391 _this._hoveredKeySubject$ = new Subject_1.Subject();
21392 _this._hoveredKey$ = _this._hoveredKeySubject$.share();
21395 Object.defineProperty(DirectionComponent.prototype, "hoveredKey$", {
21397 * Get hovered key observable.
21399 * @description An observable emitting the key of the node for the direction
21400 * arrow that is being hovered. When the mouse leaves a direction arrow null
21403 * @returns {Observable<string>}
21406 return this._hoveredKey$;
21412 * Set highlight key.
21414 * @description The arrow pointing towards the node corresponding to the
21415 * highlight key will be highlighted.
21417 * @param {string} highlightKey Key of node to be highlighted if existing
21420 DirectionComponent.prototype.setHighlightKey = function (highlightKey) {
21421 this.configure({ highlightKey: highlightKey });
21424 * Set min width of container element.
21426 * @description Set min width of the non transformed container element holding
21427 * the navigation arrows. If the min width is larger than the max width the
21428 * min width value will be used.
21430 * The container element is automatically resized when the resize
21431 * method on the Viewer class is called.
21433 * @param {number} minWidth
21435 DirectionComponent.prototype.setMinWidth = function (minWidth) {
21436 this.configure({ minWidth: minWidth });
21439 * Set max width of container element.
21441 * @description Set max width of the non transformed container element holding
21442 * the navigation arrows. If the min width is larger than the max width the
21443 * min width value will be used.
21445 * The container element is automatically resized when the resize
21446 * method on the Viewer class is called.
21448 * @param {number} minWidth
21450 DirectionComponent.prototype.setMaxWidth = function (maxWidth) {
21451 this.configure({ maxWidth: maxWidth });
21454 DirectionComponent.prototype.resize = function () {
21455 this._renderer.resize(this._container.element);
21457 DirectionComponent.prototype._activate = function () {
21459 this._configurationSubscription = this._configuration$
21460 .subscribe(function (configuration) {
21461 _this._renderer.setConfiguration(configuration);
21463 this._nodeSubscription = this._navigator.stateService.currentNode$
21464 .do(function (node) {
21465 _this._container.domRenderer.render$.next({ name: _this._name, vnode: vd.h("div", {}, []) });
21466 _this._renderer.setNode(node);
21468 .withLatestFrom(this._configuration$)
21469 .switchMap(function (nc) {
21471 var configuration = nc[1];
21472 return node.spatialEdges$
21473 .withLatestFrom(configuration.distinguishSequence ?
21474 _this._navigator.graphService
21475 .cacheSequence$(node.sequenceKey)
21476 .catch(function (error, caught) {
21477 console.error("Failed to cache sequence (" + node.sequenceKey + ")", error);
21478 return Observable_1.Observable.empty();
21480 Observable_1.Observable.of(null));
21482 .subscribe(function (es) {
21483 _this._renderer.setEdges(es[0], es[1]);
21485 this._renderCameraSubscription = this._container.renderService.renderCameraFrame$
21486 .do(function (renderCamera) {
21487 _this._renderer.setRenderCamera(renderCamera);
21489 .map(function (renderCamera) {
21490 return _this._renderer;
21492 .filter(function (renderer) {
21493 return renderer.needsRender;
21495 .map(function (renderer) {
21496 return { name: _this._name, vnode: renderer.render(_this._navigator) };
21498 .subscribe(this._container.domRenderer.render$);
21499 this._hoveredKeySubscription = Observable_1.Observable
21501 this._container.domRenderer.element$,
21502 this._container.renderService.renderCamera$,
21503 this._container.mouseService.mouseMove$.startWith(null),
21504 this._container.mouseService.mouseUp$.startWith(null),
21505 ], function (e, rc, mm, mu) {
21508 .map(function (element) {
21509 var elements = element.getElementsByClassName("DirectionsPerspective");
21510 for (var i = 0; i < elements.length; i++) {
21511 var hovered = elements.item(i).querySelector(":hover");
21512 if (hovered != null && hovered.hasAttribute("data-key")) {
21513 return hovered.getAttribute("data-key");
21518 .distinctUntilChanged()
21519 .subscribe(this._hoveredKeySubject$);
21521 DirectionComponent.prototype._deactivate = function () {
21522 this._configurationSubscription.unsubscribe();
21523 this._nodeSubscription.unsubscribe();
21524 this._renderCameraSubscription.unsubscribe();
21525 this._hoveredKeySubscription.unsubscribe();
21527 DirectionComponent.prototype._getDefaultConfiguration = function () {
21529 distinguishSequence: false,
21534 return DirectionComponent;
21535 }(Component_1.Component));
21537 DirectionComponent.componentName = "direction";
21538 exports.DirectionComponent = DirectionComponent;
21539 Component_1.ComponentService.register(DirectionComponent);
21540 Object.defineProperty(exports, "__esModule", { value: true });
21541 exports.default = DirectionComponent;
21543 },{"../../Component":224,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/share":73,"virtual-dom":180}],252:[function(require,module,exports){
21545 var Geo_1 = require("../../Geo");
21547 * @class DirectionDOMCalculator
21548 * @classdesc Helper class for calculating DOM CSS properties.
21550 var DirectionDOMCalculator = (function () {
21551 function DirectionDOMCalculator(configuration, element) {
21552 this._spatial = new Geo_1.Spatial();
21553 this._minThresholdWidth = 320;
21554 this._maxThresholdWidth = 1480;
21555 this._minThresholdHeight = 240;
21556 this._maxThresholdHeight = 820;
21557 this._configure(configuration);
21558 this._resize(element);
21561 Object.defineProperty(DirectionDOMCalculator.prototype, "minWidth", {
21563 return this._minWidth;
21568 Object.defineProperty(DirectionDOMCalculator.prototype, "maxWidth", {
21570 return this._maxWidth;
21575 Object.defineProperty(DirectionDOMCalculator.prototype, "containerWidth", {
21577 return this._containerWidth;
21582 Object.defineProperty(DirectionDOMCalculator.prototype, "containerWidthCss", {
21584 return this._containerWidthCss;
21589 Object.defineProperty(DirectionDOMCalculator.prototype, "containerMarginCss", {
21591 return this._containerMarginCss;
21596 Object.defineProperty(DirectionDOMCalculator.prototype, "containerLeftCss", {
21598 return this._containerLeftCss;
21603 Object.defineProperty(DirectionDOMCalculator.prototype, "containerHeight", {
21605 return this._containerHeight;
21610 Object.defineProperty(DirectionDOMCalculator.prototype, "containerHeightCss", {
21612 return this._containerHeightCss;
21617 Object.defineProperty(DirectionDOMCalculator.prototype, "containerBottomCss", {
21619 return this._containerBottomCss;
21624 Object.defineProperty(DirectionDOMCalculator.prototype, "stepCircleSize", {
21626 return this._stepCircleSize;
21631 Object.defineProperty(DirectionDOMCalculator.prototype, "stepCircleSizeCss", {
21633 return this._stepCircleSizeCss;
21638 Object.defineProperty(DirectionDOMCalculator.prototype, "stepCircleMarginCss", {
21640 return this._stepCircleMarginCss;
21645 Object.defineProperty(DirectionDOMCalculator.prototype, "turnCircleSize", {
21647 return this._turnCircleSize;
21652 Object.defineProperty(DirectionDOMCalculator.prototype, "turnCircleSizeCss", {
21654 return this._turnCircleSizeCss;
21659 Object.defineProperty(DirectionDOMCalculator.prototype, "outerRadius", {
21661 return this._outerRadius;
21666 Object.defineProperty(DirectionDOMCalculator.prototype, "innerRadius", {
21668 return this._innerRadius;
21673 Object.defineProperty(DirectionDOMCalculator.prototype, "shadowOffset", {
21675 return this._shadowOffset;
21681 * Configures the min and max width values.
21683 * @param {IDirectionConfiguration} configuration Configuration
21684 * with min and max width values.
21686 DirectionDOMCalculator.prototype.configure = function (configuration) {
21687 this._configure(configuration);
21691 * Resizes all properties according to the width and height
21694 * @param {HTMLElement} element The container element from which to extract
21695 * the width and height.
21697 DirectionDOMCalculator.prototype.resize = function (element) {
21698 this._resize(element);
21702 * Calculates the coordinates on the unit circle for an angle.
21704 * @param {number} angle Angle in radians.
21705 * @returns {Array<number>} The x and y coordinates on the unit circle.
21707 DirectionDOMCalculator.prototype.angleToCoordinates = function (angle) {
21708 return [Math.cos(angle), Math.sin(angle)];
21711 * Calculates the coordinates on the unit circle for the
21712 * relative angle between the first and second angle.
21714 * @param {number} first Angle in radians.
21715 * @param {number} second Angle in radians.
21716 * @returns {Array<number>} The x and y coordinates on the unit circle
21717 * for the relative angle between the first and second angle.
21719 DirectionDOMCalculator.prototype.relativeAngleToCoordiantes = function (first, second) {
21720 var relativeAngle = this._spatial.wrapAngle(first - second);
21721 return this.angleToCoordinates(relativeAngle);
21723 DirectionDOMCalculator.prototype._configure = function (configuration) {
21724 this._minWidth = configuration.minWidth;
21725 this._maxWidth = this._getMaxWidth(configuration.minWidth, configuration.maxWidth);
21727 DirectionDOMCalculator.prototype._resize = function (element) {
21728 this._elementWidth = element.offsetWidth;
21729 this._elementHeight = element.offsetHeight;
21731 DirectionDOMCalculator.prototype._reset = function () {
21732 this._containerWidth = this._getContainerWidth(this._elementWidth, this._elementHeight);
21733 this._containerHeight = this._getContainerHeight(this.containerWidth);
21734 this._stepCircleSize = this._getStepCircleDiameter(this._containerHeight);
21735 this._turnCircleSize = this._getTurnCircleDiameter(this.containerHeight);
21736 this._outerRadius = this._getOuterRadius(this._containerHeight);
21737 this._innerRadius = this._getInnerRadius(this._containerHeight);
21738 this._shadowOffset = 3;
21739 this._containerWidthCss = this._numberToCssPixels(this._containerWidth);
21740 this._containerMarginCss = this._numberToCssPixels(-0.5 * this._containerWidth);
21741 this._containerLeftCss = this._numberToCssPixels(Math.floor(0.5 * this._elementWidth));
21742 this._containerHeightCss = this._numberToCssPixels(this._containerHeight);
21743 this._containerBottomCss = this._numberToCssPixels(Math.floor(-0.08 * this._containerHeight));
21744 this._stepCircleSizeCss = this._numberToCssPixels(this._stepCircleSize);
21745 this._stepCircleMarginCss = this._numberToCssPixels(-0.5 * this._stepCircleSize);
21746 this._turnCircleSizeCss = this._numberToCssPixels(this._turnCircleSize);
21748 DirectionDOMCalculator.prototype._getContainerWidth = function (elementWidth, elementHeight) {
21749 var relativeWidth = (elementWidth - this._minThresholdWidth) / (this._maxThresholdWidth - this._minThresholdWidth);
21750 var relativeHeight = (elementHeight - this._minThresholdHeight) / (this._maxThresholdHeight - this._minThresholdHeight);
21751 var coeff = Math.max(0, Math.min(1, Math.min(relativeWidth, relativeHeight)));
21752 coeff = 0.04 * Math.round(25 * coeff);
21753 return this._minWidth + coeff * (this._maxWidth - this._minWidth);
21755 DirectionDOMCalculator.prototype._getContainerHeight = function (containerWidth) {
21756 return 0.77 * containerWidth;
21758 DirectionDOMCalculator.prototype._getStepCircleDiameter = function (containerHeight) {
21759 return 0.34 * containerHeight;
21761 DirectionDOMCalculator.prototype._getTurnCircleDiameter = function (containerHeight) {
21762 return 0.3 * containerHeight;
21764 DirectionDOMCalculator.prototype._getOuterRadius = function (containerHeight) {
21765 return 0.31 * containerHeight;
21767 DirectionDOMCalculator.prototype._getInnerRadius = function (containerHeight) {
21768 return 0.125 * containerHeight;
21770 DirectionDOMCalculator.prototype._numberToCssPixels = function (value) {
21771 return value + "px";
21773 DirectionDOMCalculator.prototype._getMaxWidth = function (value, minWidth) {
21774 return value > minWidth ? value : minWidth;
21776 return DirectionDOMCalculator;
21778 exports.DirectionDOMCalculator = DirectionDOMCalculator;
21779 Object.defineProperty(exports, "__esModule", { value: true });
21780 exports.default = DirectionDOMCalculator;
21782 },{"../../Geo":227}],253:[function(require,module,exports){
21783 /// <reference path="../../../typings/index.d.ts" />
21785 var vd = require("virtual-dom");
21786 var Component_1 = require("../../Component");
21787 var Edge_1 = require("../../Edge");
21788 var Geo_1 = require("../../Geo");
21790 * @class DirectionDOMRenderer
21791 * @classdesc DOM renderer for direction arrows.
21793 var DirectionDOMRenderer = (function () {
21794 function DirectionDOMRenderer(configuration, element) {
21795 this._isEdge = false;
21796 this._spatial = new Geo_1.Spatial();
21797 this._calculator = new Component_1.DirectionDOMCalculator(configuration, element);
21799 this._rotation = { phi: 0, theta: 0 };
21800 this._epsilon = 0.5 * Math.PI / 180;
21801 this._highlightKey = null;
21802 this._distinguishSequence = false;
21803 this._needsRender = false;
21804 this._stepEdges = [];
21805 this._turnEdges = [];
21806 this._panoEdges = [];
21807 this._sequenceEdgeKeys = [];
21808 this._stepDirections = [
21809 Edge_1.EdgeDirection.StepForward,
21810 Edge_1.EdgeDirection.StepBackward,
21811 Edge_1.EdgeDirection.StepLeft,
21812 Edge_1.EdgeDirection.StepRight,
21814 this._turnDirections = [
21815 Edge_1.EdgeDirection.TurnLeft,
21816 Edge_1.EdgeDirection.TurnRight,
21817 Edge_1.EdgeDirection.TurnU,
21819 this._turnNames = {};
21820 this._turnNames[Edge_1.EdgeDirection.TurnLeft] = "TurnLeft";
21821 this._turnNames[Edge_1.EdgeDirection.TurnRight] = "TurnRight";
21822 this._turnNames[Edge_1.EdgeDirection.TurnU] = "TurnAround";
21823 // detects IE 8-11, then Edge 20+.
21824 var isIE = !!document.documentMode;
21825 this._isEdge = !isIE && !!window.StyleMedia;
21827 Object.defineProperty(DirectionDOMRenderer.prototype, "needsRender", {
21829 * Get needs render.
21831 * @returns {boolean} Value indicating whether render should be called.
21834 return this._needsRender;
21840 * Renders virtual DOM elements.
21842 * @description Calling render resets the needs render property.
21844 DirectionDOMRenderer.prototype.render = function (navigator) {
21845 this._needsRender = false;
21846 var rotation = this._rotation;
21849 if (this._node.pano) {
21850 steps = steps.concat(this._createPanoArrows(navigator, rotation));
21853 steps = steps.concat(this._createPerspectiveToPanoArrows(navigator, rotation));
21854 steps = steps.concat(this._createStepArrows(navigator, rotation));
21855 turns = turns.concat(this._createTurnArrows(navigator));
21857 return this._getContainer(steps, turns, rotation);
21859 DirectionDOMRenderer.prototype.setEdges = function (edgeStatus, sequence) {
21860 this._setEdges(edgeStatus, sequence);
21861 this._setNeedsRender();
21864 * Set node for which to show edges.
21866 * @param {Node} node
21868 DirectionDOMRenderer.prototype.setNode = function (node) {
21870 this._clearEdges();
21871 this._setNeedsRender();
21874 * Set the render camera to use for calculating rotations.
21876 * @param {RenderCamera} renderCamera
21878 DirectionDOMRenderer.prototype.setRenderCamera = function (renderCamera) {
21879 var rotation = renderCamera.rotation;
21880 if (Math.abs(rotation.phi - this._rotation.phi) < this._epsilon) {
21883 this._rotation = rotation;
21884 this._setNeedsRender();
21887 * Set configuration values.
21889 * @param {IDirectionConfiguration} configuration
21891 DirectionDOMRenderer.prototype.setConfiguration = function (configuration) {
21892 var needsRender = false;
21893 if (this._highlightKey !== configuration.highlightKey ||
21894 this._distinguishSequence !== configuration.distinguishSequence) {
21895 this._highlightKey = configuration.highlightKey;
21896 this._distinguishSequence = configuration.distinguishSequence;
21897 needsRender = true;
21899 if (this._calculator.minWidth !== configuration.minWidth ||
21900 this._calculator.maxWidth !== configuration.maxWidth) {
21901 this._calculator.configure(configuration);
21902 needsRender = true;
21905 this._setNeedsRender();
21909 * Detect the element's width and height and resize
21910 * elements accordingly.
21912 * @param {HTMLElement} element Viewer container element.
21914 DirectionDOMRenderer.prototype.resize = function (element) {
21915 this._calculator.resize(element);
21916 this._setNeedsRender();
21918 DirectionDOMRenderer.prototype._setNeedsRender = function () {
21919 if (this._node != null) {
21920 this._needsRender = true;
21923 DirectionDOMRenderer.prototype._clearEdges = function () {
21924 this._stepEdges = [];
21925 this._turnEdges = [];
21926 this._panoEdges = [];
21927 this._sequenceEdgeKeys = [];
21929 DirectionDOMRenderer.prototype._setEdges = function (edgeStatus, sequence) {
21930 this._stepEdges = [];
21931 this._turnEdges = [];
21932 this._panoEdges = [];
21933 this._sequenceEdgeKeys = [];
21934 for (var _i = 0, _a = edgeStatus.edges; _i < _a.length; _i++) {
21936 var direction = edge.data.direction;
21937 if (this._stepDirections.indexOf(direction) > -1) {
21938 this._stepEdges.push(edge);
21941 if (this._turnDirections.indexOf(direction) > -1) {
21942 this._turnEdges.push(edge);
21945 if (edge.data.direction === Edge_1.EdgeDirection.Pano) {
21946 this._panoEdges.push(edge);
21949 if (this._distinguishSequence && sequence != null) {
21950 var edges = this._panoEdges
21951 .concat(this._stepEdges)
21952 .concat(this._turnEdges);
21953 for (var _b = 0, edges_1 = edges; _b < edges_1.length; _b++) {
21954 var edge = edges_1[_b];
21955 var edgeKey = edge.to;
21956 for (var _c = 0, _d = sequence.keys; _c < _d.length; _c++) {
21957 var sequenceKey = _d[_c];
21958 if (sequenceKey === edgeKey) {
21959 this._sequenceEdgeKeys.push(edgeKey);
21966 DirectionDOMRenderer.prototype._createPanoArrows = function (navigator, rotation) {
21968 for (var _i = 0, _a = this._panoEdges; _i < _a.length; _i++) {
21969 var panoEdge = _a[_i];
21970 arrows.push(this._createVNodeByKey(navigator, panoEdge.to, panoEdge.data.worldMotionAzimuth, rotation, this._calculator.outerRadius, "DirectionsArrowPano"));
21972 for (var _b = 0, _c = this._stepEdges; _b < _c.length; _b++) {
21973 var stepEdge = _c[_b];
21974 arrows.push(this._createPanoToPerspectiveArrow(navigator, stepEdge.to, stepEdge.data.worldMotionAzimuth, rotation, stepEdge.data.direction));
21978 DirectionDOMRenderer.prototype._createPanoToPerspectiveArrow = function (navigator, key, azimuth, rotation, direction) {
21979 var threshold = Math.PI / 8;
21980 var relativePhi = rotation.phi;
21981 switch (direction) {
21982 case Edge_1.EdgeDirection.StepBackward:
21983 relativePhi = rotation.phi - Math.PI;
21985 case Edge_1.EdgeDirection.StepLeft:
21986 relativePhi = rotation.phi + Math.PI / 2;
21988 case Edge_1.EdgeDirection.StepRight:
21989 relativePhi = rotation.phi - Math.PI / 2;
21994 if (Math.abs(this._spatial.wrapAngle(azimuth - relativePhi)) < threshold) {
21995 return this._createVNodeByKey(navigator, key, azimuth, rotation, this._calculator.outerRadius, "DirectionsArrowStep");
21997 return this._createVNodeDisabled(key, azimuth, rotation);
21999 DirectionDOMRenderer.prototype._createPerspectiveToPanoArrows = function (navigator, rotation) {
22001 for (var _i = 0, _a = this._panoEdges; _i < _a.length; _i++) {
22002 var panoEdge = _a[_i];
22003 arrows.push(this._createVNodeByKey(navigator, panoEdge.to, panoEdge.data.worldMotionAzimuth, rotation, this._calculator.innerRadius, "DirectionsArrowPano", true));
22007 DirectionDOMRenderer.prototype._createStepArrows = function (navigator, rotation) {
22009 for (var _i = 0, _a = this._stepEdges; _i < _a.length; _i++) {
22010 var stepEdge = _a[_i];
22011 arrows.push(this._createVNodeByDirection(navigator, stepEdge.to, stepEdge.data.worldMotionAzimuth, rotation, stepEdge.data.direction));
22015 DirectionDOMRenderer.prototype._createTurnArrows = function (navigator) {
22017 for (var _i = 0, _a = this._turnEdges; _i < _a.length; _i++) {
22018 var turnEdge = _a[_i];
22019 var direction = turnEdge.data.direction;
22020 var name_1 = this._turnNames[direction];
22021 turns.push(this._createVNodeByTurn(navigator, turnEdge.to, name_1, direction));
22025 DirectionDOMRenderer.prototype._createVNodeByKey = function (navigator, key, azimuth, rotation, offset, className, shiftVertically) {
22026 var onClick = function (e) {
22027 navigator.moveToKey$(key)
22028 .subscribe(function (node) { return; }, function (error) { console.error(error); });
22030 return this._createVNode(key, azimuth, rotation, offset, className, "DirectionsCircle", onClick, shiftVertically);
22032 DirectionDOMRenderer.prototype._createVNodeByDirection = function (navigator, key, azimuth, rotation, direction) {
22033 var onClick = function (e) {
22034 navigator.moveDir$(direction)
22035 .subscribe(function (node) { return; }, function (error) { console.error(error); });
22037 return this._createVNode(key, azimuth, rotation, this._calculator.outerRadius, "DirectionsArrowStep", "DirectionsCircle", onClick);
22039 DirectionDOMRenderer.prototype._createVNodeByTurn = function (navigator, key, className, direction) {
22040 var onClick = function (e) {
22041 navigator.moveDir$(direction)
22042 .subscribe(function (node) { return; }, function (error) { console.error(error); });
22045 height: this._calculator.turnCircleSizeCss,
22046 transform: "rotate(0)",
22047 width: this._calculator.turnCircleSizeCss,
22049 switch (direction) {
22050 case Edge_1.EdgeDirection.TurnLeft:
22051 style.left = "5px";
22054 case Edge_1.EdgeDirection.TurnRight:
22055 style.right = "5px";
22058 case Edge_1.EdgeDirection.TurnU:
22059 style.left = "5px";
22060 style.bottom = "5px";
22065 var circleProperties = {
22072 var circleClassName = "TurnCircle";
22073 if (this._sequenceEdgeKeys.indexOf(key) > -1) {
22074 circleClassName += "Sequence";
22076 if (this._highlightKey === key) {
22077 circleClassName += "Highlight";
22079 var turn = vd.h("div." + className, {}, []);
22080 return vd.h("div." + circleClassName, circleProperties, [turn]);
22082 DirectionDOMRenderer.prototype._createVNodeDisabled = function (key, azimuth, rotation) {
22083 return this._createVNode(key, azimuth, rotation, this._calculator.outerRadius, "DirectionsArrowDisabled", "DirectionsCircleDisabled");
22085 DirectionDOMRenderer.prototype._createVNode = function (key, azimuth, rotation, radius, className, circleClassName, onClick, shiftVertically) {
22086 var translation = this._calculator.angleToCoordinates(azimuth - rotation.phi);
22087 // rotate 90 degrees clockwise and flip over X-axis
22088 var translationX = Math.round(-radius * translation[1] + 0.5 * this._calculator.containerWidth);
22089 var translationY = Math.round(-radius * translation[0] + 0.5 * this._calculator.containerHeight);
22090 var shadowTranslation = this._calculator.relativeAngleToCoordiantes(azimuth, rotation.phi);
22091 var shadowOffset = this._calculator.shadowOffset;
22092 var shadowTranslationX = -shadowOffset * shadowTranslation[1];
22093 var shadowTranslationY = shadowOffset * shadowTranslation[0];
22094 var filter = "drop-shadow(" + shadowTranslationX + "px " + shadowTranslationY + "px 1px rgba(0,0,0,0.8))";
22097 "-webkit-filter": filter,
22101 var chevron = vd.h("div." + className, properties, []);
22102 var azimuthDeg = -this._spatial.radToDeg(azimuth - rotation.phi);
22103 var circleTransform = shiftVertically ?
22104 "translate(" + translationX + "px, " + translationY + "px) rotate(" + azimuthDeg + "deg) translateZ(-0.01px)" :
22105 "translate(" + translationX + "px, " + translationY + "px) rotate(" + azimuthDeg + "deg)";
22106 var circleProperties = {
22107 attributes: { "data-key": key },
22110 height: this._calculator.stepCircleSizeCss,
22111 marginLeft: this._calculator.stepCircleMarginCss,
22112 marginTop: this._calculator.stepCircleMarginCss,
22113 transform: circleTransform,
22114 width: this._calculator.stepCircleSizeCss,
22117 if (this._sequenceEdgeKeys.indexOf(key) > -1) {
22118 circleClassName += "Sequence";
22120 if (this._highlightKey === key) {
22121 circleClassName += "Highlight";
22123 return vd.h("div." + circleClassName, circleProperties, [chevron]);
22125 DirectionDOMRenderer.prototype._getContainer = function (steps, turns, rotation) {
22126 // edge does not handle hover on perspective transforms.
22127 var transform = this._isEdge ?
22129 "perspective(" + this._calculator.containerWidthCss + ") rotateX(60deg)";
22131 oncontextmenu: function (event) { event.preventDefault(); },
22133 bottom: this._calculator.containerBottomCss,
22134 height: this._calculator.containerHeightCss,
22135 left: this._calculator.containerLeftCss,
22136 marginLeft: this._calculator.containerMarginCss,
22137 transform: transform,
22138 width: this._calculator.containerWidthCss,
22141 return vd.h("div.DirectionsPerspective", properties, turns.concat(steps));
22143 return DirectionDOMRenderer;
22145 exports.DirectionDOMRenderer = DirectionDOMRenderer;
22146 Object.defineProperty(exports, "__esModule", { value: true });
22147 exports.default = DirectionDOMRenderer;
22149 },{"../../Component":224,"../../Edge":225,"../../Geo":227,"virtual-dom":180}],254:[function(require,module,exports){
22151 var __extends = (this && this.__extends) || function (d, b) {
22152 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
22153 function __() { this.constructor = d; }
22154 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
22156 var Observable_1 = require("rxjs/Observable");
22157 var Subject_1 = require("rxjs/Subject");
22158 require("rxjs/add/operator/catch");
22159 require("rxjs/add/operator/combineLatest");
22160 require("rxjs/add/operator/debounceTime");
22161 require("rxjs/add/operator/distinctUntilChanged");
22162 require("rxjs/add/operator/filter");
22163 require("rxjs/add/operator/map");
22164 require("rxjs/add/operator/pairwise");
22165 require("rxjs/add/operator/publish");
22166 require("rxjs/add/operator/publishReplay");
22167 require("rxjs/add/operator/scan");
22168 require("rxjs/add/operator/skipWhile");
22169 require("rxjs/add/operator/startWith");
22170 require("rxjs/add/operator/switchMap");
22171 require("rxjs/add/operator/takeUntil");
22172 require("rxjs/add/operator/withLatestFrom");
22173 var Component_1 = require("../../Component");
22174 var Render_1 = require("../../Render");
22175 var Tiles_1 = require("../../Tiles");
22176 var Utils_1 = require("../../Utils");
22177 var ImagePlaneComponent = (function (_super) {
22178 __extends(ImagePlaneComponent, _super);
22179 function ImagePlaneComponent(name, container, navigator) {
22180 var _this = _super.call(this, name, container, navigator) || this;
22181 _this._imageTileLoader = new Tiles_1.ImageTileLoader(Utils_1.Urls.tileScheme, Utils_1.Urls.tileDomain, Utils_1.Urls.origin);
22182 _this._roiCalculator = new Tiles_1.RegionOfInterestCalculator();
22183 _this._rendererOperation$ = new Subject_1.Subject();
22184 _this._rendererCreator$ = new Subject_1.Subject();
22185 _this._rendererDisposer$ = new Subject_1.Subject();
22186 _this._renderer$ = _this._rendererOperation$
22187 .scan(function (renderer, operation) {
22188 return operation(renderer);
22190 .filter(function (renderer) {
22191 return renderer != null;
22193 .distinctUntilChanged(undefined, function (renderer) {
22194 return renderer.frameId;
22196 _this._rendererCreator$
22198 return function (renderer) {
22199 if (renderer != null) {
22200 throw new Error("Multiple image plane states can not be created at the same time");
22202 return new Component_1.ImagePlaneGLRenderer();
22205 .subscribe(_this._rendererOperation$);
22206 _this._rendererDisposer$
22208 return function (renderer) {
22209 renderer.dispose();
22213 .subscribe(_this._rendererOperation$);
22216 ImagePlaneComponent.prototype._activate = function () {
22218 this._rendererSubscription = this._renderer$
22219 .map(function (renderer) {
22223 frameId: renderer.frameId,
22224 needsRender: renderer.needsRender,
22225 render: renderer.render.bind(renderer),
22226 stage: Render_1.GLRenderStage.Background,
22229 renderer.clearNeedsRender();
22232 .subscribe(this._container.glRenderer.render$);
22233 this._rendererCreator$.next(null);
22234 this._stateSubscription = this._navigator.stateService.currentState$
22235 .map(function (frame) {
22236 return function (renderer) {
22237 renderer.updateFrame(frame);
22241 .subscribe(this._rendererOperation$);
22242 var textureProvider$ = this._navigator.stateService.currentState$
22243 .distinctUntilChanged(undefined, function (frame) {
22244 return frame.state.currentNode.key;
22246 .combineLatest(this._configuration$)
22247 .filter(function (args) {
22248 return args[1].imageTiling === true;
22250 .map(function (args) {
22253 .withLatestFrom(this._container.glRenderer.webGLRenderer$, this._container.renderService.size$)
22254 .map(function (args) {
22255 var state = args[0].state;
22256 var renderer = args[1];
22257 var viewportSize = args[2];
22258 var currentNode = state.currentNode;
22259 var currentTransform = state.currentTransform;
22260 var tileSize = Math.max(viewportSize.width, viewportSize.height) > 1024 ? 1024 : 512;
22261 return new Tiles_1.TextureProvider(currentNode.key, currentTransform.basicWidth, currentTransform.basicHeight, tileSize, currentNode.image, _this._imageTileLoader, new Tiles_1.ImageTileStore(), renderer);
22265 this._textureProviderSubscription = textureProvider$.subscribe(function () { });
22266 this._setTextureProviderSubscription = textureProvider$
22267 .map(function (provider) {
22268 return function (renderer) {
22269 renderer.setTextureProvider(provider.key, provider);
22273 .subscribe(this._rendererOperation$);
22274 this._abortTextureProviderSubscription = textureProvider$
22276 .subscribe(function (pair) {
22277 var previous = pair[0];
22280 var roiTrigger$ = this._container.renderService.renderCameraFrame$
22281 .map(function (renderCamera) {
22283 renderCamera.camera.position.clone(),
22284 renderCamera.camera.lookat.clone(),
22285 renderCamera.zoom.valueOf()
22289 .skipWhile(function (pls) {
22290 return pls[1][2] - pls[0][2] < 0 || pls[1][2] === 0;
22292 .map(function (pls) {
22293 var samePosition = pls[0][0].equals(pls[1][0]);
22294 var sameLookat = pls[0][1].equals(pls[1][1]);
22295 var sameZoom = pls[0][2] === pls[1][2];
22296 return samePosition && sameLookat && sameZoom;
22298 .distinctUntilChanged()
22299 .filter(function (stalled) {
22302 .switchMap(function (stalled) {
22303 return _this._container.renderService.renderCameraFrame$
22306 .withLatestFrom(this._container.renderService.size$, this._navigator.stateService.currentTransform$);
22307 this._setRegionOfInterestSubscription = textureProvider$
22308 .switchMap(function (provider) {
22310 .map(function (args) {
22312 _this._roiCalculator.computeRegionOfInterest(args[0], args[1], args[2]),
22317 .filter(function (args) {
22318 return !args[1].disposed;
22320 .subscribe(function (args) {
22322 var provider = args[1];
22323 provider.setRegionOfInterest(roi);
22325 var hasTexture$ = textureProvider$
22326 .switchMap(function (provider) {
22327 return provider.hasTexture$;
22332 this._hasTextureSubscription = hasTexture$.subscribe(function () { });
22333 var nodeImage$ = this._navigator.stateService.currentNode$
22334 .debounceTime(1000)
22335 .withLatestFrom(hasTexture$)
22336 .filter(function (args) {
22339 .map(function (args) {
22342 .filter(function (node) {
22344 Utils_1.Settings.maxImageSize > Utils_1.Settings.basePanoramaSize :
22345 Utils_1.Settings.maxImageSize > Utils_1.Settings.baseImageSize;
22347 .switchMap(function (node) {
22348 var baseImageSize = node.pano ?
22349 Utils_1.Settings.basePanoramaSize :
22350 Utils_1.Settings.baseImageSize;
22351 if (Math.max(node.image.width, node.image.height) > baseImageSize) {
22352 return Observable_1.Observable.empty();
22355 .cacheImage$(Utils_1.Settings.maxImageSize)
22356 .map(function (n) {
22357 return [n.image, n];
22360 .takeUntil(hasTexture$
22361 .filter(function (hasTexture) {
22364 .catch(function (error, caught) {
22365 console.error("Failed to fetch high res image (" + node.key + ")", error);
22366 return Observable_1.Observable.empty();
22371 this._updateBackgroundSubscription = nodeImage$
22372 .withLatestFrom(textureProvider$)
22373 .subscribe(function (args) {
22374 if (args[0][1].key !== args[1].key ||
22375 args[1].disposed) {
22378 args[1].updateBackground(args[0][0]);
22380 this._updateTextureImageSubscription = nodeImage$
22381 .map(function (imn) {
22382 return function (renderer) {
22383 renderer.updateTextureImage(imn[0], imn[1]);
22387 .subscribe(this._rendererOperation$);
22389 ImagePlaneComponent.prototype._deactivate = function () {
22390 this._rendererDisposer$.next(null);
22391 this._abortTextureProviderSubscription.unsubscribe();
22392 this._hasTextureSubscription.unsubscribe();
22393 this._rendererSubscription.unsubscribe();
22394 this._setRegionOfInterestSubscription.unsubscribe();
22395 this._setTextureProviderSubscription.unsubscribe();
22396 this._stateSubscription.unsubscribe();
22397 this._textureProviderSubscription.unsubscribe();
22398 this._updateBackgroundSubscription.unsubscribe();
22399 this._updateTextureImageSubscription.unsubscribe();
22401 ImagePlaneComponent.prototype._getDefaultConfiguration = function () {
22402 return { imageTiling: false };
22404 return ImagePlaneComponent;
22405 }(Component_1.Component));
22406 ImagePlaneComponent.componentName = "imagePlane";
22407 exports.ImagePlaneComponent = ImagePlaneComponent;
22408 Component_1.ComponentService.register(ImagePlaneComponent);
22409 Object.defineProperty(exports, "__esModule", { value: true });
22410 exports.default = ImagePlaneComponent;
22412 },{"../../Component":224,"../../Render":230,"../../Tiles":232,"../../Utils":233,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/operator/catch":51,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/pairwise":68,"rxjs/add/operator/publish":70,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/skipWhile":76,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],255:[function(require,module,exports){
22413 /// <reference path="../../../typings/index.d.ts" />
22415 var THREE = require("three");
22416 var Component_1 = require("../../Component");
22417 var ImagePlaneFactory = (function () {
22418 function ImagePlaneFactory(imagePlaneDepth, imageSphereRadius) {
22419 this._imagePlaneDepth = imagePlaneDepth != null ? imagePlaneDepth : 200;
22420 this._imageSphereRadius = imageSphereRadius != null ? imageSphereRadius : 200;
22422 ImagePlaneFactory.prototype.createMesh = function (node, transform) {
22423 var mesh = node.pano ?
22424 this._createImageSphere(node, transform) :
22425 this._createImagePlane(node, transform);
22428 ImagePlaneFactory.prototype._createImageSphere = function (node, transform) {
22429 var texture = this._createTexture(node.image);
22430 var materialParameters = this._createSphereMaterialParameters(transform, texture);
22431 var material = new THREE.ShaderMaterial(materialParameters);
22432 var mesh = this._useMesh(transform, node) ?
22433 new THREE.Mesh(this._getImageSphereGeo(transform, node), material) :
22434 new THREE.Mesh(this._getFlatImageSphereGeo(transform), material);
22437 ImagePlaneFactory.prototype._createImagePlane = function (node, transform) {
22438 var texture = this._createTexture(node.image);
22439 var materialParameters = this._createPlaneMaterialParameters(transform, texture);
22440 var material = new THREE.ShaderMaterial(materialParameters);
22441 var geometry = this._useMesh(transform, node) ?
22442 this._getImagePlaneGeo(transform, node) :
22443 this._getFlatImagePlaneGeo(transform);
22444 return new THREE.Mesh(geometry, material);
22446 ImagePlaneFactory.prototype._createSphereMaterialParameters = function (transform, texture) {
22447 var gpano = transform.gpano;
22448 var halfCroppedWidth = (gpano.FullPanoWidthPixels - gpano.CroppedAreaImageWidthPixels) / 2;
22449 var phiShift = 2 * Math.PI * (gpano.CroppedAreaLeftPixels - halfCroppedWidth) / gpano.FullPanoWidthPixels;
22450 var phiLength = 2 * Math.PI * gpano.CroppedAreaImageWidthPixels / gpano.FullPanoWidthPixels;
22451 var halfCroppedHeight = (gpano.FullPanoHeightPixels - gpano.CroppedAreaImageHeightPixels) / 2;
22452 var thetaShift = Math.PI * (halfCroppedHeight - gpano.CroppedAreaTopPixels) / gpano.FullPanoHeightPixels;
22453 var thetaLength = Math.PI * gpano.CroppedAreaImageHeightPixels / gpano.FullPanoHeightPixels;
22454 var materialParameters = {
22456 fragmentShader: Component_1.ImagePlaneShaders.equirectangular.fragment,
22457 side: THREE.DoubleSide,
22474 value: transform.rt,
22482 value: thetaLength,
22489 vertexShader: Component_1.ImagePlaneShaders.equirectangular.vertex,
22491 return materialParameters;
22493 ImagePlaneFactory.prototype._createPlaneMaterialParameters = function (transform, texture) {
22494 var materialParameters = {
22496 fragmentShader: Component_1.ImagePlaneShaders.perspective.fragment,
22497 side: THREE.DoubleSide,
22502 value: new THREE.Vector4(0, 0, 1, 1),
22510 value: transform.projectorMatrix(),
22517 vertexShader: Component_1.ImagePlaneShaders.perspective.vertex,
22519 return materialParameters;
22521 ImagePlaneFactory.prototype._createTexture = function (image) {
22522 var texture = new THREE.Texture(image);
22523 texture.minFilter = THREE.LinearFilter;
22524 texture.needsUpdate = true;
22527 ImagePlaneFactory.prototype._useMesh = function (transform, node) {
22528 return node.mesh.vertices.length &&
22529 transform.scale > 1e-2 &&
22530 transform.scale < 50;
22532 ImagePlaneFactory.prototype._getImageSphereGeo = function (transform, node) {
22533 var t = new THREE.Matrix4().getInverse(transform.srt);
22534 // push everything at least 5 meters in front of the camera
22535 var minZ = 5.0 * transform.scale;
22536 var maxZ = this._imageSphereRadius * transform.scale;
22537 var vertices = node.mesh.vertices;
22538 var numVertices = vertices.length / 3;
22539 var positions = new Float32Array(vertices.length);
22540 for (var i = 0; i < numVertices; ++i) {
22542 var x = vertices[index + 0];
22543 var y = vertices[index + 1];
22544 var z = vertices[index + 2];
22545 var l = Math.sqrt(x * x + y * y + z * z);
22546 var boundedL = Math.max(minZ, Math.min(l, maxZ));
22547 var factor = boundedL / l;
22548 var p = new THREE.Vector3(x * factor, y * factor, z * factor);
22550 positions[index + 0] = p.x;
22551 positions[index + 1] = p.y;
22552 positions[index + 2] = p.z;
22554 var faces = node.mesh.faces;
22555 var indices = new Uint16Array(faces.length);
22556 for (var i = 0; i < faces.length; ++i) {
22557 indices[i] = faces[i];
22559 var geometry = new THREE.BufferGeometry();
22560 geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3));
22561 geometry.setIndex(new THREE.BufferAttribute(indices, 1));
22564 ImagePlaneFactory.prototype._getImagePlaneGeo = function (transform, node) {
22565 var t = new THREE.Matrix4().getInverse(transform.srt);
22566 // push everything at least 5 meters in front of the camera
22567 var minZ = 5.0 * transform.scale;
22568 var maxZ = this._imagePlaneDepth * transform.scale;
22569 var vertices = node.mesh.vertices;
22570 var numVertices = vertices.length / 3;
22571 var positions = new Float32Array(vertices.length);
22572 for (var i = 0; i < numVertices; ++i) {
22574 var x = vertices[index + 0];
22575 var y = vertices[index + 1];
22576 var z = vertices[index + 2];
22577 var boundedZ = Math.max(minZ, Math.min(z, maxZ));
22578 var factor = boundedZ / z;
22579 var p = new THREE.Vector3(x * factor, y * factor, boundedZ);
22581 positions[index + 0] = p.x;
22582 positions[index + 1] = p.y;
22583 positions[index + 2] = p.z;
22585 var faces = node.mesh.faces;
22586 var indices = new Uint16Array(faces.length);
22587 for (var i = 0; i < faces.length; ++i) {
22588 indices[i] = faces[i];
22590 var geometry = new THREE.BufferGeometry();
22591 geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3));
22592 geometry.setIndex(new THREE.BufferAttribute(indices, 1));
22595 ImagePlaneFactory.prototype._getFlatImageSphereGeo = function (transform) {
22596 var gpano = transform.gpano;
22597 var phiStart = 2 * Math.PI * gpano.CroppedAreaLeftPixels / gpano.FullPanoWidthPixels;
22598 var phiLength = 2 * Math.PI * gpano.CroppedAreaImageWidthPixels / gpano.FullPanoWidthPixels;
22599 var thetaStart = Math.PI *
22600 (gpano.FullPanoHeightPixels - gpano.CroppedAreaImageHeightPixels - gpano.CroppedAreaTopPixels) /
22601 gpano.FullPanoHeightPixels;
22602 var thetaLength = Math.PI * gpano.CroppedAreaImageHeightPixels / gpano.FullPanoHeightPixels;
22603 var geometry = new THREE.SphereGeometry(this._imageSphereRadius, 20, 40, phiStart - Math.PI / 2, phiLength, thetaStart, thetaLength);
22604 geometry.applyMatrix(new THREE.Matrix4().getInverse(transform.rt));
22607 ImagePlaneFactory.prototype._getFlatImagePlaneGeo = function (transform) {
22608 var width = transform.width;
22609 var height = transform.height;
22610 var size = Math.max(width, height);
22611 var dx = width / 2.0 / size;
22612 var dy = height / 2.0 / size;
22614 vertices.push(transform.unprojectSfM([-dx, -dy], this._imagePlaneDepth));
22615 vertices.push(transform.unprojectSfM([dx, -dy], this._imagePlaneDepth));
22616 vertices.push(transform.unprojectSfM([dx, dy], this._imagePlaneDepth));
22617 vertices.push(transform.unprojectSfM([-dx, dy], this._imagePlaneDepth));
22618 var positions = new Float32Array(12);
22619 for (var i = 0; i < vertices.length; i++) {
22621 positions[index + 0] = vertices[i][0];
22622 positions[index + 1] = vertices[i][1];
22623 positions[index + 2] = vertices[i][2];
22625 var indices = new Uint16Array(6);
22632 var geometry = new THREE.BufferGeometry();
22633 geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3));
22634 geometry.setIndex(new THREE.BufferAttribute(indices, 1));
22637 return ImagePlaneFactory;
22639 exports.ImagePlaneFactory = ImagePlaneFactory;
22640 Object.defineProperty(exports, "__esModule", { value: true });
22641 exports.default = ImagePlaneFactory;
22643 },{"../../Component":224,"three":174}],256:[function(require,module,exports){
22644 /// <reference path="../../../typings/index.d.ts" />
22646 var Component_1 = require("../../Component");
22647 var Geo_1 = require("../../Geo");
22648 var ImagePlaneGLRenderer = (function () {
22649 function ImagePlaneGLRenderer() {
22650 this._imagePlaneFactory = new Component_1.ImagePlaneFactory();
22651 this._imagePlaneScene = new Component_1.ImagePlaneScene();
22653 this._alphaOld = 0;
22654 this._fadeOutSpeed = 0.05;
22655 this._lastCamera = new Geo_1.Camera();
22656 this._epsilon = 0.000001;
22657 this._currentKey = null;
22658 this._previousKey = null;
22659 this._providerDisposers = {};
22661 this._needsRender = false;
22663 Object.defineProperty(ImagePlaneGLRenderer.prototype, "frameId", {
22665 return this._frameId;
22670 Object.defineProperty(ImagePlaneGLRenderer.prototype, "needsRender", {
22672 return this._needsRender;
22677 ImagePlaneGLRenderer.prototype.indicateNeedsRender = function () {
22678 this._needsRender = true;
22680 ImagePlaneGLRenderer.prototype.updateFrame = function (frame) {
22681 this._updateFrameId(frame.id);
22682 this._needsRender = this._updateAlpha(frame.state.alpha) || this._needsRender;
22683 this._needsRender = this._updateAlphaOld(frame.state.alpha) || this._needsRender;
22684 this._needsRender = this._updateImagePlanes(frame.state) || this._needsRender;
22686 ImagePlaneGLRenderer.prototype.setTextureProvider = function (key, provider) {
22688 if (key !== this._currentKey) {
22691 var createdSubscription = provider.textureCreated$
22692 .subscribe(function (texture) {
22693 _this._updateTexture(texture);
22695 var updatedSubscription = provider.textureUpdated$
22696 .subscribe(function (updated) {
22697 _this._needsRender = true;
22699 var dispose = function () {
22700 createdSubscription.unsubscribe();
22701 updatedSubscription.unsubscribe();
22702 provider.dispose();
22704 if (key in this._providerDisposers) {
22705 var disposeProvider = this._providerDisposers[key];
22707 delete this._providerDisposers[key];
22709 this._providerDisposers[key] = dispose;
22711 ImagePlaneGLRenderer.prototype._updateTexture = function (texture) {
22712 this._needsRender = true;
22713 for (var _i = 0, _a = this._imagePlaneScene.imagePlanes; _i < _a.length; _i++) {
22714 var plane = _a[_i];
22715 var material = plane.material;
22716 var oldTexture = material.uniforms.projectorTex.value;
22717 material.uniforms.projectorTex.value = null;
22718 oldTexture.dispose();
22719 material.uniforms.projectorTex.value = texture;
22722 ImagePlaneGLRenderer.prototype.updateTextureImage = function (image, node) {
22723 if (this._currentKey !== node.key) {
22726 this._needsRender = true;
22727 for (var _i = 0, _a = this._imagePlaneScene.imagePlanes; _i < _a.length; _i++) {
22728 var plane = _a[_i];
22729 var material = plane.material;
22730 var texture = material.uniforms.projectorTex.value;
22731 texture.image = image;
22732 texture.needsUpdate = true;
22735 ImagePlaneGLRenderer.prototype.render = function (perspectiveCamera, renderer) {
22736 var planeAlpha = this._imagePlaneScene.imagePlanesOld.length ? 1 : this._alpha;
22737 for (var _i = 0, _a = this._imagePlaneScene.imagePlanes; _i < _a.length; _i++) {
22738 var plane = _a[_i];
22739 plane.material.uniforms.opacity.value = planeAlpha;
22741 for (var _b = 0, _c = this._imagePlaneScene.imagePlanesOld; _b < _c.length; _b++) {
22742 var plane = _c[_b];
22743 plane.material.uniforms.opacity.value = this._alphaOld;
22745 renderer.render(this._imagePlaneScene.scene, perspectiveCamera);
22746 renderer.render(this._imagePlaneScene.sceneOld, perspectiveCamera);
22747 for (var _d = 0, _e = this._imagePlaneScene.imagePlanes; _d < _e.length; _d++) {
22748 var plane = _e[_d];
22749 plane.material.uniforms.opacity.value = this._alpha;
22751 renderer.render(this._imagePlaneScene.scene, perspectiveCamera);
22753 ImagePlaneGLRenderer.prototype.clearNeedsRender = function () {
22754 this._needsRender = false;
22756 ImagePlaneGLRenderer.prototype.dispose = function () {
22757 this._imagePlaneScene.clear();
22759 ImagePlaneGLRenderer.prototype._updateFrameId = function (frameId) {
22760 this._frameId = frameId;
22762 ImagePlaneGLRenderer.prototype._updateAlpha = function (alpha) {
22763 if (alpha === this._alpha) {
22766 this._alpha = alpha;
22769 ImagePlaneGLRenderer.prototype._updateAlphaOld = function (alpha) {
22770 if (alpha < 1 || this._alphaOld === 0) {
22773 this._alphaOld = Math.max(0, this._alphaOld - this._fadeOutSpeed);
22776 ImagePlaneGLRenderer.prototype._updateImagePlanes = function (state) {
22777 if (state.currentNode == null || state.currentNode.key === this._currentKey) {
22780 var previousKey = state.previousNode != null ? state.previousNode.key : null;
22781 var currentKey = state.currentNode.key;
22782 if (this._previousKey !== previousKey &&
22783 this._previousKey !== currentKey &&
22784 this._previousKey in this._providerDisposers) {
22785 var disposeProvider = this._providerDisposers[this._previousKey];
22787 delete this._providerDisposers[this._previousKey];
22789 if (previousKey != null) {
22790 if (previousKey !== this._currentKey && previousKey !== this._previousKey) {
22791 var previousMesh = this._imagePlaneFactory.createMesh(state.previousNode, state.previousTransform);
22792 this._imagePlaneScene.updateImagePlanes([previousMesh]);
22794 this._previousKey = previousKey;
22796 this._currentKey = currentKey;
22797 var currentMesh = this._imagePlaneFactory.createMesh(state.currentNode, state.currentTransform);
22798 this._imagePlaneScene.updateImagePlanes([currentMesh]);
22799 this._alphaOld = 1;
22802 return ImagePlaneGLRenderer;
22804 exports.ImagePlaneGLRenderer = ImagePlaneGLRenderer;
22805 Object.defineProperty(exports, "__esModule", { value: true });
22806 exports.default = ImagePlaneGLRenderer;
22808 },{"../../Component":224,"../../Geo":227}],257:[function(require,module,exports){
22809 /// <reference path="../../../typings/index.d.ts" />
22811 var THREE = require("three");
22812 var ImagePlaneScene = (function () {
22813 function ImagePlaneScene() {
22814 this.scene = new THREE.Scene();
22815 this.sceneOld = new THREE.Scene();
22816 this.imagePlanes = [];
22817 this.imagePlanesOld = [];
22819 ImagePlaneScene.prototype.updateImagePlanes = function (planes) {
22820 this._dispose(this.imagePlanesOld, this.sceneOld);
22821 for (var _i = 0, _a = this.imagePlanes; _i < _a.length; _i++) {
22822 var plane = _a[_i];
22823 this.scene.remove(plane);
22824 this.sceneOld.add(plane);
22826 for (var _b = 0, planes_1 = planes; _b < planes_1.length; _b++) {
22827 var plane = planes_1[_b];
22828 this.scene.add(plane);
22830 this.imagePlanesOld = this.imagePlanes;
22831 this.imagePlanes = planes;
22833 ImagePlaneScene.prototype.addImagePlanes = function (planes) {
22834 for (var _i = 0, planes_2 = planes; _i < planes_2.length; _i++) {
22835 var plane = planes_2[_i];
22836 this.scene.add(plane);
22837 this.imagePlanes.push(plane);
22840 ImagePlaneScene.prototype.addImagePlanesOld = function (planes) {
22841 for (var _i = 0, planes_3 = planes; _i < planes_3.length; _i++) {
22842 var plane = planes_3[_i];
22843 this.sceneOld.add(plane);
22844 this.imagePlanesOld.push(plane);
22847 ImagePlaneScene.prototype.setImagePlanes = function (planes) {
22849 this.addImagePlanes(planes);
22851 ImagePlaneScene.prototype.setImagePlanesOld = function (planes) {
22853 this.addImagePlanesOld(planes);
22855 ImagePlaneScene.prototype.clear = function () {
22859 ImagePlaneScene.prototype._clear = function () {
22860 this._dispose(this.imagePlanes, this.scene);
22861 this.imagePlanes.length = 0;
22863 ImagePlaneScene.prototype._clearOld = function () {
22864 this._dispose(this.imagePlanesOld, this.sceneOld);
22865 this.imagePlanesOld.length = 0;
22867 ImagePlaneScene.prototype._dispose = function (planes, scene) {
22868 for (var _i = 0, planes_4 = planes; _i < planes_4.length; _i++) {
22869 var plane = planes_4[_i];
22870 scene.remove(plane);
22871 plane.geometry.dispose();
22872 plane.material.dispose();
22873 var texture = plane.material.uniforms.projectorTex.value;
22874 if (texture != null) {
22879 return ImagePlaneScene;
22881 exports.ImagePlaneScene = ImagePlaneScene;
22882 Object.defineProperty(exports, "__esModule", { value: true });
22883 exports.default = ImagePlaneScene;
22885 },{"three":174}],258:[function(require,module,exports){
22886 /// <reference path="../../../typings/index.d.ts" />
22889 var path = require("path");
22890 var ImagePlaneShaders = (function () {
22891 function ImagePlaneShaders() {
22893 return ImagePlaneShaders;
22895 ImagePlaneShaders.equirectangular = {
22896 fragment: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float phiLength;\nuniform float phiShift;\nuniform float thetaLength;\nuniform float thetaShift;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vec3 b = normalize(vRstq.xyz);\n float lat = -asin(b.y);\n float lon = atan(b.x, b.z);\n float x = (lon - phiShift) / phiLength + 0.5;\n float y = (lat - thetaShift) / thetaLength + 0.5;\n vec4 baseColor = texture2D(projectorTex, vec2(x, y));\n baseColor.a = opacity;\n gl_FragColor = baseColor;\n}",
22897 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}",
22899 ImagePlaneShaders.perspective = {
22900 fragment: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform vec4 bbox;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x / vRstq.w;\n float y = vRstq.y / vRstq.w;\n\n vec4 baseColor;\n if (x > bbox[0] && y > bbox[1] && x < bbox[2] && y < bbox[3]) {\n baseColor = texture2D(projectorTex, vec2(x, y));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}",
22901 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}",
22903 exports.ImagePlaneShaders = ImagePlaneShaders;
22905 },{"path":21}],259:[function(require,module,exports){
22906 /// <reference path="../../../typings/index.d.ts" />
22908 var __extends = (this && this.__extends) || function (d, b) {
22909 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
22910 function __() { this.constructor = d; }
22911 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
22913 var vd = require("virtual-dom");
22914 var Observable_1 = require("rxjs/Observable");
22915 var Subject_1 = require("rxjs/Subject");
22916 require("rxjs/add/observable/combineLatest");
22917 require("rxjs/add/observable/fromEvent");
22918 require("rxjs/add/observable/of");
22919 require("rxjs/add/observable/zip");
22920 require("rxjs/add/operator/distinctUntilChanged");
22921 require("rxjs/add/operator/filter");
22922 require("rxjs/add/operator/first");
22923 require("rxjs/add/operator/map");
22924 require("rxjs/add/operator/merge");
22925 require("rxjs/add/operator/mergeMap");
22926 require("rxjs/add/operator/scan");
22927 require("rxjs/add/operator/switchMap");
22928 require("rxjs/add/operator/withLatestFrom");
22929 require("rxjs/add/operator/zip");
22930 var State_1 = require("../../State");
22931 var Render_1 = require("../../Render");
22932 var Utils_1 = require("../../Utils");
22933 var Component_1 = require("../../Component");
22934 var SliderState = (function () {
22935 function SliderState() {
22936 this._imagePlaneFactory = new Component_1.ImagePlaneFactory();
22937 this._imagePlaneScene = new Component_1.ImagePlaneScene();
22938 this._currentKey = null;
22939 this._previousKey = null;
22940 this._currentPano = false;
22942 this._glNeedsRender = false;
22943 this._domNeedsRender = true;
22946 Object.defineProperty(SliderState.prototype, "frameId", {
22948 return this._frameId;
22953 Object.defineProperty(SliderState.prototype, "curtain", {
22955 return this._curtain;
22960 Object.defineProperty(SliderState.prototype, "glNeedsRender", {
22962 return this._glNeedsRender;
22967 Object.defineProperty(SliderState.prototype, "domNeedsRender", {
22969 return this._domNeedsRender;
22974 Object.defineProperty(SliderState.prototype, "sliderVisible", {
22976 return this._sliderVisible;
22978 set: function (value) {
22979 this._sliderVisible = value;
22980 this._domNeedsRender = true;
22985 Object.defineProperty(SliderState.prototype, "disabled", {
22987 return this._currentKey == null ||
22988 this._previousKey == null ||
22994 SliderState.prototype.update = function (frame) {
22995 this._updateFrameId(frame.id);
22996 var needsRender = this._updateImagePlanes(frame.state);
22997 this._domNeedsRender = needsRender || this._domNeedsRender;
22998 needsRender = this._updateCurtain(frame.state.alpha) || needsRender;
22999 this._glNeedsRender = needsRender || this._glNeedsRender;
23001 SliderState.prototype.updateTexture = function (image, node) {
23002 var imagePlanes = node.key === this._currentKey ?
23003 this._imagePlaneScene.imagePlanes :
23004 node.key === this._previousKey ?
23005 this._imagePlaneScene.imagePlanesOld :
23007 if (imagePlanes.length === 0) {
23010 this._glNeedsRender = true;
23011 for (var _i = 0, imagePlanes_1 = imagePlanes; _i < imagePlanes_1.length; _i++) {
23012 var plane = imagePlanes_1[_i];
23013 var material = plane.material;
23014 var texture = material.uniforms.projectorTex.value;
23015 texture.image = image;
23016 texture.needsUpdate = true;
23019 SliderState.prototype.render = function (perspectiveCamera, renderer) {
23020 if (!this.disabled) {
23021 renderer.render(this._imagePlaneScene.sceneOld, perspectiveCamera);
23023 renderer.render(this._imagePlaneScene.scene, perspectiveCamera);
23025 SliderState.prototype.dispose = function () {
23026 this._imagePlaneScene.clear();
23028 SliderState.prototype.clearGLNeedsRender = function () {
23029 this._glNeedsRender = false;
23031 SliderState.prototype.clearDomNeedsRender = function () {
23032 this._domNeedsRender = false;
23034 SliderState.prototype._updateFrameId = function (frameId) {
23035 this._frameId = frameId;
23037 SliderState.prototype._updateImagePlanes = function (state) {
23038 if (state.currentNode == null) {
23041 var needsRender = false;
23042 if (state.previousNode != null && this._previousKey !== state.previousNode.key) {
23043 needsRender = true;
23044 this._previousKey = state.previousNode.key;
23045 this._imagePlaneScene.setImagePlanesOld([
23046 this._imagePlaneFactory.createMesh(state.previousNode, state.previousTransform),
23049 if (this._currentKey !== state.currentNode.key) {
23050 needsRender = true;
23051 this._currentKey = state.currentNode.key;
23052 this._currentPano = state.currentNode.pano;
23053 this._imagePlaneScene.setImagePlanes([
23054 this._imagePlaneFactory.createMesh(state.currentNode, state.currentTransform),
23056 if (!this.disabled) {
23057 this._updateBbox();
23060 return needsRender;
23062 SliderState.prototype._updateCurtain = function (alpha) {
23063 if (this.disabled ||
23064 Math.abs(this._curtain - alpha) < 0.001) {
23067 this._curtain = alpha;
23068 this._updateBbox();
23071 SliderState.prototype._updateBbox = function () {
23072 for (var _i = 0, _a = this._imagePlaneScene.imagePlanes; _i < _a.length; _i++) {
23073 var plane = _a[_i];
23074 var shaderMaterial = plane.material;
23075 var bbox = shaderMaterial.uniforms.bbox.value;
23076 bbox.z = this._curtain;
23079 return SliderState;
23081 var SliderComponent = (function (_super) {
23082 __extends(SliderComponent, _super);
23084 * Create a new slider component instance.
23085 * @class SliderComponent
23087 function SliderComponent(name, container, navigator) {
23088 var _this = _super.call(this, name, container, navigator) || this;
23089 _this._sliderStateOperation$ = new Subject_1.Subject();
23090 _this._sliderStateCreator$ = new Subject_1.Subject();
23091 _this._sliderStateDisposer$ = new Subject_1.Subject();
23092 _this._sliderState$ = _this._sliderStateOperation$
23093 .scan(function (sliderState, operation) {
23094 return operation(sliderState);
23096 .filter(function (sliderState) {
23097 return sliderState != null;
23099 .distinctUntilChanged(undefined, function (sliderState) {
23100 return sliderState.frameId;
23102 _this._sliderStateCreator$
23104 return function (sliderState) {
23105 if (sliderState != null) {
23106 throw new Error("Multiple slider states can not be created at the same time");
23108 return new SliderState();
23111 .subscribe(_this._sliderStateOperation$);
23112 _this._sliderStateDisposer$
23114 return function (sliderState) {
23115 sliderState.dispose();
23119 .subscribe(_this._sliderStateOperation$);
23123 * Set the image keys.
23125 * Configures the component to show the image planes for the supplied image keys.
23127 * @param {keys} ISliderKeys - Slider keys object specifying the images to be shown in the foreground and the background.
23129 SliderComponent.prototype.setKeys = function (keys) {
23130 this.configure({ keys: keys });
23133 * Set the initial position.
23135 * Configures the intial position of the slider. The inital position value will be used when the component is activated.
23137 * @param {number} initialPosition - Initial slider position.
23139 SliderComponent.prototype.setInitialPosition = function (initialPosition) {
23140 this.configure({ initialPosition: initialPosition });
23143 * Set the value controlling if the slider is visible.
23145 * @param {boolean} sliderVisible - Value indicating if the slider should be visible or not.
23147 SliderComponent.prototype.setSliderVisible = function (sliderVisible) {
23148 this.configure({ sliderVisible: sliderVisible });
23150 SliderComponent.prototype._activate = function () {
23152 Observable_1.Observable
23153 .combineLatest(this._navigator.stateService.state$, this._configuration$)
23155 .subscribe(function (_a) {
23156 var state = _a[0], configuration = _a[1];
23157 if (state === State_1.State.Traversing) {
23158 _this._navigator.stateService.wait();
23159 var position = configuration.initialPosition;
23160 _this._navigator.stateService.moveTo(position != null ? position : 1);
23163 this._glRenderSubscription = this._sliderState$
23164 .map(function (sliderState) {
23168 frameId: sliderState.frameId,
23169 needsRender: sliderState.glNeedsRender,
23170 render: sliderState.render.bind(sliderState),
23171 stage: Render_1.GLRenderStage.Background,
23174 sliderState.clearGLNeedsRender();
23177 .subscribe(this._container.glRenderer.render$);
23178 this._domRenderSubscription = this._sliderState$
23179 .filter(function (sliderState) {
23180 return sliderState.domNeedsRender;
23182 .map(function (sliderState) {
23183 var sliderInput = vd.h("input.SliderControl", {
23186 oninput: function (e) {
23187 var curtain = Number(e.target.value) / 1000;
23188 _this._navigator.stateService.moveTo(curtain);
23191 value: 1000 * sliderState.curtain,
23193 var vNode = sliderState.disabled || !sliderState.sliderVisible ?
23195 vd.h("div.SliderWrapper", {}, [sliderInput]);
23200 sliderState.clearDomNeedsRender();
23203 .subscribe(this._container.domRenderer.render$);
23204 this._sliderStateCreator$.next(null);
23205 this._stateSubscription = this._navigator.stateService.currentState$
23206 .map(function (frame) {
23207 return function (sliderState) {
23208 sliderState.update(frame);
23209 return sliderState;
23212 .subscribe(this._sliderStateOperation$);
23213 this._setSliderVisibleSubscription = this._configuration$
23214 .map(function (configuration) {
23215 return configuration.sliderVisible == null || configuration.sliderVisible;
23217 .distinctUntilChanged()
23218 .map(function (sliderVisible) {
23219 return function (sliderState) {
23220 sliderState.sliderVisible = sliderVisible;
23221 return sliderState;
23224 .subscribe(this._sliderStateOperation$);
23225 this._setKeysSubscription = this._configuration$
23226 .filter(function (configuration) {
23227 return configuration.keys != null;
23229 .switchMap(function (configuration) {
23230 return Observable_1.Observable
23231 .zip(_this._catchCacheNode$(configuration.keys.background), _this._catchCacheNode$(configuration.keys.foreground))
23232 .map(function (nodes) {
23233 return { background: nodes[0], foreground: nodes[1] };
23235 .zip(_this._navigator.stateService.currentState$.first())
23236 .map(function (nf) {
23237 return { nodes: nf[0], state: nf[1].state };
23240 .subscribe(function (co) {
23241 if (co.state.currentNode != null &&
23242 co.state.previousNode != null &&
23243 co.state.currentNode.key === co.nodes.foreground.key &&
23244 co.state.previousNode.key === co.nodes.background.key) {
23247 if (co.state.currentNode.key === co.nodes.background.key) {
23248 _this._navigator.stateService.setNodes([co.nodes.foreground]);
23251 if (co.state.currentNode.key === co.nodes.foreground.key &&
23252 co.state.trajectory.length === 1) {
23253 _this._navigator.stateService.prependNodes([co.nodes.background]);
23256 _this._navigator.stateService.setNodes([co.nodes.background]);
23257 _this._navigator.stateService.setNodes([co.nodes.foreground]);
23261 var previousNode$ = this._navigator.stateService.currentState$
23262 .map(function (frame) {
23263 return frame.state.previousNode;
23265 .filter(function (node) {
23266 return node != null;
23268 .distinctUntilChanged(undefined, function (node) {
23271 this._nodeSubscription = Observable_1.Observable
23272 .merge(previousNode$, this._navigator.stateService.currentNode$)
23273 .filter(function (node) {
23275 Utils_1.Settings.maxImageSize > Utils_1.Settings.basePanoramaSize :
23276 Utils_1.Settings.maxImageSize > Utils_1.Settings.baseImageSize;
23278 .mergeMap(function (node) {
23279 var baseImageSize = node.pano ?
23280 Utils_1.Settings.basePanoramaSize :
23281 Utils_1.Settings.baseImageSize;
23282 if (Math.max(node.image.width, node.image.height) > baseImageSize) {
23283 return Observable_1.Observable.empty();
23285 return node.cacheImage$(Utils_1.Settings.maxImageSize)
23286 .map(function (n) {
23287 return [n.image, n];
23289 .catch(function (error, caught) {
23290 console.error("Failed to fetch high res slider image (" + node.key + ")", error);
23291 return Observable_1.Observable.empty();
23294 .map(function (_a) {
23295 var element = _a[0], node = _a[1];
23296 return function (sliderState) {
23297 sliderState.updateTexture(element, node);
23298 return sliderState;
23301 .subscribe(this._sliderStateOperation$);
23303 SliderComponent.prototype._deactivate = function () {
23305 this._navigator.stateService.state$
23307 .subscribe(function (state) {
23308 if (state === State_1.State.Waiting) {
23309 _this._navigator.stateService.traverse();
23312 this._sliderStateDisposer$.next(null);
23313 this._setKeysSubscription.unsubscribe();
23314 this._setSliderVisibleSubscription.unsubscribe();
23315 this._stateSubscription.unsubscribe();
23316 this._glRenderSubscription.unsubscribe();
23317 this._domRenderSubscription.unsubscribe();
23318 this._nodeSubscription.unsubscribe();
23319 this.configure({ keys: null });
23321 SliderComponent.prototype._getDefaultConfiguration = function () {
23324 SliderComponent.prototype._catchCacheNode$ = function (key) {
23325 return this._navigator.graphService.cacheNode$(key)
23326 .catch(function (error, caught) {
23327 console.error("Failed to cache slider node (" + key + ")", error);
23328 return Observable_1.Observable.empty();
23331 return SliderComponent;
23332 }(Component_1.Component));
23333 SliderComponent.componentName = "slider";
23334 exports.SliderComponent = SliderComponent;
23335 Component_1.ComponentService.register(SliderComponent);
23336 Object.defineProperty(exports, "__esModule", { value: true });
23337 exports.default = SliderComponent;
23339 },{"../../Component":224,"../../Render":230,"../../State":231,"../../Utils":233,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/fromEvent":41,"rxjs/add/observable/of":44,"rxjs/add/observable/zip":47,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82,"rxjs/add/operator/zip":83,"virtual-dom":180}],260:[function(require,module,exports){
23341 var MarkerComponent_1 = require("./MarkerComponent");
23342 exports.MarkerComponent = MarkerComponent_1.MarkerComponent;
23343 var SimpleMarker_1 = require("./marker/SimpleMarker");
23344 exports.SimpleMarker = SimpleMarker_1.SimpleMarker;
23345 var CircleMarker_1 = require("./marker/CircleMarker");
23346 exports.CircleMarker = CircleMarker_1.CircleMarker;
23348 },{"./MarkerComponent":261,"./marker/CircleMarker":264,"./marker/SimpleMarker":266}],261:[function(require,module,exports){
23349 /// <reference path="../../../typings/index.d.ts" />
23351 var __extends = (this && this.__extends) || function (d, b) {
23352 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
23353 function __() { this.constructor = d; }
23354 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
23356 var THREE = require("three");
23357 var when = require("when");
23358 var Observable_1 = require("rxjs/Observable");
23359 require("rxjs/add/observable/combineLatest");
23360 require("rxjs/add/operator/distinctUntilChanged");
23361 require("rxjs/add/operator/map");
23362 var Component_1 = require("../../Component");
23363 var Render_1 = require("../../Render");
23364 var Graph_1 = require("../../Graph");
23365 var Geo_1 = require("../../Geo");
23367 * @class MarkerComponent
23369 * @classdesc Component for showing and editing 3D marker objects.
23371 * The `add` method is used for adding new markers or replacing
23372 * markers already in the set.
23374 * If a marker already in the set has the same
23375 * id as one of the markers added, the old marker will be removed
23376 * the added marker will take its place.
23378 * It is not possible to update markers in the set by updating any properties
23379 * directly on the marker object. Markers need to be replaced by
23380 * re-adding them for updates to geographic position or configuration
23383 * Markers added to the marker component can be either interactive
23384 * or non-interactive. Different marker types define their behavior.
23385 * Markers with interaction support can be configured with options
23386 * to respond to dragging inside the viewer and be detected when
23387 * retrieving markers from pixel points with the `getMarkerIdAt` method.
23389 * To retrive and use the marker component
23393 * var markerComponent = viewer.getComponent("marker");
23396 var MarkerComponent = (function (_super) {
23397 __extends(MarkerComponent, _super);
23398 function MarkerComponent(name, container, navigator) {
23399 var _this = _super.call(this, name, container, navigator) || this;
23400 _this._relativeGroundAltitude = -2;
23401 _this._geoCoords = new Geo_1.GeoCoords();
23402 _this._graphCalculator = new Graph_1.GraphCalculator();
23403 _this._markerScene = new Component_1.MarkerScene();
23404 _this._markerSet = new Component_1.MarkerSet();
23405 _this._viewportCoords = new Geo_1.ViewportCoords();
23409 * Add markers to the marker set or replace markers in the marker set.
23411 * @description If a marker already in the set has the same
23412 * id as one of the markers added, the old marker will be removed
23413 * the added marker will take its place.
23415 * Any marker inside the visible bounding bbox
23416 * will be initialized and placed in the viewer.
23418 * @param {Array<Marker>} markers - Markers to add.
23420 * @example ```markerComponent.add([marker1, marker2]);```
23422 MarkerComponent.prototype.add = function (markers) {
23423 this._markerSet.add(markers);
23426 * Check if a marker exist in the marker set.
23428 * @param {string} markerId - Id of the marker.
23430 * @example ```var markerExists = markerComponent.has("markerId");```
23432 MarkerComponent.prototype.has = function (markerId) {
23433 return this._markerSet.has(markerId);
23436 * Returns the marker in the marker set with the specified id, or
23437 * undefined if the id matches no marker.
23439 * @param {string} markerId - Id of the marker.
23441 * @example ```var marker = markerComponent.get("markerId");```
23444 MarkerComponent.prototype.get = function (markerId) {
23445 return this._markerSet.get(markerId);
23448 * Returns an array of all markers.
23450 * @example ```var markers = markerComponent.getAll();```
23452 MarkerComponent.prototype.getAll = function () {
23453 return this._markerSet.getAll();
23456 * Returns the id of the interactive marker closest to the current camera
23457 * position ids for marker currently visible at the specified point.
23459 * @description Notice that the pixelPoint argument requires x, y
23460 * coordinates from pixel space.
23462 * With this function, you can use the coordinates provided by mouse
23463 * events to get information out of the marker component.
23465 * If no interactive geometry of an interactive marker exist at the pixel
23466 * point, null will be returned.
23468 * @param {Array<number>} pixelPoint - Pixel coordinates on the viewer element.
23469 * @returns {string} Id of the interactive marker closest to the camera. If no
23470 * interactive marker exist at the pixel point, null will be returned.
23474 * markerComponent.getMarkerIdAt([100, 100])
23475 * .then((markerId) => { console.log(markerId); });
23478 MarkerComponent.prototype.getMarkerIdAt = function (pixelPoint) {
23480 return when.promise(function (resolve, reject) {
23481 _this._container.renderService.renderCamera$
23483 .map(function (render) {
23484 var viewport = _this._viewportCoords
23485 .canvasToViewport(pixelPoint[0], pixelPoint[1], _this._container.element);
23486 var id = _this._markerScene.intersectObjects(viewport, render.perspective);
23489 .subscribe(function (id) {
23491 }, function (error) {
23497 * Remove markers with the specified ids from the marker set.
23499 * @param {Array<string>} markerIds - Ids for markers to remove.
23501 * @example ```markerComponent.remove(["id-1", "id-2"]);```
23503 MarkerComponent.prototype.remove = function (markerIds) {
23504 this._markerSet.remove(markerIds);
23507 * Remove all markers from the marker set.
23509 * @example ```markerComponent.removeAll();```
23511 MarkerComponent.prototype.removeAll = function () {
23512 this._markerSet.removeAll();
23514 MarkerComponent.prototype._activate = function () {
23516 var groundAltitude$ = this._navigator.stateService.currentState$
23517 .map(function (frame) {
23518 return frame.state.camera.position.z + _this._relativeGroundAltitude;
23520 .distinctUntilChanged(function (a1, a2) {
23521 return Math.abs(a1 - a2) < 0.01;
23525 var geoInitiated$ = Observable_1.Observable
23526 .combineLatest(groundAltitude$, this._navigator.stateService.reference$)
23528 .map(function () { })
23531 var clampedConfiguration$ = this._configuration$
23532 .map(function (configuration) {
23533 return { visibleBBoxSize: Math.max(1, Math.min(200, configuration.visibleBBoxSize)) };
23535 var currentlatLon$ = this._navigator.stateService.currentNode$
23536 .map(function (node) { return node.latLon; })
23539 var visibleBBox$ = Observable_1.Observable
23540 .combineLatest(clampedConfiguration$, currentlatLon$)
23541 .map(function (_a) {
23542 var configuration = _a[0], latLon = _a[1];
23543 return _this._graphCalculator
23544 .boundingBoxCorners(latLon, configuration.visibleBBoxSize / 2);
23548 var visibleMarkers$ = Observable_1.Observable
23549 .combineLatest(Observable_1.Observable
23550 .of(this._markerSet)
23551 .concat(this._markerSet.changed$), visibleBBox$)
23552 .map(function (_a) {
23553 var set = _a[0], bbox = _a[1];
23554 return set.search(bbox);
23556 this._setChangedSubscription = geoInitiated$
23557 .switchMap(function () {
23558 return visibleMarkers$
23559 .withLatestFrom(_this._navigator.stateService.reference$, groundAltitude$);
23561 .subscribe(function (_a) {
23562 var markers = _a[0], reference = _a[1], alt = _a[2];
23563 var geoCoords = _this._geoCoords;
23564 var markerScene = _this._markerScene;
23565 var sceneMarkers = markerScene.markers;
23566 var markersToRemove = Object.assign({}, sceneMarkers);
23567 for (var _i = 0, markers_1 = markers; _i < markers_1.length; _i++) {
23568 var marker = markers_1[_i];
23569 if (marker.id in sceneMarkers) {
23570 delete markersToRemove[marker.id];
23573 var point3d = geoCoords
23574 .geodeticToEnu(marker.latLon.lat, marker.latLon.lon, reference.alt + alt, reference.lat, reference.lon, reference.alt);
23575 markerScene.add(marker, point3d);
23578 for (var id in markersToRemove) {
23579 if (!markersToRemove.hasOwnProperty(id)) {
23582 markerScene.remove(id);
23585 this._markersUpdatedSubscription = geoInitiated$
23586 .switchMap(function () {
23587 return _this._markerSet.updated$
23588 .withLatestFrom(visibleBBox$, _this._navigator.stateService.reference$, groundAltitude$);
23590 .subscribe(function (_a) {
23591 var markers = _a[0], _b = _a[1], sw = _b[0], ne = _b[1], reference = _a[2], alt = _a[3];
23592 var geoCoords = _this._geoCoords;
23593 var markerScene = _this._markerScene;
23594 for (var _i = 0, markers_2 = markers; _i < markers_2.length; _i++) {
23595 var marker = markers_2[_i];
23596 var exists = markerScene.has(marker.id);
23597 var visible = marker.latLon.lat > sw.lat &&
23598 marker.latLon.lat < ne.lat &&
23599 marker.latLon.lon > sw.lon &&
23600 marker.latLon.lon < ne.lon;
23602 var point3d = geoCoords
23603 .geodeticToEnu(marker.latLon.lat, marker.latLon.lon, reference.alt + alt, reference.lat, reference.lon, reference.alt);
23604 markerScene.add(marker, point3d);
23606 else if (!visible && exists) {
23607 markerScene.remove(marker.id);
23611 this._referenceSubscription = this._navigator.stateService.reference$
23613 .withLatestFrom(groundAltitude$)
23614 .subscribe(function (_a) {
23615 var reference = _a[0], alt = _a[1];
23616 var geoCoords = _this._geoCoords;
23617 var markerScene = _this._markerScene;
23618 for (var _i = 0, _b = markerScene.getAll(); _i < _b.length; _i++) {
23619 var marker = _b[_i];
23620 var point3d = geoCoords
23621 .geodeticToEnu(marker.latLon.lat, marker.latLon.lon, reference.alt + alt, reference.lat, reference.lon, reference.alt);
23622 markerScene.update(marker.id, point3d);
23625 this._adjustHeightSubscription = groundAltitude$
23627 .withLatestFrom(this._navigator.stateService.reference$, currentlatLon$)
23628 .subscribe(function (_a) {
23629 var alt = _a[0], reference = _a[1], latLon = _a[2];
23630 var geoCoords = _this._geoCoords;
23631 var markerScene = _this._markerScene;
23632 var position = geoCoords
23633 .geodeticToEnu(latLon.lat, latLon.lon, reference.alt + alt, reference.lat, reference.lon, reference.alt);
23634 for (var _i = 0, _b = markerScene.getAll(); _i < _b.length; _i++) {
23635 var marker = _b[_i];
23636 var point3d = geoCoords
23637 .geodeticToEnu(marker.latLon.lat, marker.latLon.lon, reference.alt + alt, reference.lat, reference.lon, reference.alt);
23638 var distanceX = point3d[0] - position[0];
23639 var distanceY = point3d[1] - position[1];
23640 var groundDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY);
23641 if (groundDistance > 50) {
23644 markerScene.lerpAltitude(marker.id, alt, Math.min(1, Math.max(0, 1.2 - 1.2 * groundDistance / 50)));
23647 this._renderSubscription = this._navigator.stateService.currentState$
23648 .map(function (frame) {
23649 var scene = _this._markerScene;
23654 needsRender: scene.needsRender,
23655 render: scene.render.bind(scene),
23656 stage: Render_1.GLRenderStage.Foreground,
23660 .subscribe(this._container.glRenderer.render$);
23661 var hoveredMarkerId$ = Observable_1.Observable
23662 .combineLatest(this._container.renderService.renderCamera$, this._container.mouseService.mouseMove$)
23663 .map(function (_a) {
23664 var render = _a[0], event = _a[1];
23665 var viewport = _this._viewportCoords.canvasToViewport(event.clientX, event.clientY, _this._container.element);
23666 var markerId = _this._markerScene.intersectObjects(viewport, render.perspective);
23671 var draggingStarted$ = this._container.mouseService
23672 .filtered$(this._name, this._container.mouseService.mouseDragStart$)
23673 .map(function (event) {
23676 var draggingStopped$ = this._container.mouseService
23677 .filtered$(this._name, this._container.mouseService.mouseDragEnd$)
23678 .map(function (event) {
23681 var dragging$ = Observable_1.Observable
23682 .merge(draggingStarted$, draggingStopped$)
23684 this._dragEventSubscription = draggingStarted$
23685 .withLatestFrom(hoveredMarkerId$)
23686 .merge(Observable_1.Observable
23687 .combineLatest(draggingStopped$, Observable_1.Observable.of(null)))
23688 .startWith([false, null])
23690 .subscribe(function (_a) {
23691 var previous = _a[0], current = _a[1];
23692 var dragging = current[0];
23693 var eventType = dragging ? MarkerComponent.dragstart : MarkerComponent.dragend;
23694 var id = dragging ? current[1] : previous[1];
23695 var marker = _this._markerScene.get(id);
23696 var markerEvent = { marker: marker, target: _this, type: eventType };
23697 _this.fire(eventType, markerEvent);
23699 this._mouseClaimSubscription = Observable_1.Observable
23700 .combineLatest(this._container.mouseService.active$, hoveredMarkerId$, dragging$)
23701 .map(function (_a) {
23702 var active = _a[0], markerId = _a[1], dragging = _a[2];
23703 return (!active && markerId != null) || dragging;
23705 .distinctUntilChanged()
23706 .subscribe(function (hovered) {
23708 _this._container.mouseService.claimMouse(_this._name, 1);
23711 _this._container.mouseService.unclaimMouse(_this._name);
23714 var offset$ = this._container.mouseService
23715 .filtered$(this._name, this._container.mouseService.mouseDragStart$)
23716 .withLatestFrom(hoveredMarkerId$, this._container.renderService.renderCamera$)
23717 .map(function (_a) {
23718 var e = _a[0], id = _a[1], r = _a[2];
23719 var marker = _this._markerScene.get(id);
23720 var _b = _this._viewportCoords.projectToCanvas(marker.geometry.position.toArray(), _this._container.element, r.perspective), groundCanvasX = _b[0], groundCanvasY = _b[1];
23721 var offset = [e.clientX - groundCanvasX, e.clientY - groundCanvasY];
23722 return [marker, offset, r];
23726 this._updateMarkerSubscription = this._container.mouseService
23727 .filtered$(this._name, this._container.mouseService.mouseDrag$)
23728 .withLatestFrom(offset$, this._navigator.stateService.reference$, clampedConfiguration$)
23729 .subscribe(function (_a) {
23730 var event = _a[0], _b = _a[1], marker = _b[0], offset = _b[1], render = _b[2], reference = _a[2], configuration = _a[3];
23731 if (!_this._markerScene.has(marker.id)) {
23734 var groundX = event.clientX - offset[0];
23735 var groundY = event.clientY - offset[1];
23736 var _c = _this._viewportCoords
23737 .canvasToViewport(groundX, groundY, _this._container.element), viewportX = _c[0], viewportY = _c[1];
23738 var direction = new THREE.Vector3(viewportX, viewportY, 1)
23739 .unproject(render.perspective)
23740 .sub(render.perspective.position)
23742 var distance = Math.min(_this._relativeGroundAltitude / direction.z, configuration.visibleBBoxSize / 2 - 0.1);
23743 if (distance < 0) {
23746 var intersection = direction
23748 .multiplyScalar(distance)
23749 .add(render.perspective.position);
23750 intersection.z = render.perspective.position.z + _this._relativeGroundAltitude;
23751 var _d = _this._geoCoords
23752 .enuToGeodetic(intersection.x, intersection.y, intersection.z, reference.lat, reference.lon, reference.alt), lat = _d[0], lon = _d[1];
23753 _this._markerScene.update(marker.id, intersection.toArray(), { lat: lat, lon: lon });
23754 _this._markerSet.update(marker);
23755 var markerEvent = { marker: marker, target: _this, type: MarkerComponent.changed };
23756 _this.fire(MarkerComponent.changed, markerEvent);
23759 MarkerComponent.prototype._deactivate = function () {
23760 this._adjustHeightSubscription.unsubscribe();
23761 this._dragEventSubscription.unsubscribe();
23762 this._markersUpdatedSubscription.unsubscribe();
23763 this._mouseClaimSubscription.unsubscribe();
23764 this._referenceSubscription.unsubscribe();
23765 this._renderSubscription.unsubscribe();
23766 this._setChangedSubscription.unsubscribe();
23767 this._updateMarkerSubscription.unsubscribe();
23768 this._markerScene.clear();
23770 MarkerComponent.prototype._getDefaultConfiguration = function () {
23771 return { visibleBBoxSize: 100 };
23773 return MarkerComponent;
23774 }(Component_1.Component));
23775 MarkerComponent.componentName = "marker";
23777 * Fired when the position of a marker is changed.
23779 * @type {IMarkerEvent} markerEvent - Marker event data.
23782 * markerComponent.on("changed", function(e) {
23783 * console.log(e.marker.id, e.marker.latLon);
23787 MarkerComponent.changed = "changed";
23789 * Fired when a marker drag interaction starts.
23791 * @type {IMarkerEvent} markerEvent - Marker event data.
23794 * markerComponent.on("dragstart", function(e) {
23795 * console.log(e.marker.id, e.marker.latLon);
23799 MarkerComponent.dragstart = "dragstart";
23801 * Fired when a marker drag interaction ends.
23803 * @type {IMarkerEvent} markerEvent - Marker event data.
23806 * markerComponent.on("dragend", function(e) {
23807 * console.log(e.marker.id, e.marker.latLon);
23811 MarkerComponent.dragend = "dragend";
23812 exports.MarkerComponent = MarkerComponent;
23813 Component_1.ComponentService.register(MarkerComponent);
23814 Object.defineProperty(exports, "__esModule", { value: true });
23815 exports.default = MarkerComponent;
23817 },{"../../Component":224,"../../Geo":227,"../../Graph":228,"../../Render":230,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"three":174,"when":221}],262:[function(require,module,exports){
23818 /// <reference path="../../../typings/index.d.ts" />
23820 var THREE = require("three");
23821 var MarkerScene = (function () {
23822 function MarkerScene(scene, raycaster) {
23823 this._needsRender = false;
23824 this._interactiveObjects = [];
23825 this._markers = {};
23826 this._objectMarkers = {};
23827 this._raycaster = !!raycaster ? raycaster : new THREE.Raycaster();
23828 this._scene = !!scene ? scene : new THREE.Scene();
23830 Object.defineProperty(MarkerScene.prototype, "markers", {
23832 return this._markers;
23837 Object.defineProperty(MarkerScene.prototype, "needsRender", {
23839 return this._needsRender;
23844 MarkerScene.prototype.add = function (marker, position) {
23845 if (marker.id in this._markers) {
23846 this._dispose(marker.id);
23848 marker.createGeometry(position);
23849 this._scene.add(marker.geometry);
23850 this._markers[marker.id] = marker;
23851 for (var _i = 0, _a = marker.getInteractiveObjects(); _i < _a.length; _i++) {
23852 var interactiveObject = _a[_i];
23853 this._interactiveObjects.push(interactiveObject);
23854 this._objectMarkers[interactiveObject.uuid] = marker.id;
23856 this._needsRender = true;
23858 MarkerScene.prototype.clear = function () {
23859 for (var id in this._markers) {
23860 if (!this._markers.hasOwnProperty) {
23865 this._needsRender = true;
23867 MarkerScene.prototype.get = function (id) {
23868 return this._markers[id];
23870 MarkerScene.prototype.getAll = function () {
23873 .keys(this._markers)
23874 .map(function (id) { return _this._markers[id]; });
23876 MarkerScene.prototype.has = function (id) {
23877 return id in this._markers;
23879 MarkerScene.prototype.intersectObjects = function (_a, camera) {
23880 var viewportX = _a[0], viewportY = _a[1];
23881 this._raycaster.setFromCamera(new THREE.Vector2(viewportX, viewportY), camera);
23882 var intersects = this._raycaster.intersectObjects(this._interactiveObjects);
23883 for (var _i = 0, intersects_1 = intersects; _i < intersects_1.length; _i++) {
23884 var intersect = intersects_1[_i];
23885 if (intersect.object.uuid in this._objectMarkers) {
23886 return this._objectMarkers[intersect.object.uuid];
23891 MarkerScene.prototype.lerpAltitude = function (id, alt, alpha) {
23892 if (!(id in this._markers)) {
23895 this._markers[id].lerpAltitude(alt, alpha);
23896 this._needsRender = true;
23898 MarkerScene.prototype.remove = function (id) {
23899 if (!(id in this._markers)) {
23903 this._needsRender = true;
23905 MarkerScene.prototype.render = function (perspectiveCamera, renderer) {
23906 renderer.render(this._scene, perspectiveCamera);
23907 this._needsRender = false;
23909 MarkerScene.prototype.update = function (id, position, latLon) {
23910 if (!(id in this._markers)) {
23913 var marker = this._markers[id];
23914 marker.updatePosition(position, latLon);
23915 this._needsRender = true;
23917 MarkerScene.prototype._dispose = function (id) {
23918 var marker = this._markers[id];
23919 this._scene.remove(marker.geometry);
23920 for (var _i = 0, _a = marker.getInteractiveObjects(); _i < _a.length; _i++) {
23921 var interactiveObject = _a[_i];
23922 var index = this._interactiveObjects.indexOf(interactiveObject);
23923 if (index !== -1) {
23924 this._interactiveObjects.splice(index, 1);
23927 console.warn("Object does not exist (" + interactiveObject.id + ") for " + id);
23929 delete this._objectMarkers[interactiveObject.uuid];
23931 marker.disposeGeometry();
23932 delete this._markers[id];
23934 return MarkerScene;
23936 exports.MarkerScene = MarkerScene;
23937 Object.defineProperty(exports, "__esModule", { value: true });
23938 exports.default = MarkerScene;
23940 },{"three":174}],263:[function(require,module,exports){
23941 /// <reference path="../../../typings/index.d.ts" />
23943 var rbush = require("rbush");
23944 var Subject_1 = require("rxjs/Subject");
23945 require("rxjs/add/operator/map");
23946 require("rxjs/add/operator/publishReplay");
23947 require("rxjs/add/operator/scan");
23948 var MarkerSet = (function () {
23949 function MarkerSet() {
23951 this._index = rbush(16, [".lon", ".lat", ".lon", ".lat"]);
23952 this._indexChanged$ = new Subject_1.Subject();
23953 this._updated$ = new Subject_1.Subject();
23955 Object.defineProperty(MarkerSet.prototype, "changed$", {
23957 return this._indexChanged$;
23962 Object.defineProperty(MarkerSet.prototype, "updated$", {
23964 return this._updated$;
23969 MarkerSet.prototype.add = function (markers) {
23971 var hash = this._hash;
23972 var index = this._index;
23973 for (var _i = 0, markers_1 = markers; _i < markers_1.length; _i++) {
23974 var marker = markers_1[_i];
23975 var id = marker.id;
23977 index.remove(hash[id]);
23978 updated.push(marker);
23981 lat: marker.latLon.lat,
23982 lon: marker.latLon.lon,
23986 index.insert(item);
23988 if (updated.length > 0) {
23989 this._updated$.next(updated);
23991 if (markers.length > updated.length) {
23992 this._indexChanged$.next(this);
23995 MarkerSet.prototype.has = function (id) {
23996 return id in this._hash;
23998 MarkerSet.prototype.get = function (id) {
23999 return this.has(id) ? this._hash[id].marker : undefined;
24001 MarkerSet.prototype.getAll = function () {
24004 .map(function (indexItem) {
24005 return indexItem.marker;
24008 MarkerSet.prototype.remove = function (ids) {
24009 var hash = this._hash;
24010 var index = this._index;
24011 var changed = false;
24012 for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) {
24013 var id = ids_1[_i];
24014 if (!(id in hash)) {
24017 var item = hash[id];
24018 index.remove(item);
24023 this._indexChanged$.next(this);
24026 MarkerSet.prototype.removeAll = function () {
24028 this._index.clear();
24029 this._indexChanged$.next(this);
24031 MarkerSet.prototype.search = function (_a) {
24032 var sw = _a[0], ne = _a[1];
24034 .search({ maxX: ne.lon, maxY: ne.lat, minX: sw.lon, minY: sw.lat })
24035 .map(function (indexItem) {
24036 return indexItem.marker;
24039 MarkerSet.prototype.update = function (marker) {
24040 var hash = this._hash;
24041 var index = this._index;
24042 var id = marker.id;
24043 if (!(id in hash)) {
24046 index.remove(hash[id]);
24048 lat: marker.latLon.lat,
24049 lon: marker.latLon.lon,
24053 index.insert(item);
24057 exports.MarkerSet = MarkerSet;
24058 Object.defineProperty(exports, "__esModule", { value: true });
24059 exports.default = MarkerSet;
24061 },{"rbush":24,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72}],264:[function(require,module,exports){
24062 /// <reference path="../../../../typings/index.d.ts" />
24064 var __extends = (this && this.__extends) || function (d, b) {
24065 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
24066 function __() { this.constructor = d; }
24067 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24069 var THREE = require("three");
24070 var Component_1 = require("../../../Component");
24072 * @class CircleMarker
24074 * @classdesc Non-interactive marker with a flat circle shape. The circle
24075 * marker can not be configured to be interactive.
24077 * Circle marker properties can not be updated after creation.
24079 * To create and add one `CircleMarker` with default configuration
24080 * and one with configuration use
24084 * var defaultMarker = new Mapillary.MarkerComponent.CircleMarker(
24086 * { lat: 0, lon: 0, });
24088 * var configuredMarker = new Mapillary.MarkerComponent.CircleMarker(
24090 * { lat: 0, lon: 0, },
24097 * markerComponent.add([defaultMarker, configuredMarker]);
24100 var CircleMarker = (function (_super) {
24101 __extends(CircleMarker, _super);
24102 function CircleMarker(id, latLon, options) {
24103 var _this = _super.call(this, id, latLon) || this;
24104 options = !!options ? options : {};
24105 _this._color = options.color != null ? options.color : 0xffffff;
24106 _this._opacity = options.opacity != null ? options.opacity : 0.4;
24107 _this._radius = options.radius != null ? options.radius : 1;
24110 CircleMarker.prototype._createGeometry = function (position) {
24111 var circle = new THREE.Mesh(new THREE.CircleGeometry(this._radius, 16), new THREE.MeshBasicMaterial({
24112 color: this._color,
24113 opacity: this._opacity,
24116 circle.up.fromArray([0, 0, 1]);
24117 circle.renderOrder = -1;
24118 var group = new THREE.Object3D();
24120 group.position.fromArray(position);
24121 this._geometry = group;
24123 CircleMarker.prototype._disposeGeometry = function () {
24124 for (var _i = 0, _a = this._geometry.children; _i < _a.length; _i++) {
24126 mesh.geometry.dispose();
24127 mesh.material.dispose();
24130 CircleMarker.prototype._getInteractiveObjects = function () {
24133 return CircleMarker;
24134 }(Component_1.Marker));
24135 exports.CircleMarker = CircleMarker;
24136 Object.defineProperty(exports, "__esModule", { value: true });
24137 exports.default = CircleMarker;
24139 },{"../../../Component":224,"three":174}],265:[function(require,module,exports){
24140 /// <reference path="../../../../typings/index.d.ts" />
24145 * @classdesc Represents an abstract marker class that should be extended
24146 * by marker implementations used in the marker component.
24148 var Marker = (function () {
24149 function Marker(id, latLon) {
24151 this._latLon = latLon;
24153 Object.defineProperty(Marker.prototype, "id", {
24156 * @returns {string} The id of the marker.
24164 Object.defineProperty(Marker.prototype, "geometry", {
24166 return this._geometry;
24171 Object.defineProperty(Marker.prototype, "latLon", {
24174 * @returns {ILatLon} The geographic coordinates of the marker.
24177 return this._latLon;
24182 Marker.prototype.createGeometry = function (position) {
24183 if (!!this._geometry) {
24186 this._createGeometry(position);
24187 // update matrix world if raycasting occurs before first render
24188 this._geometry.updateMatrixWorld(true);
24190 Marker.prototype.disposeGeometry = function () {
24191 if (!this._geometry) {
24194 this._disposeGeometry();
24195 this._geometry = undefined;
24197 Marker.prototype.getInteractiveObjects = function () {
24198 if (!this._geometry) {
24201 return this._getInteractiveObjects();
24203 Marker.prototype.lerpAltitude = function (alt, alpha) {
24204 if (!this._geometry) {
24207 this._geometry.position.z = (1 - alpha) * this._geometry.position.z + alpha * alt;
24209 Marker.prototype.updatePosition = function (position, latLon) {
24211 this._latLon.lat = latLon.lat;
24212 this._latLon.lon = latLon.lon;
24214 if (!this._geometry) {
24217 this._geometry.position.fromArray(position);
24218 this._geometry.updateMatrixWorld(true);
24222 exports.Marker = Marker;
24223 Object.defineProperty(exports, "__esModule", { value: true });
24224 exports.default = Marker;
24226 },{}],266:[function(require,module,exports){
24227 /// <reference path="../../../../typings/index.d.ts" />
24229 var __extends = (this && this.__extends) || function (d, b) {
24230 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
24231 function __() { this.constructor = d; }
24232 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24234 var THREE = require("three");
24235 var Component_1 = require("../../../Component");
24237 * @class SimpleMarker
24239 * @classdesc Interactive marker with ice cream shape. The sphere
24240 * inside the ice cream can be configured to be interactive.
24242 * Simple marker properties can not be updated after creation.
24244 * To create and add one `SimpleMarker` with default configuration
24245 * (non-interactive) and one interactive with configuration use
24249 * var defaultMarker = new Mapillary.MarkerComponent.SimpleMarker(
24251 * { lat: 0, lon: 0, });
24253 * var interactiveMarker = new Mapillary.MarkerComponent.SimpleMarker(
24255 * { lat: 0, lon: 0, },
24257 * ballColor: "#00f",
24258 * ballOpacity: 0.5,
24260 * interactive: true,
24265 * markerComponent.add([defaultMarker, interactiveMarker]);
24268 var SimpleMarker = (function (_super) {
24269 __extends(SimpleMarker, _super);
24270 function SimpleMarker(id, latLon, options) {
24271 var _this = _super.call(this, id, latLon) || this;
24272 options = !!options ? options : {};
24273 _this._ballColor = options.ballColor != null ? options.ballColor : 0xff0000;
24274 _this._ballOpacity = options.ballOpacity != null ? options.ballOpacity : 0.8;
24275 _this._circleToRayAngle = 2;
24276 _this._color = options.color != null ? options.color : 0xff0000;
24277 _this._interactive = !!options.interactive;
24278 _this._opacity = options.opacity != null ? options.opacity : 0.4;
24279 _this._radius = options.radius != null ? options.radius : 1;
24282 SimpleMarker.prototype._createGeometry = function (position) {
24283 var radius = this._radius;
24284 var cone = new THREE.Mesh(this._markerGeometry(radius, 8, 8), new THREE.MeshBasicMaterial({
24285 color: this._color,
24286 opacity: this._opacity,
24287 shading: THREE.SmoothShading,
24290 cone.renderOrder = 1;
24291 var ball = new THREE.Mesh(new THREE.SphereGeometry(radius / 2, 8, 8), new THREE.MeshBasicMaterial({
24292 color: this._ballColor,
24293 opacity: this._ballOpacity,
24294 shading: THREE.SmoothShading,
24297 ball.position.z = this._markerHeight(radius);
24298 var group = new THREE.Object3D();
24301 group.position.fromArray(position);
24302 this._geometry = group;
24304 SimpleMarker.prototype._disposeGeometry = function () {
24305 for (var _i = 0, _a = this._geometry.children; _i < _a.length; _i++) {
24307 mesh.geometry.dispose();
24308 mesh.material.dispose();
24311 SimpleMarker.prototype._getInteractiveObjects = function () {
24312 return this._interactive ? [this._geometry.children[0]] : [];
24314 SimpleMarker.prototype._markerHeight = function (radius) {
24315 var t = Math.tan(Math.PI - this._circleToRayAngle);
24316 return radius * Math.sqrt(1 + t * t);
24318 SimpleMarker.prototype._markerGeometry = function (radius, widthSegments, heightSegments) {
24319 var geometry = new THREE.Geometry();
24320 widthSegments = Math.max(3, Math.floor(widthSegments) || 8);
24321 heightSegments = Math.max(2, Math.floor(heightSegments) || 6);
24322 var height = this._markerHeight(radius);
24324 for (var y = 0; y <= heightSegments; ++y) {
24325 var verticesRow = [];
24326 for (var x = 0; x <= widthSegments; ++x) {
24327 var u = x / widthSegments * Math.PI * 2;
24328 var v = y / heightSegments * Math.PI;
24330 if (v < this._circleToRayAngle) {
24334 var t = Math.tan(v - this._circleToRayAngle);
24335 r = radius * Math.sqrt(1 + t * t);
24337 var vertex = new THREE.Vector3();
24338 vertex.x = r * Math.cos(u) * Math.sin(v);
24339 vertex.y = r * Math.sin(u) * Math.sin(v);
24340 vertex.z = r * Math.cos(v) + height;
24341 geometry.vertices.push(vertex);
24342 verticesRow.push(geometry.vertices.length - 1);
24344 vertices.push(verticesRow);
24346 for (var y = 0; y < heightSegments; ++y) {
24347 for (var x = 0; x < widthSegments; ++x) {
24348 var v1 = vertices[y][x + 1];
24349 var v2 = vertices[y][x];
24350 var v3 = vertices[y + 1][x];
24351 var v4 = vertices[y + 1][x + 1];
24352 var n1 = geometry.vertices[v1].clone().normalize();
24353 var n2 = geometry.vertices[v2].clone().normalize();
24354 var n3 = geometry.vertices[v3].clone().normalize();
24355 var n4 = geometry.vertices[v4].clone().normalize();
24356 geometry.faces.push(new THREE.Face3(v1, v2, v4, [n1, n2, n4]));
24357 geometry.faces.push(new THREE.Face3(v2, v3, v4, [n2.clone(), n3, n4.clone()]));
24360 geometry.computeFaceNormals();
24361 geometry.boundingSphere = new THREE.Sphere(new THREE.Vector3(), radius + height);
24364 return SimpleMarker;
24365 }(Component_1.Marker));
24366 exports.SimpleMarker = SimpleMarker;
24367 Object.defineProperty(exports, "__esModule", { value: true });
24368 exports.default = SimpleMarker;
24370 },{"../../../Component":224,"three":174}],267:[function(require,module,exports){
24372 var __extends = (this && this.__extends) || function (d, b) {
24373 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
24374 function __() { this.constructor = d; }
24375 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24377 var Observable_1 = require("rxjs/Observable");
24378 var Component_1 = require("../../Component");
24380 * The `DoubleClickZoomHandler` allows the user to zoom the viewer photo at a point by double clicking.
24382 var DoubleClickZoomHandler = (function (_super) {
24383 __extends(DoubleClickZoomHandler, _super);
24384 function DoubleClickZoomHandler() {
24385 return _super !== null && _super.apply(this, arguments) || this;
24387 DoubleClickZoomHandler.prototype._enable = function () {
24389 this._zoomSubscription = Observable_1.Observable
24390 .merge(this._container.mouseService
24391 .filtered$(this._component.name, this._container.mouseService.dblClick$), this._container.touchService.doubleTap$
24392 .map(function (e) {
24393 var touch = e.touches[0];
24394 return { clientX: touch.clientX, clientY: touch.clientY, shiftKey: e.shiftKey };
24396 .withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$)
24397 .subscribe(function (_a) {
24398 var event = _a[0], render = _a[1], transform = _a[2];
24399 var element = _this._container.element;
24400 var _b = _this._viewportCoords.canvasPosition(event, element), canvasX = _b[0], canvasY = _b[1];
24401 var unprojected = _this._viewportCoords.unprojectFromCanvas(canvasX, canvasY, element, render.perspective);
24402 var reference = transform.projectBasic(unprojected.toArray());
24403 var delta = !!event.shiftKey ? -1 : 1;
24404 _this._navigator.stateService.zoomIn(delta, reference);
24407 DoubleClickZoomHandler.prototype._disable = function () {
24408 this._zoomSubscription.unsubscribe();
24410 DoubleClickZoomHandler.prototype._getConfiguration = function (enable) {
24411 return { doubleClickZoom: enable };
24413 return DoubleClickZoomHandler;
24414 }(Component_1.MouseHandlerBase));
24415 exports.DoubleClickZoomHandler = DoubleClickZoomHandler;
24416 Object.defineProperty(exports, "__esModule", { value: true });
24417 exports.default = DoubleClickZoomHandler;
24419 },{"../../Component":224,"rxjs/Observable":28}],268:[function(require,module,exports){
24420 /// <reference path="../../../typings/index.d.ts" />
24422 var __extends = (this && this.__extends) || function (d, b) {
24423 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
24424 function __() { this.constructor = d; }
24425 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24427 var THREE = require("three");
24428 var Observable_1 = require("rxjs/Observable");
24429 var Component_1 = require("../../Component");
24431 * The `DragPanHandler` allows the user to pan the viewer photo by clicking and dragging the cursor.
24433 var DragPanHandler = (function (_super) {
24434 __extends(DragPanHandler, _super);
24435 function DragPanHandler(component, container, navigator, viewportCoords, spatial) {
24436 var _this = _super.call(this, component, container, navigator, viewportCoords) || this;
24437 _this._spatial = spatial;
24438 _this._basicRotationThreshold = 5e-2;
24439 _this._forceCoeff = 2e-1;
24442 DragPanHandler.prototype._enable = function () {
24444 this._preventDefaultSubscription = Observable_1.Observable.merge(this._container.mouseService.mouseDragStart$, this._container.mouseService.mouseDrag$, this._container.touchService.touchMove$)
24445 .subscribe(function (event) {
24446 event.preventDefault(); // prevent selection of content outside the viewer
24448 var draggingStarted$ = this._container.mouseService
24449 .filtered$(this._component.name, this._container.mouseService.mouseDragStart$)
24450 .map(function (event) {
24453 var draggingStopped$ = this._container.mouseService
24454 .filtered$(this._component.name, this._container.mouseService.mouseDragEnd$)
24455 .map(function (event) {
24458 this._activeMouseSubscription = Observable_1.Observable
24459 .merge(draggingStarted$, draggingStopped$)
24460 .subscribe(this._container.mouseService.activate$);
24461 var touchMovingStarted$ = this._container.touchService.singleTouchDragStart$
24462 .map(function (event) {
24465 var touchMovingStopped$ = this._container.touchService.singleTouchDragEnd$
24466 .map(function (event) {
24469 this._activeTouchSubscription = Observable_1.Observable
24470 .merge(touchMovingStarted$, touchMovingStopped$)
24471 .subscribe(this._container.touchService.activate$);
24472 this._rotateBasicSubscription = this._navigator.stateService.currentState$
24473 .map(function (frame) {
24474 return frame.state.currentNode.fullPano || frame.state.nodesAhead < 1;
24476 .distinctUntilChanged()
24477 .switchMap(function (enable) {
24479 return Observable_1.Observable.empty();
24481 var mouseDrag$ = Observable_1.Observable
24482 .merge(_this._container.mouseService.filtered$(_this._component.name, _this._container.mouseService.mouseDragStart$), _this._container.mouseService.filtered$(_this._component.name, _this._container.mouseService.mouseDrag$), _this._container.mouseService.filtered$(_this._component.name, _this._container.mouseService.mouseDragEnd$)
24483 .map(function (e) { return null; }))
24485 .filter(function (pair) {
24486 return pair[0] != null && pair[1] != null;
24488 var singleTouchDrag$ = Observable_1.Observable
24489 .merge(_this._container.touchService.singleTouchDragStart$, _this._container.touchService.singleTouchDrag$, _this._container.touchService.singleTouchDragEnd$.map(function (t) { return null; }))
24490 .map(function (event) {
24491 return event != null && event.touches.length > 0 ?
24492 event.touches[0] : null;
24495 .filter(function (pair) {
24496 return pair[0] != null && pair[1] != null;
24498 return Observable_1.Observable
24499 .merge(mouseDrag$, singleTouchDrag$);
24501 .withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$, this._navigator.stateService.currentCamera$)
24502 .map(function (_a) {
24503 var events = _a[0], render = _a[1], transform = _a[2], c = _a[3];
24504 var camera = c.clone();
24505 var previousEvent = events[0];
24506 var event = events[1];
24507 var movementX = event.clientX - previousEvent.clientX;
24508 var movementY = event.clientY - previousEvent.clientY;
24509 var element = _this._container.element;
24510 var _b = _this._viewportCoords.canvasPosition(event, element), canvasX = _b[0], canvasY = _b[1];
24511 var currentDirection = _this._viewportCoords.unprojectFromCanvas(canvasX, canvasY, element, render.perspective)
24512 .sub(render.perspective.position);
24513 var directionX = _this._viewportCoords.unprojectFromCanvas(canvasX - movementX, canvasY, element, render.perspective)
24514 .sub(render.perspective.position);
24515 var directionY = _this._viewportCoords.unprojectFromCanvas(canvasX, canvasY - movementY, element, render.perspective)
24516 .sub(render.perspective.position);
24517 var deltaPhi = (movementX > 0 ? 1 : -1) * directionX.angleTo(currentDirection);
24518 var deltaTheta = (movementY > 0 ? -1 : 1) * directionY.angleTo(currentDirection);
24519 var upQuaternion = new THREE.Quaternion().setFromUnitVectors(camera.up, new THREE.Vector3(0, 0, 1));
24520 var upQuaternionInverse = upQuaternion.clone().inverse();
24521 var offset = new THREE.Vector3();
24522 offset.copy(camera.lookat).sub(camera.position);
24523 offset.applyQuaternion(upQuaternion);
24524 var length = offset.length();
24525 var phi = Math.atan2(offset.y, offset.x);
24527 var theta = Math.atan2(Math.sqrt(offset.x * offset.x + offset.y * offset.y), offset.z);
24528 theta += deltaTheta;
24529 theta = Math.max(0.01, Math.min(Math.PI - 0.01, theta));
24530 offset.x = Math.sin(theta) * Math.cos(phi);
24531 offset.y = Math.sin(theta) * Math.sin(phi);
24532 offset.z = Math.cos(theta);
24533 offset.applyQuaternion(upQuaternionInverse);
24534 var lookat = new THREE.Vector3().copy(camera.position).add(offset.multiplyScalar(length));
24535 var basic = transform.projectBasic(lookat.toArray());
24536 var original = transform.projectBasic(camera.lookat.toArray());
24537 var x = basic[0] - original[0];
24538 var y = basic[1] - original[1];
24539 if (Math.abs(x) > 1) {
24542 else if (x > 0.5) {
24545 else if (x < -0.5) {
24548 var rotationThreshold = _this._basicRotationThreshold;
24549 x = _this._spatial.clamp(x, -rotationThreshold, rotationThreshold);
24550 y = _this._spatial.clamp(y, -rotationThreshold, rotationThreshold);
24551 if (transform.fullPano) {
24554 var pixelDistances = _this._viewportCoords.getPixelDistances(_this._container.element, transform, render.perspective);
24555 var coeff = _this._forceCoeff;
24556 if (pixelDistances[0] > 0 && y < 0 && basic[1] < 0.5) {
24557 y /= Math.max(1, coeff * pixelDistances[0]);
24559 if (pixelDistances[1] > 0 && x > 0 && basic[0] > 0.5) {
24560 x /= Math.max(1, coeff * pixelDistances[1]);
24562 if (pixelDistances[2] > 0 && y > 0 && basic[1] > 0.5) {
24563 y /= Math.max(1, coeff * pixelDistances[2]);
24565 if (pixelDistances[3] > 0 && x < 0 && basic[0] < 0.5) {
24566 x /= Math.max(1, coeff * pixelDistances[3]);
24570 .subscribe(function (basicRotation) {
24571 _this._navigator.stateService.rotateBasic(basicRotation);
24574 DragPanHandler.prototype._disable = function () {
24575 this._activeMouseSubscription.unsubscribe();
24576 this._activeTouchSubscription.unsubscribe();
24577 this._preventDefaultSubscription.unsubscribe();
24578 this._rotateBasicSubscription.unsubscribe();
24579 this._activeMouseSubscription = null;
24580 this._activeTouchSubscription = null;
24581 this._rotateBasicSubscription = null;
24583 DragPanHandler.prototype._getConfiguration = function (enable) {
24584 return { dragPan: enable };
24586 return DragPanHandler;
24587 }(Component_1.MouseHandlerBase));
24588 exports.DragPanHandler = DragPanHandler;
24589 Object.defineProperty(exports, "__esModule", { value: true });
24590 exports.default = DragPanHandler;
24592 },{"../../Component":224,"rxjs/Observable":28,"three":174}],269:[function(require,module,exports){
24593 /// <reference path="../../../typings/index.d.ts" />
24595 var __extends = (this && this.__extends) || function (d, b) {
24596 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
24597 function __() { this.constructor = d; }
24598 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24600 var Observable_1 = require("rxjs/Observable");
24601 require("rxjs/add/observable/merge");
24602 require("rxjs/add/operator/filter");
24603 require("rxjs/add/operator/map");
24604 require("rxjs/add/operator/withLatestFrom");
24605 var Component_1 = require("../../Component");
24606 var Geo_1 = require("../../Geo");
24608 * @class MouseComponent
24610 * @classdesc Component handling mouse and touch events for camera movement.
24612 var MouseComponent = (function (_super) {
24613 __extends(MouseComponent, _super);
24614 function MouseComponent(name, container, navigator) {
24615 var _this = _super.call(this, name, container, navigator) || this;
24616 _this._basicDistanceThreshold = 1e-3;
24617 _this._basicRotationThreshold = 5e-2;
24618 _this._bounceCoeff = 1e-1;
24619 var spatial = new Geo_1.Spatial();
24620 var viewportCoords = new Geo_1.ViewportCoords();
24621 _this._spatial = spatial;
24622 _this._viewportCoords = viewportCoords;
24623 _this._doubleClickZoomHandler = new Component_1.DoubleClickZoomHandler(_this, container, navigator, viewportCoords);
24624 _this._dragPanHandler = new Component_1.DragPanHandler(_this, container, navigator, viewportCoords, spatial);
24625 _this._scrollZoomHandler = new Component_1.ScrollZoomHandler(_this, container, navigator, viewportCoords);
24626 _this._touchZoomHandler = new Component_1.TouchZoomHandler(_this, container, navigator, viewportCoords);
24629 Object.defineProperty(MouseComponent.prototype, "doubleClickZoom", {
24631 * Get double click zoom.
24633 * @returns {DoubleClickZoomHandler} The double click zoom handler.
24636 return this._doubleClickZoomHandler;
24641 Object.defineProperty(MouseComponent.prototype, "dragPan", {
24645 * @returns {DragPanHandler} The drag pan handler.
24648 return this._dragPanHandler;
24653 Object.defineProperty(MouseComponent.prototype, "scrollZoom", {
24657 * @returns {ScrollZoomHandler} The scroll zoom handler.
24660 return this._scrollZoomHandler;
24665 Object.defineProperty(MouseComponent.prototype, "touchZoom", {
24669 * @returns {TouchZoomHandler} The touch zoom handler.
24672 return this._touchZoomHandler;
24677 MouseComponent.prototype._activate = function () {
24679 this._configurationSubscription = this._configuration$
24680 .subscribe(function (configuration) {
24681 if (configuration.doubleClickZoom) {
24682 _this._doubleClickZoomHandler.enable();
24685 _this._doubleClickZoomHandler.disable();
24687 if (configuration.dragPan) {
24688 _this._dragPanHandler.enable();
24691 _this._dragPanHandler.disable();
24693 if (configuration.scrollZoom) {
24694 _this._scrollZoomHandler.enable();
24697 _this._scrollZoomHandler.disable();
24699 if (configuration.touchZoom) {
24700 _this._touchZoomHandler.enable();
24703 _this._touchZoomHandler.disable();
24706 var inTransition$ = this._navigator.stateService.currentState$
24707 .map(function (frame) {
24708 return frame.state.alpha < 1;
24710 this._bounceSubscription = Observable_1.Observable
24711 .combineLatest(inTransition$, this._navigator.stateService.inTranslation$, this._container.mouseService.active$, this._container.touchService.active$)
24712 .map(function (noForce) {
24713 return noForce[0] || noForce[1] || noForce[2] || noForce[3];
24715 .distinctUntilChanged()
24716 .switchMap(function (noForce) {
24718 Observable_1.Observable.empty() :
24719 Observable_1.Observable.combineLatest(_this._container.renderService.renderCamera$, _this._navigator.stateService.currentTransform$.first());
24721 .subscribe(function (args) {
24722 var renderCamera = args[0];
24723 var perspectiveCamera = renderCamera.perspective;
24724 var transform = args[1];
24725 var distanceThreshold = _this._basicDistanceThreshold / Math.pow(2, renderCamera.zoom);
24726 var basicCenter = _this._viewportCoords.viewportToBasic(0, 0, transform, perspectiveCamera);
24727 if (Math.abs(basicCenter[0] - 0.5) < distanceThreshold && Math.abs(basicCenter[1] - 0.5) < distanceThreshold) {
24730 var basicDistances = _this._viewportCoords.getBasicDistances(transform, perspectiveCamera);
24733 if (basicDistances[0] < distanceThreshold && basicDistances[1] < distanceThreshold &&
24734 basicDistances[2] < distanceThreshold && basicDistances[3] < distanceThreshold) {
24737 if (Math.abs(basicDistances[0] - basicDistances[2]) < distanceThreshold &&
24738 Math.abs(basicDistances[1] - basicDistances[3]) < distanceThreshold) {
24741 var coeff = _this._bounceCoeff;
24742 if (basicDistances[1] > 0 && basicDistances[3] === 0) {
24743 basicX = -coeff * basicDistances[1];
24745 else if (basicDistances[1] === 0 && basicDistances[3] > 0) {
24746 basicX = coeff * basicDistances[3];
24748 else if (basicDistances[1] > 0 && basicDistances[3] > 0) {
24749 basicX = coeff * (basicDistances[3] - basicDistances[1]) / 2;
24751 if (basicDistances[0] > 0 && basicDistances[2] === 0) {
24752 basicY = coeff * basicDistances[0];
24754 else if (basicDistances[0] === 0 && basicDistances[2] > 0) {
24755 basicY = -coeff * basicDistances[2];
24757 else if (basicDistances[0] > 0 && basicDistances[2] > 0) {
24758 basicY = coeff * (basicDistances[0] - basicDistances[2]) / 2;
24760 var rotationThreshold = _this._basicRotationThreshold;
24761 basicX = _this._spatial.clamp(basicX, -rotationThreshold, rotationThreshold);
24762 basicY = _this._spatial.clamp(basicY, -rotationThreshold, rotationThreshold);
24763 _this._navigator.stateService.rotateBasicUnbounded([basicX, basicY]);
24765 this._container.mouseService.claimMouse(this._name, 0);
24767 MouseComponent.prototype._deactivate = function () {
24768 this._container.mouseService.unclaimMouse(this._name);
24769 this._bounceSubscription.unsubscribe();
24770 this._configurationSubscription.unsubscribe();
24771 this._doubleClickZoomHandler.disable();
24772 this._dragPanHandler.disable();
24773 this._scrollZoomHandler.disable();
24774 this._touchZoomHandler.disable();
24776 MouseComponent.prototype._getDefaultConfiguration = function () {
24777 return { doubleClickZoom: true, dragPan: true, scrollZoom: true, touchZoom: true };
24779 return MouseComponent;
24780 }(Component_1.Component));
24782 MouseComponent.componentName = "mouse";
24783 exports.MouseComponent = MouseComponent;
24784 Component_1.ComponentService.register(MouseComponent);
24785 Object.defineProperty(exports, "__esModule", { value: true });
24786 exports.default = MouseComponent;
24788 },{"../../Component":224,"../../Geo":227,"rxjs/Observable":28,"rxjs/add/observable/merge":43,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/withLatestFrom":82}],270:[function(require,module,exports){
24790 var MouseHandlerBase = (function () {
24791 function MouseHandlerBase(component, container, navigator, viewportCoords) {
24792 this._component = component;
24793 this._container = container;
24794 this._navigator = navigator;
24795 this._viewportCoords = viewportCoords;
24796 this._enabled = false;
24798 Object.defineProperty(MouseHandlerBase.prototype, "isEnabled", {
24800 * Returns a Boolean indicating whether the interaction is enabled.
24802 * @returns {boolean} `true` if the interaction is enabled.
24805 return this._enabled;
24811 * Enables the interaction.
24813 * @example ```mouseComponent.<handler-name>.enable();```
24815 MouseHandlerBase.prototype.enable = function () {
24816 if (this._enabled || !this._component.activated) {
24820 this._enabled = true;
24821 this._component.configure(this._getConfiguration(true));
24824 * Disables the interaction.
24826 * @example ```mouseComponent.<handler-name>.disable();```
24828 MouseHandlerBase.prototype.disable = function () {
24829 if (!this._enabled) {
24833 this._enabled = false;
24834 if (this._component.activated) {
24835 this._component.configure(this._getConfiguration(false));
24838 return MouseHandlerBase;
24840 exports.MouseHandlerBase = MouseHandlerBase;
24841 Object.defineProperty(exports, "__esModule", { value: true });
24842 exports.default = MouseHandlerBase;
24844 },{}],271:[function(require,module,exports){
24846 var __extends = (this && this.__extends) || function (d, b) {
24847 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
24848 function __() { this.constructor = d; }
24849 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24851 var Component_1 = require("../../Component");
24853 * The `ScrollZoomHandler` allows the user to zoom the viewer photo by scrolling.
24855 var ScrollZoomHandler = (function (_super) {
24856 __extends(ScrollZoomHandler, _super);
24857 function ScrollZoomHandler() {
24858 return _super !== null && _super.apply(this, arguments) || this;
24860 ScrollZoomHandler.prototype._enable = function () {
24862 this._preventDefaultSubscription = this._container.mouseService.mouseWheel$
24863 .subscribe(function (event) {
24864 event.preventDefault();
24866 this._zoomSubscription = this._container.mouseService
24867 .filtered$(this._component.name, this._container.mouseService.mouseWheel$)
24868 .withLatestFrom(this._navigator.stateService.currentState$, function (w, f) {
24871 .filter(function (args) {
24872 var state = args[1].state;
24873 return state.currentNode.fullPano || state.nodesAhead < 1;
24875 .map(function (args) {
24878 .withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$, function (w, r, t) {
24881 .subscribe(function (args) {
24882 var event = args[0];
24883 var render = args[1];
24884 var transform = args[2];
24885 var element = _this._container.element;
24886 var _a = _this._viewportCoords.canvasPosition(event, element), canvasX = _a[0], canvasY = _a[1];
24887 var unprojected = _this._viewportCoords.unprojectFromCanvas(canvasX, canvasY, element, render.perspective);
24888 var reference = transform.projectBasic(unprojected.toArray());
24889 var deltaY = event.deltaY;
24890 if (event.deltaMode === 1) {
24891 deltaY = 40 * deltaY;
24893 else if (event.deltaMode === 2) {
24894 deltaY = 800 * deltaY;
24896 var canvasSize = _this._viewportCoords.containerToCanvas(element);
24897 var zoom = -3 * deltaY / canvasSize[1];
24898 _this._navigator.stateService.zoomIn(zoom, reference);
24901 ScrollZoomHandler.prototype._disable = function () {
24902 this._preventDefaultSubscription.unsubscribe();
24903 this._zoomSubscription.unsubscribe();
24904 this._preventDefaultSubscription = null;
24905 this._zoomSubscription = null;
24907 ScrollZoomHandler.prototype._getConfiguration = function (enable) {
24908 return { scrollZoom: enable };
24910 return ScrollZoomHandler;
24911 }(Component_1.MouseHandlerBase));
24912 exports.ScrollZoomHandler = ScrollZoomHandler;
24913 Object.defineProperty(exports, "__esModule", { value: true });
24914 exports.default = ScrollZoomHandler;
24916 },{"../../Component":224}],272:[function(require,module,exports){
24917 /// <reference path="../../../typings/index.d.ts" />
24919 var __extends = (this && this.__extends) || function (d, b) {
24920 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
24921 function __() { this.constructor = d; }
24922 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24924 var Observable_1 = require("rxjs/Observable");
24925 var Component_1 = require("../../Component");
24927 * The `TouchZoomHandler` allows the user to zoom the viewer photo by pinching on a touchscreen.
24929 var TouchZoomHandler = (function (_super) {
24930 __extends(TouchZoomHandler, _super);
24931 function TouchZoomHandler() {
24932 return _super !== null && _super.apply(this, arguments) || this;
24934 TouchZoomHandler.prototype._enable = function () {
24936 this._preventDefaultSubscription = this._container.touchService.pinch$
24937 .subscribe(function (pinch) {
24938 pinch.originalEvent.preventDefault();
24940 var pinchStarted$ = this._container.touchService.pinchStart$
24941 .map(function (event) {
24944 var pinchStopped$ = this._container.touchService.pinchEnd$
24945 .map(function (event) {
24948 this._activeSubscription = Observable_1.Observable
24949 .merge(pinchStarted$, pinchStopped$)
24950 .subscribe(this._container.touchService.activate$);
24951 this._zoomSubscription = this._container.touchService.pinch$
24952 .withLatestFrom(this._navigator.stateService.currentState$)
24953 .filter(function (args) {
24954 var state = args[1].state;
24955 return state.currentNode.fullPano || state.nodesAhead < 1;
24957 .map(function (args) {
24960 .withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$)
24961 .subscribe(function (_a) {
24962 var pinch = _a[0], render = _a[1], transform = _a[2];
24963 var element = _this._container.element;
24964 var _b = _this._viewportCoords.canvasPosition(pinch, element), canvasX = _b[0], canvasY = _b[1];
24965 var unprojected = _this._viewportCoords.unprojectFromCanvas(canvasX, canvasY, element, render.perspective);
24966 var reference = transform.projectBasic(unprojected.toArray());
24967 var _c = _this._viewportCoords.containerToCanvas(element), canvasWidth = _c[0], canvasHeight = _c[1];
24968 var zoom = 3 * pinch.distanceChange / Math.min(canvasWidth, canvasHeight);
24969 _this._navigator.stateService.zoomIn(zoom, reference);
24972 TouchZoomHandler.prototype._disable = function () {
24973 this._activeSubscription.unsubscribe();
24974 this._preventDefaultSubscription.unsubscribe();
24975 this._zoomSubscription.unsubscribe();
24976 this._preventDefaultSubscription = null;
24977 this._zoomSubscription = null;
24979 TouchZoomHandler.prototype._getConfiguration = function (enable) {
24980 return { touchZoom: enable };
24982 return TouchZoomHandler;
24983 }(Component_1.MouseHandlerBase));
24984 exports.TouchZoomHandler = TouchZoomHandler;
24985 Object.defineProperty(exports, "__esModule", { value: true });
24986 exports.default = TouchZoomHandler;
24988 },{"../../Component":224,"rxjs/Observable":28}],273:[function(require,module,exports){
24989 /// <reference path="../../../typings/index.d.ts" />
24991 var __extends = (this && this.__extends) || function (d, b) {
24992 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
24993 function __() { this.constructor = d; }
24994 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24996 var Observable_1 = require("rxjs/Observable");
24997 var Subject_1 = require("rxjs/Subject");
24998 require("rxjs/add/observable/combineLatest");
24999 require("rxjs/add/observable/of");
25000 require("rxjs/add/operator/bufferCount");
25001 require("rxjs/add/operator/concat");
25002 require("rxjs/add/operator/distinctUntilChanged");
25003 require("rxjs/add/operator/filter");
25004 require("rxjs/add/operator/finally");
25005 require("rxjs/add/operator/first");
25006 require("rxjs/add/operator/map");
25007 require("rxjs/add/operator/publishReplay");
25008 require("rxjs/add/operator/scan");
25009 require("rxjs/add/operator/share");
25010 require("rxjs/add/operator/switchMap");
25011 require("rxjs/add/operator/takeUntil");
25012 require("rxjs/add/operator/withLatestFrom");
25013 var Component_1 = require("../../Component");
25014 var Edge_1 = require("../../Edge");
25016 * @class SequenceComponent
25017 * @classdesc Component showing navigation arrows for sequence directions
25018 * as well as playing button. Exposes an API to start and stop play.
25020 var SequenceComponent = (function (_super) {
25021 __extends(SequenceComponent, _super);
25022 function SequenceComponent(name, container, navigator) {
25023 var _this = _super.call(this, name, container, navigator) || this;
25024 _this._nodesAhead = 5;
25025 _this._configurationOperation$ = new Subject_1.Subject();
25026 _this._sequenceDOMRenderer = new Component_1.SequenceDOMRenderer(container.element);
25027 _this._sequenceDOMInteraction = new Component_1.SequenceDOMInteraction();
25028 _this._containerWidth$ = new Subject_1.Subject();
25029 _this._hoveredKeySubject$ = new Subject_1.Subject();
25030 _this._hoveredKey$ = _this._hoveredKeySubject$.share();
25031 _this._edgeStatus$ = _this._navigator.stateService.currentNode$
25032 .switchMap(function (node) {
25033 return node.sequenceEdges$;
25039 Object.defineProperty(SequenceComponent.prototype, "hoveredKey$", {
25041 * Get hovered key observable.
25043 * @description An observable emitting the key of the node for the direction
25044 * arrow that is being hovered. When the mouse leaves a direction arrow null
25047 * @returns {Observable<string>}
25050 return this._hoveredKey$;
25058 * @fires PlayerComponent#playingchanged
25060 SequenceComponent.prototype.play = function () {
25061 this.configure({ playing: true });
25066 * @fires PlayerComponent#playingchanged
25068 SequenceComponent.prototype.stop = function () {
25069 this.configure({ playing: false });
25072 * Set the direction to follow when playing.
25074 * @param {EdgeDirection} direction - The direction that will be followed when playing.
25076 SequenceComponent.prototype.setDirection = function (direction) {
25077 this.configure({ direction: direction });
25080 * Set highlight key.
25082 * @description The arrow pointing towards the node corresponding to the
25083 * highlight key will be highlighted.
25085 * @param {string} highlightKey Key of node to be highlighted if existing.
25087 SequenceComponent.prototype.setHighlightKey = function (highlightKey) {
25088 this.configure({ highlightKey: highlightKey });
25091 * Set max width of container element.
25093 * @description Set max width of the container element holding
25094 * the sequence navigation elements. If the min width is larger than the
25095 * max width the min width value will be used.
25097 * The container element is automatically resized when the resize
25098 * method on the Viewer class is called.
25100 * @param {number} minWidth
25102 SequenceComponent.prototype.setMaxWidth = function (maxWidth) {
25103 this.configure({ maxWidth: maxWidth });
25106 * Set min width of container element.
25108 * @description Set min width of the container element holding
25109 * the sequence navigation elements. If the min width is larger than the
25110 * max width the min width value will be used.
25112 * The container element is automatically resized when the resize
25113 * method on the Viewer class is called.
25115 * @param {number} minWidth
25117 SequenceComponent.prototype.setMinWidth = function (minWidth) {
25118 this.configure({ minWidth: minWidth });
25121 * Set the value indicating whether the sequence UI elements should be visible.
25123 * @param {boolean} visible
25125 SequenceComponent.prototype.setVisible = function (visible) {
25126 this.configure({ visible: visible });
25129 SequenceComponent.prototype.resize = function () {
25131 this._configuration$
25133 .map(function (configuration) {
25134 return _this._sequenceDOMRenderer.getContainerWidth(_this._container.element, configuration);
25136 .subscribe(function (containerWidth) {
25137 _this._containerWidth$.next(containerWidth);
25140 SequenceComponent.prototype._activate = function () {
25142 this._renderSubscription = Observable_1.Observable
25143 .combineLatest(this._edgeStatus$, this._configuration$, this._containerWidth$)
25144 .map(function (ec) {
25145 var edgeStatus = ec[0];
25146 var configuration = ec[1];
25147 var containerWidth = ec[2];
25148 var vNode = _this._sequenceDOMRenderer
25149 .render(edgeStatus, configuration, containerWidth, _this, _this._sequenceDOMInteraction, _this._navigator);
25150 return { name: _this._name, vnode: vNode };
25152 .subscribe(this._container.domRenderer.render$);
25153 this._containerWidthSubscription = this._configuration$
25154 .distinctUntilChanged(function (value1, value2) {
25155 return value1[0] === value2[0] && value1[1] === value2[1];
25156 }, function (configuration) {
25157 return [configuration.minWidth, configuration.maxWidth];
25159 .map(function (configuration) {
25160 return _this._sequenceDOMRenderer.getContainerWidth(_this._container.element, configuration);
25162 .subscribe(this._containerWidth$);
25163 this._configurationSubscription = this._configurationOperation$
25164 .scan(function (configuration, operation) {
25165 return operation(configuration);
25166 }, { playing: false })
25167 .finally(function () {
25168 if (_this._playingSubscription != null) {
25169 _this._navigator.stateService.cutNodes();
25173 .subscribe(function () { });
25174 this._configuration$
25175 .map(function (newConfiguration) {
25176 return function (configuration) {
25177 if (newConfiguration.playing !== configuration.playing) {
25178 _this._navigator.stateService.cutNodes();
25179 if (newConfiguration.playing) {
25186 configuration.playing = newConfiguration.playing;
25187 return configuration;
25190 .subscribe(this._configurationOperation$);
25191 this._stopSubscription = this._configuration$
25192 .switchMap(function (configuration) {
25193 var edgeStatus$ = configuration.playing ?
25194 _this._edgeStatus$ :
25195 Observable_1.Observable.empty();
25196 var edgeDirection$ = Observable_1.Observable
25197 .of(configuration.direction);
25198 return Observable_1.Observable
25199 .combineLatest(edgeStatus$, edgeDirection$);
25201 .map(function (ne) {
25202 var edgeStatus = ne[0];
25203 var direction = ne[1];
25204 if (!edgeStatus.cached) {
25207 for (var _i = 0, _a = edgeStatus.edges; _i < _a.length; _i++) {
25209 if (edge.data.direction === direction) {
25215 .filter(function (hasEdge) {
25218 .map(function (hasEdge) {
25219 return { playing: false };
25221 .subscribe(this._configurationSubject$);
25222 this._hoveredKeySubscription = this._sequenceDOMInteraction.mouseEnterDirection$
25223 .switchMap(function (direction) {
25224 return _this._edgeStatus$
25225 .map(function (edgeStatus) {
25226 for (var _i = 0, _a = edgeStatus.edges; _i < _a.length; _i++) {
25228 if (edge.data.direction === direction) {
25234 .takeUntil(_this._sequenceDOMInteraction.mouseLeaveDirection$)
25235 .concat(Observable_1.Observable.of(null));
25237 .distinctUntilChanged()
25238 .subscribe(this._hoveredKeySubject$);
25240 SequenceComponent.prototype._deactivate = function () {
25241 this._stopSubscription.unsubscribe();
25242 this._renderSubscription.unsubscribe();
25243 this._configurationSubscription.unsubscribe();
25244 this._containerWidthSubscription.unsubscribe();
25245 this._hoveredKeySubscription.unsubscribe();
25248 SequenceComponent.prototype._getDefaultConfiguration = function () {
25250 direction: Edge_1.EdgeDirection.Next,
25257 SequenceComponent.prototype._play = function () {
25259 this._playingSubscription = this._navigator.stateService.currentState$
25260 .filter(function (frame) {
25261 return frame.state.nodesAhead < _this._nodesAhead;
25263 .map(function (frame) {
25264 return frame.state.lastNode;
25266 .distinctUntilChanged(undefined, function (lastNode) {
25267 return lastNode.key;
25269 .withLatestFrom(this._configuration$, function (lastNode, configuration) {
25270 return [lastNode, configuration.direction];
25272 .switchMap(function (nd) {
25273 return ([Edge_1.EdgeDirection.Next, Edge_1.EdgeDirection.Prev].indexOf(nd[1]) > -1 ?
25274 nd[0].sequenceEdges$ :
25275 nd[0].spatialEdges$)
25276 .filter(function (status) {
25277 return status.cached;
25279 .zip(Observable_1.Observable.of(nd[1]), function (status, direction) {
25280 return [status, direction];
25283 .map(function (ed) {
25284 var direction = ed[1];
25285 for (var _i = 0, _a = ed[0].edges; _i < _a.length; _i++) {
25287 if (edge.data.direction === direction) {
25293 .filter(function (key) {
25294 return key != null;
25296 .switchMap(function (key) {
25297 return _this._navigator.graphService.cacheNode$(key);
25299 .subscribe(function (node) {
25300 _this._navigator.stateService.appendNodes([node]);
25301 }, function (error) {
25302 console.error(error);
25305 this._clearSubscription = this._navigator.stateService.currentNode$
25307 .subscribe(function (nodes) {
25308 _this._navigator.stateService.clearPriorNodes();
25310 this.fire(SequenceComponent.playingchanged, true);
25312 SequenceComponent.prototype._stop = function () {
25313 this._playingSubscription.unsubscribe();
25314 this._playingSubscription = null;
25315 this._clearSubscription.unsubscribe();
25316 this._clearSubscription = null;
25317 this.fire(SequenceComponent.playingchanged, false);
25319 return SequenceComponent;
25320 }(Component_1.Component));
25322 SequenceComponent.componentName = "sequence";
25324 * Event fired when playing starts or stops.
25326 * @event PlayerComponent#playingchanged
25327 * @type {boolean} Indicates whether the player is playing.
25329 SequenceComponent.playingchanged = "playingchanged";
25330 exports.SequenceComponent = SequenceComponent;
25331 Component_1.ComponentService.register(SequenceComponent);
25332 Object.defineProperty(exports, "__esModule", { value: true });
25333 exports.default = SequenceComponent;
25335 },{"../../Component":224,"../../Edge":225,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/of":44,"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/concat":53,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],274:[function(require,module,exports){
25337 var Subject_1 = require("rxjs/Subject");
25338 var SequenceDOMInteraction = (function () {
25339 function SequenceDOMInteraction() {
25340 this._mouseEnterDirection$ = new Subject_1.Subject();
25341 this._mouseLeaveDirection$ = new Subject_1.Subject();
25343 Object.defineProperty(SequenceDOMInteraction.prototype, "mouseEnterDirection$", {
25345 return this._mouseEnterDirection$;
25350 Object.defineProperty(SequenceDOMInteraction.prototype, "mouseLeaveDirection$", {
25352 return this._mouseLeaveDirection$;
25357 return SequenceDOMInteraction;
25359 exports.SequenceDOMInteraction = SequenceDOMInteraction;
25360 Object.defineProperty(exports, "__esModule", { value: true });
25361 exports.default = SequenceDOMInteraction;
25363 },{"rxjs/Subject":33}],275:[function(require,module,exports){
25364 /// <reference path="../../../typings/index.d.ts" />
25366 var vd = require("virtual-dom");
25367 var Edge_1 = require("../../Edge");
25368 var SequenceDOMRenderer = (function () {
25369 function SequenceDOMRenderer(element) {
25370 this._minThresholdWidth = 320;
25371 this._maxThresholdWidth = 1480;
25372 this._minThresholdHeight = 240;
25373 this._maxThresholdHeight = 820;
25375 SequenceDOMRenderer.prototype.render = function (edgeStatus, configuration, containerWidth, component, interaction, navigator) {
25376 if (configuration.visible === false) {
25377 return vd.h("div.SequenceContainer", {}, []);
25379 var nextKey = null;
25380 var prevKey = null;
25381 for (var _i = 0, _a = edgeStatus.edges; _i < _a.length; _i++) {
25383 if (edge.data.direction === Edge_1.EdgeDirection.Next) {
25386 if (edge.data.direction === Edge_1.EdgeDirection.Prev) {
25390 var playingButton = this._createPlayingButton(nextKey, prevKey, configuration, component);
25391 var arrows = this._createSequenceArrows(nextKey, prevKey, configuration, interaction, navigator);
25392 var containerProperties = {
25393 oncontextmenu: function (event) { event.preventDefault(); },
25394 style: { height: (0.27 * containerWidth) + "px", width: containerWidth + "px" },
25396 return vd.h("div.SequenceContainer", containerProperties, arrows.concat([playingButton]));
25398 SequenceDOMRenderer.prototype.getContainerWidth = function (element, configuration) {
25399 var elementWidth = element.offsetWidth;
25400 var elementHeight = element.offsetHeight;
25401 var minWidth = configuration.minWidth;
25402 var maxWidth = configuration.maxWidth;
25403 if (maxWidth < minWidth) {
25404 maxWidth = minWidth;
25406 var relativeWidth = (elementWidth - this._minThresholdWidth) / (this._maxThresholdWidth - this._minThresholdWidth);
25407 var relativeHeight = (elementHeight - this._minThresholdHeight) / (this._maxThresholdHeight - this._minThresholdHeight);
25408 var coeff = Math.max(0, Math.min(1, Math.min(relativeWidth, relativeHeight)));
25409 return minWidth + coeff * (maxWidth - minWidth);
25411 SequenceDOMRenderer.prototype._createPlayingButton = function (nextKey, prevKey, configuration, component) {
25412 var canPlay = configuration.direction === Edge_1.EdgeDirection.Next && nextKey != null ||
25413 configuration.direction === Edge_1.EdgeDirection.Prev && prevKey != null;
25414 var onclick = configuration.playing ?
25415 function (e) { component.stop(); } :
25416 canPlay ? function (e) { component.play(); } : null;
25417 var buttonProperties = {
25421 var iconClass = configuration.playing ?
25423 canPlay ? "Play" : "PlayDisabled";
25424 var icon = vd.h("div.SequenceComponentIcon", { className: iconClass }, []);
25425 var buttonClass = canPlay ? "SequencePlay" : "SequencePlayDisabled";
25426 return vd.h("div." + buttonClass, buttonProperties, [icon]);
25428 SequenceDOMRenderer.prototype._createSequenceArrows = function (nextKey, prevKey, configuration, interaction, navigator) {
25429 var nextProperties = {
25430 onclick: nextKey != null ?
25432 navigator.moveDir$(Edge_1.EdgeDirection.Next)
25433 .subscribe(function (node) { return; }, function (error) { console.error(error); });
25436 onmouseenter: function (e) { interaction.mouseEnterDirection$.next(Edge_1.EdgeDirection.Next); },
25437 onmouseleave: function (e) { interaction.mouseLeaveDirection$.next(Edge_1.EdgeDirection.Next); },
25440 var prevProperties = {
25441 onclick: prevKey != null ?
25443 navigator.moveDir$(Edge_1.EdgeDirection.Prev)
25444 .subscribe(function (node) { return; }, function (error) { console.error(error); });
25447 onmouseenter: function (e) { interaction.mouseEnterDirection$.next(Edge_1.EdgeDirection.Prev); },
25448 onmouseleave: function (e) { interaction.mouseLeaveDirection$.next(Edge_1.EdgeDirection.Prev); },
25451 var nextClass = this._getStepClassName(Edge_1.EdgeDirection.Next, nextKey, configuration.highlightKey);
25452 var prevClass = this._getStepClassName(Edge_1.EdgeDirection.Prev, prevKey, configuration.highlightKey);
25453 var nextIcon = vd.h("div.SequenceComponentIcon", []);
25454 var prevIcon = vd.h("div.SequenceComponentIcon", []);
25456 vd.h("div." + nextClass, nextProperties, [nextIcon]),
25457 vd.h("div." + prevClass, prevProperties, [prevIcon]),
25460 SequenceDOMRenderer.prototype._getStepClassName = function (direction, key, highlightKey) {
25461 var className = direction === Edge_1.EdgeDirection.Next ?
25462 "SequenceStepNext" :
25463 "SequenceStepPrev";
25465 className += "Disabled";
25468 if (highlightKey === key) {
25469 className += "Highlight";
25474 return SequenceDOMRenderer;
25476 exports.SequenceDOMRenderer = SequenceDOMRenderer;
25477 Object.defineProperty(exports, "__esModule", { value: true });
25478 exports.default = SequenceDOMRenderer;
25480 },{"../../Edge":225,"virtual-dom":180}],276:[function(require,module,exports){
25482 var GeometryTagError_1 = require("./error/GeometryTagError");
25483 exports.GeometryTagError = GeometryTagError_1.GeometryTagError;
25484 var PointGeometry_1 = require("./geometry/PointGeometry");
25485 exports.PointGeometry = PointGeometry_1.PointGeometry;
25486 var RectGeometry_1 = require("./geometry/RectGeometry");
25487 exports.RectGeometry = RectGeometry_1.RectGeometry;
25488 var PolygonGeometry_1 = require("./geometry/PolygonGeometry");
25489 exports.PolygonGeometry = PolygonGeometry_1.PolygonGeometry;
25490 var OutlineTag_1 = require("./tag/OutlineTag");
25491 exports.OutlineTag = OutlineTag_1.OutlineTag;
25492 var SpotTag_1 = require("./tag/SpotTag");
25493 exports.SpotTag = SpotTag_1.SpotTag;
25494 var Alignment_1 = require("./tag/Alignment");
25495 exports.Alignment = Alignment_1.Alignment;
25496 var TagComponent_1 = require("./TagComponent");
25497 exports.TagComponent = TagComponent_1.TagComponent;
25499 },{"./TagComponent":277,"./error/GeometryTagError":283,"./geometry/PointGeometry":285,"./geometry/PolygonGeometry":286,"./geometry/RectGeometry":287,"./tag/Alignment":289,"./tag/OutlineTag":292,"./tag/SpotTag":295}],277:[function(require,module,exports){
25500 /// <reference path="../../../typings/index.d.ts" />
25502 var __extends = (this && this.__extends) || function (d, b) {
25503 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
25504 function __() { this.constructor = d; }
25505 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
25507 var Observable_1 = require("rxjs/Observable");
25508 var Subject_1 = require("rxjs/Subject");
25509 require("rxjs/add/observable/combineLatest");
25510 require("rxjs/add/observable/empty");
25511 require("rxjs/add/observable/from");
25512 require("rxjs/add/observable/merge");
25513 require("rxjs/add/observable/of");
25514 require("rxjs/add/operator/combineLatest");
25515 require("rxjs/add/operator/concat");
25516 require("rxjs/add/operator/distinctUntilChanged");
25517 require("rxjs/add/operator/do");
25518 require("rxjs/add/operator/filter");
25519 require("rxjs/add/operator/map");
25520 require("rxjs/add/operator/merge");
25521 require("rxjs/add/operator/mergeMap");
25522 require("rxjs/add/operator/publishReplay");
25523 require("rxjs/add/operator/scan");
25524 require("rxjs/add/operator/share");
25525 require("rxjs/add/operator/skip");
25526 require("rxjs/add/operator/skipUntil");
25527 require("rxjs/add/operator/startWith");
25528 require("rxjs/add/operator/switchMap");
25529 require("rxjs/add/operator/take");
25530 require("rxjs/add/operator/takeUntil");
25531 require("rxjs/add/operator/withLatestFrom");
25532 var Component_1 = require("../../Component");
25533 var Geo_1 = require("../../Geo");
25534 var Render_1 = require("../../Render");
25536 * @class TagComponent
25537 * @classdesc Component for showing and editing 2D tags with different geometries.
25539 var TagComponent = (function (_super) {
25540 __extends(TagComponent, _super);
25541 function TagComponent(name, container, navigator) {
25542 var _this = _super.call(this, name, container, navigator) || this;
25543 _this._tagDomRenderer = new Component_1.TagDOMRenderer();
25544 _this._tagSet = new Component_1.TagSet();
25545 _this._tagCreator = new Component_1.TagCreator();
25546 _this._viewportCoords = new Geo_1.ViewportCoords();
25547 _this._tagGlRendererOperation$ = new Subject_1.Subject();
25548 _this._tagGlRenderer$ = _this._tagGlRendererOperation$
25549 .startWith(function (renderer) {
25552 .scan(function (renderer, operation) {
25553 return operation(renderer);
25554 }, new Component_1.TagGLRenderer());
25555 _this._tags$ = _this._tagSet.tagData$
25556 .map(function (tagData) {
25558 // ensure that tags are always rendered in the same order
25559 // to avoid hover tracking problems on first resize.
25560 for (var _i = 0, _a = Object.keys(tagData).sort(); _i < _a.length; _i++) {
25562 tags.push(tagData[key]);
25567 _this._renderTags$ = _this.tags$
25568 .withLatestFrom(_this._navigator.stateService.currentTransform$)
25569 .map(function (args) {
25570 var tags = args[0];
25571 var transform = args[1];
25572 var renderTags = tags
25573 .map(function (tag) {
25574 if (tag instanceof Component_1.OutlineTag) {
25575 return new Component_1.OutlineRenderTag(tag, transform);
25577 else if (tag instanceof Component_1.SpotTag) {
25578 return new Component_1.SpotRenderTag(tag, transform);
25580 throw new Error("Tag type not supported");
25585 _this._tagChanged$ = _this._tags$
25586 .switchMap(function (tags) {
25587 return Observable_1.Observable
25589 .mergeMap(function (tag) {
25590 return Observable_1.Observable
25591 .merge(tag.changed$, tag.geometryChanged$);
25595 _this._renderTagGLChanged$ = _this._renderTags$
25596 .switchMap(function (tags) {
25597 return Observable_1.Observable
25599 .mergeMap(function (tag) {
25600 return tag.glObjectsChanged$;
25604 _this._tagInterationInitiated$ = _this._renderTags$
25605 .switchMap(function (tags) {
25606 return Observable_1.Observable
25608 .mergeMap(function (tag) {
25609 return tag.interact$
25610 .map(function (interaction) {
25611 return interaction.tag.id;
25616 _this._tagInteractionAbort$ = Observable_1.Observable
25617 .merge(_this._container.mouseService.documentMouseUp$)
25618 .map(function (e) { })
25620 _this._activeTag$ = _this._renderTags$
25621 .switchMap(function (tags) {
25622 return Observable_1.Observable
25624 .mergeMap(function (tag) {
25625 return tag.interact$;
25628 .merge(_this._tagInteractionAbort$
25630 return { offsetX: 0, offsetY: 0, operation: Component_1.TagOperation.None, tag: null };
25633 _this._createGeometryChanged$ = _this._tagCreator.tag$
25634 .switchMap(function (tag) {
25635 return tag != null ?
25636 tag.geometryChanged$ :
25637 Observable_1.Observable.empty();
25640 _this._tagCreated$ = _this._tagCreator.tag$
25641 .switchMap(function (tag) {
25642 return tag != null ?
25644 Observable_1.Observable.empty();
25647 _this._vertexGeometryCreated$ = _this._tagCreated$
25648 .map(function (tag) {
25649 return tag.geometry;
25652 _this._pointGeometryCreated$ = new Subject_1.Subject();
25653 _this._geometryCreated$ = Observable_1.Observable
25654 .merge(_this._vertexGeometryCreated$, _this._pointGeometryCreated$)
25656 _this._basicClick$ = _this._container.mouseService.staticClick$
25657 .withLatestFrom(_this._container.renderService.renderCamera$, _this._navigator.stateService.currentTransform$, function (event, renderCamera, transform) {
25658 return [event, renderCamera, transform];
25660 .map(function (ert) {
25661 var event = ert[0];
25662 var camera = ert[1];
25663 var transform = ert[2];
25664 var basic = _this._mouseEventToBasic(event, _this._container.element, camera, transform);
25668 _this._validBasicClick$ = _this._basicClick$
25669 .filter(function (basic) {
25672 return 0 <= x && x <= 1 && 0 <= y && y <= 1;
25675 _this._creatingConfiguration$ = _this._configuration$
25676 .distinctUntilChanged(function (c1, c2) {
25677 return c1.creating === c2.creating && c1.createType === c2.createType;
25678 }, function (configuration) {
25680 createColor: configuration.createColor,
25681 createType: configuration.createType,
25682 creating: configuration.creating,
25687 _this._creating$ = _this._creatingConfiguration$
25688 .map(function (configuration) {
25689 return configuration.creating;
25694 .subscribe(function (creating) {
25695 _this.fire(TagComponent.creatingchanged, creating);
25699 Object.defineProperty(TagComponent.prototype, "tags$", {
25701 * Get tags observable.
25703 * @description An observable emitting every time the items in the
25704 * tag array changes.
25706 * @returns {Observable<Tag[]>}
25709 return this._tags$;
25714 Object.defineProperty(TagComponent.prototype, "geometryCreated$", {
25716 * Get geometry created observable.
25718 * @description An observable emitting every time a geometry
25719 * has been created.
25721 * @returns {Observable<Geometry>}
25724 return this._geometryCreated$;
25730 * Set the tags to display.
25732 * @param {Tag[]} tags - The tags.
25734 TagComponent.prototype.setTags = function (tags) {
25735 this._tagSet.set$.next(tags);
25738 * Configure the component to enter create mode for
25739 * creating a geometry of a certain type.
25741 * @description Supported geometry types are: rect
25743 * @param {string} geometryType - String specifying the geometry type.
25745 TagComponent.prototype.startCreate = function (geometryType) {
25746 this.configure({ createType: geometryType, creating: true });
25749 * Configure the component to leave create mode.
25751 * @description A non completed geometry will be removed.
25753 TagComponent.prototype.stopCreate = function () {
25754 this.configure({ createType: null, creating: false });
25756 TagComponent.prototype._activate = function () {
25758 this._preventDefaultSubscription = Observable_1.Observable.merge(this._container.mouseService.documentCanvasMouseDown$, this._container.mouseService.documentCanvasMouseMove$)
25759 .subscribe(function (event) {
25760 event.preventDefault(); // prevent selection of content outside the viewer
25762 this._geometryCreatedEventSubscription = this._geometryCreated$
25763 .subscribe(function (geometry) {
25764 _this.fire(TagComponent.geometrycreated, geometry);
25766 this._tagsChangedEventSubscription = this._tags$
25767 .subscribe(function (tags) {
25768 _this.fire(TagComponent.tagschanged, tags);
25770 var nodeChanged$ = this.configuration$
25771 .switchMap(function (configuration) {
25772 return configuration.creating ?
25773 _this._navigator.stateService.currentNode$
25776 .map(function (n) { return null; }) :
25777 Observable_1.Observable.empty();
25779 var tagAborted$ = this._tagCreator.tag$
25780 .switchMap(function (tag) {
25781 return tag != null ?
25783 .map(function (t) { return null; }) :
25784 Observable_1.Observable.empty();
25786 var tagCreated$ = this._tagCreated$
25787 .map(function (t) { return null; });
25788 var pointGeometryCreated$ = this._pointGeometryCreated$
25789 .map(function (p) { return null; });
25790 this._stopCreateSubscription = Observable_1.Observable
25791 .merge(nodeChanged$, tagAborted$, tagCreated$, pointGeometryCreated$)
25792 .subscribe(function () { _this.stopCreate(); });
25793 this._creatorConfigurationSubscription = this._configuration$
25794 .subscribe(this._tagCreator.configuration$);
25795 this._createSubscription = this._creatingConfiguration$
25796 .switchMap(function (configuration) {
25797 return configuration.creating &&
25798 configuration.createType === "rect" ||
25799 configuration.createType === "polygon" ?
25800 _this._validBasicClick$.take(1) :
25801 Observable_1.Observable.empty();
25803 .subscribe(this._tagCreator.create$);
25804 this._createPointSubscription = this._creatingConfiguration$
25805 .switchMap(function (configuration) {
25806 return configuration.creating &&
25807 configuration.createType === "point" ?
25808 _this._validBasicClick$.take(1) :
25809 Observable_1.Observable.empty();
25811 .map(function (basic) {
25812 return new Component_1.PointGeometry(basic);
25814 .subscribe(this._pointGeometryCreated$);
25815 this._setCreateVertexSubscription = Observable_1.Observable
25816 .combineLatest(this._container.mouseService.documentCanvasMouseMove$, this._tagCreator.tag$, this._container.renderService.renderCamera$)
25817 .filter(function (etr) {
25818 return etr[1] != null;
25820 .withLatestFrom(this._navigator.stateService.currentTransform$, function (etr, transform) {
25821 return [etr[0], etr[1], etr[2], transform];
25823 .subscribe(function (etrt) {
25824 var event = etrt[0];
25826 var camera = etrt[2];
25827 var transform = etrt[3];
25828 var basic = _this._mouseEventToBasic(event, _this._container.element, camera, transform);
25829 if (tag.geometry instanceof Component_1.RectGeometry) {
25830 tag.geometry.setVertex2d(3, basic, transform);
25832 else if (tag.geometry instanceof Component_1.PolygonGeometry) {
25833 tag.geometry.setVertex2d(tag.geometry.polygon.length - 2, basic, transform);
25836 this._addPointSubscription = this._creatingConfiguration$
25837 .switchMap(function (configuration) {
25838 var createType = configuration.createType;
25839 return configuration.creating &&
25840 (createType === "rect" || createType === "polygon") ?
25841 _this._basicClick$.skipUntil(_this._validBasicClick$).skip(1) :
25842 Observable_1.Observable.empty();
25844 .withLatestFrom(this._tagCreator.tag$, function (basic, tag) {
25845 return [basic, tag];
25847 .subscribe(function (bt) {
25850 tag.addPoint(basic);
25852 this._containerClassListSubscription = this._creating$
25853 .subscribe(function (creating) {
25855 _this._container.element.classList.add("component-tag-create");
25858 _this._container.element.classList.remove("component-tag-create");
25861 this._deleteCreatedSubscription = this._creating$
25862 .subscribe(function (creating) {
25863 _this._tagCreator.delete$.next(null);
25865 this._setGLCreateTagSubscription = Observable_1.Observable
25866 .merge(this._tagCreator.tag$, this._createGeometryChanged$)
25867 .withLatestFrom(this._navigator.stateService.currentTransform$, function (tag, transform) {
25868 return [tag, transform];
25870 .map(function (tt) {
25871 return function (renderer) {
25873 var transform = tt[1];
25875 renderer.removeCreateTag();
25878 renderer.setCreateTag(tag, transform);
25883 .subscribe(this._tagGlRendererOperation$);
25884 this._claimMouseSubscription = this._tagInterationInitiated$
25885 .switchMap(function (id) {
25886 return _this._container.mouseService.documentCanvasMouseMove$
25887 .takeUntil(_this._tagInteractionAbort$)
25890 .subscribe(function (e) {
25891 _this._container.mouseService.claimMouse(_this._name, 1);
25893 this._mouseDragSubscription = this._activeTag$
25894 .withLatestFrom(this._container.mouseService.documentCanvasMouseMove$, function (a, e) {
25897 .switchMap(function (args) {
25898 var activeTag = args[0];
25899 var mouseMove = args[1];
25900 if (activeTag.operation === Component_1.TagOperation.None) {
25901 return Observable_1.Observable.empty();
25903 var mouseDrag$ = Observable_1.Observable
25905 .concat(_this._container.mouseService.filtered$(_this._name, _this._container.mouseService.documentCanvasMouseDrag$));
25906 return Observable_1.Observable
25907 .combineLatest(mouseDrag$, _this._container.renderService.renderCamera$)
25908 .withLatestFrom(Observable_1.Observable.of(activeTag), _this._navigator.stateService.currentTransform$, function (ec, a, t) {
25909 return [ec[0], ec[1], a, t];
25912 .subscribe(function (args) {
25913 var mouseEvent = args[0];
25914 var renderCamera = args[1];
25915 var activeTag = args[2];
25916 var transform = args[3];
25917 if (activeTag.operation === Component_1.TagOperation.None) {
25920 var basic = _this._mouseEventToBasic(mouseEvent, _this._container.element, renderCamera, transform, activeTag.offsetX, activeTag.offsetY);
25921 if (activeTag.operation === Component_1.TagOperation.Centroid) {
25922 activeTag.tag.geometry.setCentroid2d(basic, transform);
25924 else if (activeTag.operation === Component_1.TagOperation.Vertex) {
25925 var vertexGeometry = activeTag.tag.geometry;
25926 vertexGeometry.setVertex2d(activeTag.vertexIndex, basic, transform);
25929 this._unclaimMouseSubscription = this._container.mouseService
25930 .filtered$(this._name, this._container.mouseService.documentCanvasMouseDragEnd$)
25931 .subscribe(function (e) {
25932 _this._container.mouseService.unclaimMouse(_this._name);
25934 this._setTagsSubscription = this._renderTags$
25935 .map(function (tags) {
25936 return function (renderer) {
25937 renderer.setTags(tags);
25941 .subscribe(this._tagGlRendererOperation$);
25942 this._updateGLTagSubscription = this._renderTagGLChanged$
25943 .map(function (tag) {
25944 return function (renderer) {
25945 renderer.updateTag(tag);
25949 .subscribe(this._tagGlRendererOperation$);
25950 this._setNeedsRenderSubscription = this._tagChanged$
25951 .map(function (tag) {
25952 return function (renderer) {
25953 renderer.setNeedsRender();
25957 .subscribe(this._tagGlRendererOperation$);
25958 this._domSubscription = this._renderTags$
25960 .do(function (tags) {
25961 _this._container.domRenderer.render$.next({
25963 vnode: _this._tagDomRenderer.clear(),
25966 .combineLatest(this._container.renderService.renderCamera$, this._container.spriteService.spriteAtlas$, this._tagChanged$.startWith(null), this._tagCreator.tag$.merge(this._createGeometryChanged$).startWith(null), function (renderTags, rc, atlas, tag, ct) {
25967 return [rc, atlas, renderTags, tag, ct];
25969 .withLatestFrom(this._navigator.stateService.currentTransform$, function (args, transform) {
25970 return [args[0], args[1], args[2], args[3], args[4], transform];
25972 .map(function (args) {
25975 vnode: _this._tagDomRenderer.render(args[2], args[4], args[1], args[0].perspective, args[5]),
25978 .subscribe(this._container.domRenderer.render$);
25979 this._glSubscription = this._navigator.stateService.currentState$
25980 .withLatestFrom(this._tagGlRenderer$, function (frame, renderer) {
25981 return [frame, renderer];
25983 .map(function (fr) {
25985 var renderer = fr[1];
25990 needsRender: renderer.needsRender,
25991 render: renderer.render.bind(renderer),
25992 stage: Render_1.GLRenderStage.Foreground,
25996 .subscribe(this._container.glRenderer.render$);
25998 TagComponent.prototype._deactivate = function () {
25999 this._tagGlRendererOperation$
26000 .next(function (renderer) {
26001 renderer.dispose();
26004 this._tagSet.set$.next([]);
26005 this._tagCreator.delete$.next(null);
26006 this._claimMouseSubscription.unsubscribe();
26007 this._mouseDragSubscription.unsubscribe();
26008 this._unclaimMouseSubscription.unsubscribe();
26009 this._setTagsSubscription.unsubscribe();
26010 this._updateGLTagSubscription.unsubscribe();
26011 this._setNeedsRenderSubscription.unsubscribe();
26012 this._stopCreateSubscription.unsubscribe();
26013 this._creatorConfigurationSubscription.unsubscribe();
26014 this._createSubscription.unsubscribe();
26015 this._createPointSubscription.unsubscribe();
26016 this._setCreateVertexSubscription.unsubscribe();
26017 this._addPointSubscription.unsubscribe();
26018 this._deleteCreatedSubscription.unsubscribe();
26019 this._setGLCreateTagSubscription.unsubscribe();
26020 this._preventDefaultSubscription.unsubscribe();
26021 this._containerClassListSubscription.unsubscribe();
26022 this._domSubscription.unsubscribe();
26023 this._glSubscription.unsubscribe();
26024 this._geometryCreatedEventSubscription.unsubscribe();
26025 this._tagsChangedEventSubscription.unsubscribe();
26027 TagComponent.prototype._getDefaultConfiguration = function () {
26029 createColor: 0xFFFFFF,
26033 TagComponent.prototype._mouseEventToBasic = function (event, element, camera, transform, offsetX, offsetY) {
26034 offsetX = offsetX != null ? offsetX : 0;
26035 offsetY = offsetY != null ? offsetY : 0;
26036 var _a = this._viewportCoords.canvasPosition(event, element), canvasX = _a[0], canvasY = _a[1];
26037 var basic = this._viewportCoords.canvasToBasic(canvasX - offsetX, canvasY - offsetY, element, transform, camera.perspective);
26040 return TagComponent;
26041 }(Component_1.Component));
26043 TagComponent.componentName = "tag";
26045 * Event fired when creation starts and stops.
26047 * @event TagComponent#creatingchanged
26048 * @type {boolean} Indicates whether the component is creating a tag.
26050 TagComponent.creatingchanged = "creatingchanged";
26052 * Event fired when a geometry has been created.
26054 * @event TagComponent#geometrycreated
26055 * @type {Geometry} Created geometry.
26057 TagComponent.geometrycreated = "geometrycreated";
26059 * Event fired when the tags collection has changed.
26061 * @event TagComponent#tagschanged
26062 * @type {Array<Tag>} Current array of tags.
26064 TagComponent.tagschanged = "tagschanged";
26065 exports.TagComponent = TagComponent;
26066 Component_1.ComponentService.register(TagComponent);
26067 Object.defineProperty(exports, "__esModule", { value: true });
26068 exports.default = TagComponent;
26070 },{"../../Component":224,"../../Geo":227,"../../Render":230,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/empty":39,"rxjs/add/observable/from":40,"rxjs/add/observable/merge":43,"rxjs/add/observable/of":44,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/concat":53,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/skip":74,"rxjs/add/operator/skipUntil":75,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/take":79,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],278:[function(require,module,exports){
26072 var Subject_1 = require("rxjs/Subject");
26073 require("rxjs/add/operator/map");
26074 require("rxjs/add/operator/scan");
26075 require("rxjs/add/operator/share");
26076 require("rxjs/add/operator/withLatestFrom");
26077 var Component_1 = require("../../Component");
26078 var TagCreator = (function () {
26079 function TagCreator() {
26080 this._tagOperation$ = new Subject_1.Subject();
26081 this._create$ = new Subject_1.Subject();
26082 this._delete$ = new Subject_1.Subject();
26083 this._configuration$ = new Subject_1.Subject();
26084 this._tag$ = this._tagOperation$
26085 .scan(function (tag, operation) {
26086 return operation(tag);
26090 .withLatestFrom(this._configuration$, function (coordinate, type) {
26091 return [coordinate, type];
26093 .map(function (ct) {
26094 return function (tag) {
26095 var coordinate = ct[0];
26096 var configuration = ct[1];
26097 if (configuration.createType === "rect") {
26098 var geometry = new Component_1.RectGeometry([
26104 return new Component_1.OutlineCreateTag(geometry, { color: configuration.createColor });
26106 else if (configuration.createType === "polygon") {
26107 var geometry = new Component_1.PolygonGeometry([
26108 [coordinate[0], coordinate[1]],
26109 [coordinate[0], coordinate[1]],
26110 [coordinate[0], coordinate[1]],
26112 return new Component_1.OutlineCreateTag(geometry, { color: configuration.createColor });
26117 .subscribe(this._tagOperation$);
26120 return function (tag) {
26124 .subscribe(this._tagOperation$);
26126 Object.defineProperty(TagCreator.prototype, "create$", {
26128 return this._create$;
26133 Object.defineProperty(TagCreator.prototype, "delete$", {
26135 return this._delete$;
26140 Object.defineProperty(TagCreator.prototype, "configuration$", {
26142 return this._configuration$;
26147 Object.defineProperty(TagCreator.prototype, "tag$", {
26156 exports.TagCreator = TagCreator;
26157 Object.defineProperty(exports, "__esModule", { value: true });
26158 exports.default = TagCreator;
26160 },{"../../Component":224,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/withLatestFrom":82}],279:[function(require,module,exports){
26161 /// <reference path="../../../typings/index.d.ts" />
26163 var THREE = require("three");
26164 var vd = require("virtual-dom");
26165 var TagDOMRenderer = (function () {
26166 function TagDOMRenderer() {
26168 TagDOMRenderer.prototype.render = function (tags, createTag, atlas, camera, transform) {
26169 var matrixWorldInverse = new THREE.Matrix4().getInverse(camera.matrixWorld);
26170 var projectionMatrix = camera.projectionMatrix;
26172 for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) {
26173 var tag = tags_1[_i];
26174 vNodes = vNodes.concat(tag.getDOMObjects(atlas, matrixWorldInverse, projectionMatrix));
26176 if (createTag != null) {
26177 vNodes = vNodes.concat(createTag.getDOMObjects(transform, matrixWorldInverse, projectionMatrix));
26179 return vd.h("div.TagContainer", {}, vNodes);
26181 TagDOMRenderer.prototype.clear = function () {
26182 return vd.h("div", {}, []);
26184 return TagDOMRenderer;
26186 exports.TagDOMRenderer = TagDOMRenderer;
26188 },{"three":174,"virtual-dom":180}],280:[function(require,module,exports){
26189 /// <reference path="../../../typings/index.d.ts" />
26191 var THREE = require("three");
26192 var TagGLRenderer = (function () {
26193 function TagGLRenderer() {
26194 this._scene = new THREE.Scene();
26196 this._createTag = null;
26197 this._needsRender = false;
26199 Object.defineProperty(TagGLRenderer.prototype, "needsRender", {
26201 return this._needsRender;
26206 TagGLRenderer.prototype.render = function (perspectiveCamera, renderer) {
26207 renderer.render(this._scene, perspectiveCamera);
26208 this._needsRender = false;
26210 TagGLRenderer.prototype.setCreateTag = function (tag, transform) {
26211 this._disposeCreateTag();
26212 this._addCreateTag(tag, transform);
26213 this._needsRender = true;
26215 TagGLRenderer.prototype.removeCreateTag = function () {
26216 this._disposeCreateTag();
26217 this._needsRender = true;
26219 TagGLRenderer.prototype.setTags = function (tags) {
26220 this._disposeTags();
26221 for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) {
26222 var tag = tags_1[_i];
26225 this._needsRender = true;
26227 TagGLRenderer.prototype.updateTag = function (tag) {
26228 for (var _i = 0, _a = this._tags[tag.tag.id][1]; _i < _a.length; _i++) {
26229 var object3d = _a[_i];
26230 this._scene.remove(object3d);
26234 TagGLRenderer.prototype.setNeedsRender = function () {
26235 this._needsRender = true;
26237 TagGLRenderer.prototype.dispose = function () {
26238 this._disposeTags();
26239 this._disposeCreateTag();
26240 this._needsRender = false;
26242 TagGLRenderer.prototype._addTag = function (tag) {
26243 var objects = tag.glObjects;
26244 this._tags[tag.tag.id] = [tag, []];
26245 for (var _i = 0, objects_1 = objects; _i < objects_1.length; _i++) {
26246 var object = objects_1[_i];
26247 this._tags[tag.tag.id][1].push(object);
26248 this._scene.add(object);
26251 TagGLRenderer.prototype._addCreateTag = function (tag, transform) {
26252 var object = tag.getGLObject(transform);
26253 this._createTag = object;
26254 this._scene.add(object);
26256 TagGLRenderer.prototype._disposeTags = function () {
26257 for (var _i = 0, _a = Object.keys(this._tags); _i < _a.length; _i++) {
26259 for (var _b = 0, _c = this._tags[id][1]; _b < _c.length; _b++) {
26260 var object = _c[_b];
26261 this._scene.remove(object);
26263 this._tags[id][0].dispose();
26264 delete this._tags[id];
26267 TagGLRenderer.prototype._disposeCreateTag = function () {
26268 if (this._createTag == null) {
26271 var mesh = this._createTag;
26272 this._scene.remove(mesh);
26273 mesh.geometry.dispose();
26274 mesh.material.dispose();
26275 this._createTag = null;
26277 return TagGLRenderer;
26279 exports.TagGLRenderer = TagGLRenderer;
26281 },{"three":174}],281:[function(require,module,exports){
26284 (function (TagOperation) {
26285 TagOperation[TagOperation["None"] = 0] = "None";
26286 TagOperation[TagOperation["Centroid"] = 1] = "Centroid";
26287 TagOperation[TagOperation["Vertex"] = 2] = "Vertex";
26288 })(TagOperation = exports.TagOperation || (exports.TagOperation = {}));
26289 Object.defineProperty(exports, "__esModule", { value: true });
26290 exports.default = TagOperation;
26292 },{}],282:[function(require,module,exports){
26294 var Subject_1 = require("rxjs/Subject");
26295 require("rxjs/add/operator/map");
26296 require("rxjs/add/operator/scan");
26297 require("rxjs/add/operator/share");
26298 var TagSet = (function () {
26299 function TagSet() {
26300 this._tagDataOperation$ = new Subject_1.Subject();
26301 this._set$ = new Subject_1.Subject();
26302 this._tagData$ = this._tagDataOperation$
26303 .scan(function (tagData, operation) {
26304 return operation(tagData);
26308 .map(function (tags) {
26309 return function (tagData) {
26310 for (var _i = 0, _a = Object.keys(tagData); _i < _a.length; _i++) {
26312 delete tagData[key];
26314 for (var _b = 0, tags_1 = tags; _b < tags_1.length; _b++) {
26315 var tag = tags_1[_b];
26316 tagData[tag.id] = tag;
26321 .subscribe(this._tagDataOperation$);
26323 Object.defineProperty(TagSet.prototype, "tagData$", {
26325 return this._tagData$;
26330 Object.defineProperty(TagSet.prototype, "set$", {
26339 exports.TagSet = TagSet;
26340 Object.defineProperty(exports, "__esModule", { value: true });
26341 exports.default = TagSet;
26343 },{"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73}],283:[function(require,module,exports){
26345 var __extends = (this && this.__extends) || function (d, b) {
26346 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
26347 function __() { this.constructor = d; }
26348 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
26350 var Error_1 = require("../../../Error");
26351 var GeometryTagError = (function (_super) {
26352 __extends(GeometryTagError, _super);
26353 function GeometryTagError(message) {
26354 var _this = _super.call(this, message != null ? message : "The provided geometry value is incorrect") || this;
26355 _this.name = "GeometryTagError";
26358 return GeometryTagError;
26359 }(Error_1.MapillaryError));
26360 exports.GeometryTagError = GeometryTagError;
26361 Object.defineProperty(exports, "__esModule", { value: true });
26362 exports.default = Error_1.MapillaryError;
26364 },{"../../../Error":226}],284:[function(require,module,exports){
26366 var Subject_1 = require("rxjs/Subject");
26370 * @classdesc Represents a geometry.
26372 var Geometry = (function () {
26374 * Create a geometry.
26378 function Geometry() {
26379 this._notifyChanged$ = new Subject_1.Subject();
26381 Object.defineProperty(Geometry.prototype, "changed$", {
26383 * Get changed observable.
26385 * @description Emits the geometry itself every time the geometry
26388 * @returns {Observable<Geometry>} Observable emitting the geometry instance.
26391 return this._notifyChanged$;
26398 exports.Geometry = Geometry;
26399 Object.defineProperty(exports, "__esModule", { value: true });
26400 exports.default = Geometry;
26402 },{"rxjs/Subject":33}],285:[function(require,module,exports){
26404 var __extends = (this && this.__extends) || function (d, b) {
26405 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
26406 function __() { this.constructor = d; }
26407 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
26409 var Component_1 = require("../../../Component");
26411 * @class PointGeometry
26412 * @classdesc Represents a point geometry in the basic coordinate system.
26414 var PointGeometry = (function (_super) {
26415 __extends(PointGeometry, _super);
26417 * Create a point geometry.
26420 * @param {Array<number>} point - An array representing the basic coordinates of
26423 * @throws {GeometryTagError} Point coordinates must be valid basic coordinates.
26425 function PointGeometry(point) {
26426 var _this = _super.call(this) || this;
26429 if (x < 0 || x > 1 || y < 0 || y > 1) {
26430 throw new Component_1.GeometryTagError("Basic coordinates must be on the interval [0, 1].");
26432 _this._point = point.slice();
26435 Object.defineProperty(PointGeometry.prototype, "point", {
26437 * Get point property.
26438 * @returns {Array<number>} Array representing the basic coordinates of the point.
26441 return this._point;
26447 * Get the 3D world coordinates for the centroid of the point, i.e. the 3D
26448 * world coordinates of the point itself.
26450 * @param {Transform} transform - The transform of the node related to the point.
26451 * @returns {Array<number>} 3D world coordinates representing the centroid.
26453 PointGeometry.prototype.getCentroid3d = function (transform) {
26454 return transform.unprojectBasic(this._point, 200);
26457 * Set the centroid of the point, i.e. the point coordinates.
26459 * @param {Array<number>} value - The new value of the centroid.
26460 * @param {Transform} transform - The transform of the node related to the point.
26462 PointGeometry.prototype.setCentroid2d = function (value, transform) {
26464 Math.max(0, Math.min(1, value[0])),
26465 Math.max(0, Math.min(1, value[1])),
26467 this._point[0] = changed[0];
26468 this._point[1] = changed[1];
26469 this._notifyChanged$.next(this);
26471 return PointGeometry;
26472 }(Component_1.Geometry));
26473 exports.PointGeometry = PointGeometry;
26475 },{"../../../Component":224}],286:[function(require,module,exports){
26477 var __extends = (this && this.__extends) || function (d, b) {
26478 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
26479 function __() { this.constructor = d; }
26480 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
26482 var Component_1 = require("../../../Component");
26484 * @class PolygonGeometry
26485 * @classdesc Represents a polygon geometry in the basic coordinate system.
26487 var PolygonGeometry = (function (_super) {
26488 __extends(PolygonGeometry, _super);
26490 * Create a polygon geometry.
26493 * @param {Array<Array<number>>} polygon - Array of polygon vertices. Must be closed.
26494 * @param {Array<Array<Array<number>>>} [holes] - Array of arrays of hole vertices.
26495 * Each array of holes vertices must be closed.
26497 * @throws {GeometryTagError} Polygon coordinates must be valid basic coordinates.
26499 function PolygonGeometry(polygon, holes) {
26500 var _this = _super.call(this) || this;
26501 var polygonLength = polygon.length;
26502 if (polygonLength < 3) {
26503 throw new Component_1.GeometryTagError("A polygon must have three or more positions.");
26505 if (polygon[0][0] !== polygon[polygonLength - 1][0] ||
26506 polygon[0][1] !== polygon[polygonLength - 1][1]) {
26507 throw new Component_1.GeometryTagError("First and last positions must be equivalent.");
26509 _this._polygon = [];
26510 for (var _i = 0, polygon_1 = polygon; _i < polygon_1.length; _i++) {
26511 var vertex = polygon_1[_i];
26512 if (vertex[0] < 0 || vertex[0] > 1 ||
26513 vertex[1] < 0 || vertex[1] > 1) {
26514 throw new Component_1.GeometryTagError("Basic coordinates of polygon must be on the interval [0, 1].");
26516 _this._polygon.push(vertex.slice());
26519 if (holes == null) {
26522 for (var i = 0; i < holes.length; i++) {
26523 var hole = holes[i];
26524 var holeLength = hole.length;
26525 if (holeLength < 3) {
26526 throw new Component_1.GeometryTagError("A polygon hole must have three or more positions.");
26528 if (hole[0][0] !== hole[holeLength - 1][0] ||
26529 hole[0][1] !== hole[holeLength - 1][1]) {
26530 throw new Component_1.GeometryTagError("First and last positions of hole must be equivalent.");
26532 _this._holes.push([]);
26533 for (var _a = 0, hole_1 = hole; _a < hole_1.length; _a++) {
26534 var vertex = hole_1[_a];
26535 if (vertex[0] < 0 || vertex[0] > 1 ||
26536 vertex[1] < 0 || vertex[1] > 1) {
26537 throw new Component_1.GeometryTagError("Basic coordinates of hole must be on the interval [0, 1].");
26539 _this._holes[i].push(vertex.slice());
26544 Object.defineProperty(PolygonGeometry.prototype, "polygon", {
26546 * Get polygon property.
26547 * @returns {Array<Array<number>>} Closed 2d polygon.
26550 return this._polygon;
26555 Object.defineProperty(PolygonGeometry.prototype, "holes", {
26557 * Get holes property.
26558 * @returns {Array<Array<Array<number>>>} Holes of 2d polygon.
26561 return this._holes;
26567 * Add a vertex to the polygon by appending it after the last vertex.
26569 * @param {Array<number>} vertex - Vertex to add.
26571 PolygonGeometry.prototype.addVertex2d = function (vertex) {
26573 Math.max(0, Math.min(1, vertex[0])),
26574 Math.max(0, Math.min(1, vertex[1])),
26576 this._polygon.splice(this._polygon.length - 1, 0, clamped);
26577 this._notifyChanged$.next(this);
26580 * Remove a vertex from the polygon.
26582 * @param {number} index - The index of the vertex to remove.
26584 PolygonGeometry.prototype.removeVertex2d = function (index) {
26586 index >= this._polygon.length ||
26587 this._polygon.length < 4) {
26588 throw new Component_1.GeometryTagError("Index for removed vertex must be valid.");
26590 if (index > 0 && index < this._polygon.length - 1) {
26591 this._polygon.splice(index, 1);
26594 this._polygon.splice(0, 1);
26595 this._polygon.pop();
26596 var closing = this._polygon[0].slice();
26597 this._polygon.push(closing);
26599 this._notifyChanged$.next(this);
26602 PolygonGeometry.prototype.setVertex2d = function (index, value, transform) {
26604 Math.max(0, Math.min(1, value[0])),
26605 Math.max(0, Math.min(1, value[1])),
26607 if (index === 0 || index === this._polygon.length - 1) {
26608 this._polygon[0] = changed.slice();
26609 this._polygon[this._polygon.length - 1] = changed.slice();
26612 this._polygon[index] = changed.slice();
26614 this._notifyChanged$.next(this);
26617 PolygonGeometry.prototype.setCentroid2d = function (value, transform) {
26618 var xs = this._polygon.map(function (point) { return point[0]; });
26619 var ys = this._polygon.map(function (point) { return point[1]; });
26620 var minX = Math.min.apply(Math, xs);
26621 var maxX = Math.max.apply(Math, xs);
26622 var minY = Math.min.apply(Math, ys);
26623 var maxY = Math.max.apply(Math, ys);
26624 var centroid = this._getCentroid2d();
26625 var minTranslationX = -minX;
26626 var maxTranslationX = 1 - maxX;
26627 var minTranslationY = -minY;
26628 var maxTranslationY = 1 - maxY;
26629 var translationX = Math.max(minTranslationX, Math.min(maxTranslationX, value[0] - centroid[0]));
26630 var translationY = Math.max(minTranslationY, Math.min(maxTranslationY, value[1] - centroid[1]));
26631 for (var _i = 0, _a = this._polygon; _i < _a.length; _i++) {
26632 var point = _a[_i];
26633 point[0] += translationX;
26634 point[1] += translationY;
26636 this._notifyChanged$.next(this);
26639 PolygonGeometry.prototype.getPoints3d = function (transform) {
26640 return this.getVertices3d(transform);
26643 PolygonGeometry.prototype.getVertex3d = function (index, transform) {
26644 return transform.unprojectBasic(this._polygon[index], 200);
26647 PolygonGeometry.prototype.getVertices3d = function (transform) {
26648 return this._polygon
26649 .map(function (point) {
26650 return transform.unprojectBasic(point, 200);
26654 * Get a polygon representation of the 3D coordinates for the vertices of each hole
26657 * @param {Transform} transform - The transform of the node related to the geometry.
26658 * @returns {Array<Array<Array<number>>>} Array of hole polygons in 3D world coordinates
26659 * representing the vertices of each hole of the geometry.
26661 PolygonGeometry.prototype.getHoleVertices3d = function (transform) {
26663 for (var _i = 0, _a = this._holes; _i < _a.length; _i++) {
26666 .map(function (point) {
26667 return transform.unprojectBasic(point, 200);
26669 holes3d.push(hole3d);
26674 PolygonGeometry.prototype.getCentroid3d = function (transform) {
26675 var centroid2d = this._getCentroid2d();
26676 return transform.unprojectBasic(centroid2d, 200);
26679 PolygonGeometry.prototype.getTriangles3d = function (transform) {
26680 return this._triangulate(this._polygon, this.getPoints3d(transform), this._holes, this.getHoleVertices3d(transform));
26682 PolygonGeometry.prototype._getCentroid2d = function () {
26683 var polygon = this._polygon;
26687 for (var i = 0; i < polygon.length - 1; i++) {
26688 var xi = polygon[i][0];
26689 var yi = polygon[i][1];
26690 var xi1 = polygon[i + 1][0];
26691 var yi1 = polygon[i + 1][1];
26692 var a = xi * yi1 - xi1 * yi;
26694 centroidX += (xi + xi1) * a;
26695 centroidY += (yi + yi1) * a;
26698 centroidX /= 6 * area;
26699 centroidY /= 6 * area;
26700 return [centroidX, centroidY];
26702 return PolygonGeometry;
26703 }(Component_1.VertexGeometry));
26704 exports.PolygonGeometry = PolygonGeometry;
26705 Object.defineProperty(exports, "__esModule", { value: true });
26706 exports.default = PolygonGeometry;
26708 },{"../../../Component":224}],287:[function(require,module,exports){
26710 var __extends = (this && this.__extends) || function (d, b) {
26711 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
26712 function __() { this.constructor = d; }
26713 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
26715 var Component_1 = require("../../../Component");
26717 * @class RectGeometry
26718 * @classdesc Represents a rectangle geometry in the basic coordinate system.
26720 var RectGeometry = (function (_super) {
26721 __extends(RectGeometry, _super);
26723 * Create a rectangle geometry.
26726 * @param {Array<number>} rect - An array representing the top-left and bottom-right
26727 * corners of the rectangle in basic coordinates. Ordered according to [x0, y0, x1, y1].
26729 * @throws {GeometryTagError} Rectangle coordinates must be valid basic coordinates.
26731 function RectGeometry(rect) {
26732 var _this = _super.call(this) || this;
26733 if (rect[1] > rect[3]) {
26734 throw new Component_1.GeometryTagError("Basic Y coordinates values can not be inverted.");
26736 for (var _i = 0, rect_1 = rect; _i < rect_1.length; _i++) {
26737 var coord = rect_1[_i];
26738 if (coord < 0 || coord > 1) {
26739 throw new Component_1.GeometryTagError("Basic coordinates must be on the interval [0, 1].");
26742 _this._rect = rect.slice(0, 4);
26743 if (_this._rect[0] > _this._rect[2]) {
26744 _this._inverted = true;
26748 Object.defineProperty(RectGeometry.prototype, "rect", {
26750 * Get rect property.
26751 * @returns {Array<number>} Array representing the top-left and bottom-right
26752 * corners of the rectangle in basic coordinates.
26761 * Set the value of a vertex in the polygon representation of the rectangle.
26763 * @description The polygon is defined to have the first vertex at the
26764 * bottom-left corner with the rest of the vertices following in clockwise order.
26766 * @param {number} index - The index of the vertex to be set.
26767 * @param {Array<number>} value - The new value of the vertex.
26768 * @param {Transform} transform - The transform of the node related to the rectangle.
26770 RectGeometry.prototype.setVertex2d = function (index, value, transform) {
26771 var original = this._rect.slice();
26773 Math.max(0, Math.min(1, value[0])),
26774 Math.max(0, Math.min(1, value[1])),
26778 rect[0] = changed[0];
26779 rect[1] = original[1];
26780 rect[2] = original[2];
26781 rect[3] = changed[1];
26783 else if (index === 1) {
26784 rect[0] = changed[0];
26785 rect[1] = changed[1];
26786 rect[2] = original[2];
26787 rect[3] = original[3];
26789 else if (index === 2) {
26790 rect[0] = original[0];
26791 rect[1] = changed[1];
26792 rect[2] = changed[0];
26793 rect[3] = original[3];
26795 else if (index === 3) {
26796 rect[0] = original[0];
26797 rect[1] = original[1];
26798 rect[2] = changed[0];
26799 rect[3] = changed[1];
26801 if (transform.gpano) {
26802 var passingBoundaryLeft = index < 2 && changed[0] > 0.75 && original[0] < 0.25 ||
26803 index >= 2 && this._inverted && changed[0] > 0.75 && original[2] < 0.25;
26804 var passingBoundaryRight = index < 2 && this._inverted && changed[0] < 0.25 && original[0] > 0.75 ||
26805 index >= 2 && changed[0] < 0.25 && original[2] > 0.75;
26806 if (passingBoundaryLeft || passingBoundaryRight) {
26807 this._inverted = !this._inverted;
26810 if (rect[0] - original[0] < -0.25) {
26811 rect[0] = original[0];
26813 if (rect[2] - original[2] > 0.25) {
26814 rect[2] = original[2];
26817 if (!this._inverted && rect[0] > rect[2] ||
26818 this._inverted && rect[0] < rect[2]) {
26819 rect[0] = original[0];
26820 rect[2] = original[2];
26824 if (rect[0] > rect[2]) {
26825 rect[0] = original[0];
26826 rect[2] = original[2];
26829 if (rect[1] > rect[3]) {
26830 rect[1] = original[1];
26831 rect[3] = original[3];
26833 this._rect[0] = rect[0];
26834 this._rect[1] = rect[1];
26835 this._rect[2] = rect[2];
26836 this._rect[3] = rect[3];
26837 this._notifyChanged$.next(this);
26840 RectGeometry.prototype.setCentroid2d = function (value, transform) {
26841 var original = this._rect.slice();
26842 var x0 = original[0];
26843 var x1 = this._inverted ? original[2] + 1 : original[2];
26844 var y0 = original[1];
26845 var y1 = original[3];
26846 var centerX = x0 + (x1 - x0) / 2;
26847 var centerY = y0 + (y1 - y0) / 2;
26848 var translationX = 0;
26849 if (transform.gpano != null &&
26850 transform.gpano.CroppedAreaImageWidthPixels === transform.gpano.FullPanoWidthPixels) {
26851 translationX = this._inverted ? value[0] + 1 - centerX : value[0] - centerX;
26854 var minTranslationX = -x0;
26855 var maxTranslationX = 1 - x1;
26856 translationX = Math.max(minTranslationX, Math.min(maxTranslationX, value[0] - centerX));
26858 var minTranslationY = -y0;
26859 var maxTranslationY = 1 - y1;
26860 var translationY = Math.max(minTranslationY, Math.min(maxTranslationY, value[1] - centerY));
26861 this._rect[0] = original[0] + translationX;
26862 this._rect[1] = original[1] + translationY;
26863 this._rect[2] = original[2] + translationX;
26864 this._rect[3] = original[3] + translationY;
26865 if (this._rect[0] < 0) {
26866 this._rect[0] += 1;
26867 this._inverted = !this._inverted;
26869 else if (this._rect[0] > 1) {
26870 this._rect[0] -= 1;
26871 this._inverted = !this._inverted;
26873 if (this._rect[2] < 0) {
26874 this._rect[2] += 1;
26875 this._inverted = !this._inverted;
26877 else if (this._rect[2] > 1) {
26878 this._rect[2] -= 1;
26879 this._inverted = !this._inverted;
26881 this._notifyChanged$.next(this);
26884 * Get the 3D coordinates for the vertices of the rectangle with
26885 * interpolated points along the lines.
26887 * @param {Transform} transform - The transform of the node related to
26889 * @returns {Array<Array<number>>} Polygon array of 3D world coordinates
26890 * representing the rectangle.
26892 RectGeometry.prototype.getPoints3d = function (transform) {
26893 return this._getPoints2d(transform)
26894 .map(function (point) {
26895 return transform.unprojectBasic(point, 200);
26899 * Get a vertex from the polygon representation of the 3D coordinates for the
26900 * vertices of the geometry.
26902 * @description The first vertex represents the bottom-left corner with the rest of
26903 * the vertices following in clockwise order.
26905 * @param {number} index - Vertex index.
26906 * @param {Transform} transform - The transform of the node related to the geometry.
26907 * @returns {Array<Array<number>>} Polygon array of 3D world coordinates representing
26908 * the vertices of the geometry.
26910 RectGeometry.prototype.getVertex3d = function (index, transform) {
26911 return transform.unprojectBasic(this._rectToVertices2d(this._rect)[index], 200);
26914 * Get a polygon representation of the 3D coordinates for the vertices of the rectangle.
26916 * @description The first vertex represents the bottom-left corner with the rest of
26917 * the vertices following in clockwise order.
26919 * @param {Transform} transform - The transform of the node related to the rectangle.
26920 * @returns {Array<Array<number>>} Polygon array of 3D world coordinates representing
26921 * the rectangle vertices.
26923 RectGeometry.prototype.getVertices3d = function (transform) {
26924 return this._rectToVertices2d(this._rect)
26925 .map(function (vertex) {
26926 return transform.unprojectBasic(vertex, 200);
26930 RectGeometry.prototype.getCentroid3d = function (transform) {
26931 var rect = this._rect;
26933 var x1 = this._inverted ? rect[2] + 1 : rect[2];
26936 var centroidX = x0 + (x1 - x0) / 2;
26937 var centroidY = y0 + (y1 - y0) / 2;
26938 return transform.unprojectBasic([centroidX, centroidY], 200);
26941 RectGeometry.prototype.getTriangles3d = function (transform) {
26942 return this._triangulate(this._rectToVertices2d(this._rect), this.getVertices3d(transform));
26945 * Check if a particular bottom-right value is valid according to the current
26946 * rectangle coordinates.
26948 * @param {Array<number>} bottomRight - The bottom-right coordinates to validate
26949 * @returns {boolean} Value indicating whether the provided bottom-right coordinates
26952 RectGeometry.prototype.validate = function (bottomRight) {
26953 var rect = this._rect;
26954 if (!this._inverted && bottomRight[0] < rect[0] ||
26955 bottomRight[0] - rect[2] > 0.25 ||
26956 bottomRight[1] < rect[1]) {
26962 * Get the 2D coordinates for the vertices of the rectangle with
26963 * interpolated points along the lines.
26965 * @param {Transform} transform - The transform of the node related to
26967 * @returns {Array<Array<number>>} Polygon array of 2D basic coordinates
26968 * representing the rectangle.
26970 RectGeometry.prototype._getPoints2d = function (transform) {
26971 var vertices2d = this._rectToVertices2d(this._rect);
26972 var sides = vertices2d.length - 1;
26975 for (var i = 0; i < sides; ++i) {
26976 var startX = vertices2d[i][0];
26977 var startY = vertices2d[i][1];
26978 var endX = vertices2d[i + 1][0];
26979 var endY = vertices2d[i + 1][1];
26980 var intervalX = (endX - startX) / (sections - 1);
26981 var intervalY = (endY - startY) / (sections - 1);
26982 for (var j = 0; j < sections; ++j) {
26984 startX + j * intervalX,
26985 startY + j * intervalY,
26987 points2d.push(point);
26993 * Convert the top-left, bottom-right representation of a rectangle to a polygon
26994 * representation of the vertices starting at the bottom-right corner going
26997 * @param {Array<number>} rect - Top-left, bottom-right representation of a
26999 * @returns {Array<Array<number>>} Polygon representation of the vertices of the
27002 RectGeometry.prototype._rectToVertices2d = function (rect) {
27004 [rect[0], rect[3]],
27005 [rect[0], rect[1]],
27006 [this._inverted ? rect[2] + 1 : rect[2], rect[1]],
27007 [this._inverted ? rect[2] + 1 : rect[2], rect[3]],
27008 [rect[0], rect[3]],
27011 return RectGeometry;
27012 }(Component_1.VertexGeometry));
27013 exports.RectGeometry = RectGeometry;
27014 Object.defineProperty(exports, "__esModule", { value: true });
27015 exports.default = RectGeometry;
27017 },{"../../../Component":224}],288:[function(require,module,exports){
27018 /// <reference path="../../../../typings/index.d.ts" />
27020 var __extends = (this && this.__extends) || function (d, b) {
27021 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
27022 function __() { this.constructor = d; }
27023 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27025 var earcut = require("earcut");
27026 var Component_1 = require("../../../Component");
27028 * @class VertexGeometry
27030 * @classdesc Represents a vertex geometry.
27032 var VertexGeometry = (function (_super) {
27033 __extends(VertexGeometry, _super);
27035 * Create a vertex geometry.
27039 function VertexGeometry() {
27040 return _super.call(this) || this;
27043 * Triangulates a 2d polygon and returns the triangle
27044 * representation as a flattened array of 3d points.
27046 * @param {Array<Array<number>>} points2d - 2d points of outline to triangulate.
27047 * @param {Array<Array<number>>} points3d - 3d points of outline corresponding to the 2d points.
27048 * @param {Array<Array<Array<number>>>} [holes2d] - 2d points of holes to triangulate.
27049 * @param {Array<Array<Array<number>>>} [holes3d] - 3d points of holes corresponding to the 2d points.
27050 * @returns {Array<number>} Flattened array of 3d points ordered based on the triangles.
27052 VertexGeometry.prototype._triangulate = function (points2d, points3d, holes2d, holes3d) {
27053 var data = [points2d.slice(0, -1)];
27054 for (var _i = 0, _a = holes2d != null ? holes2d : []; _i < _a.length; _i++) {
27055 var hole2d = _a[_i];
27056 data.push(hole2d.slice(0, -1));
27058 var points = points3d.slice(0, -1);
27059 for (var _b = 0, _c = holes3d != null ? holes3d : []; _b < _c.length; _b++) {
27060 var hole3d = _c[_b];
27061 points = points.concat(hole3d.slice(0, -1));
27063 var flattened = earcut.flatten(data);
27064 var indices = earcut(flattened.vertices, flattened.holes, flattened.dimensions);
27065 var triangles = [];
27066 for (var i = 0; i < indices.length; ++i) {
27067 var point = points[indices[i]];
27068 triangles.push(point[0]);
27069 triangles.push(point[1]);
27070 triangles.push(point[2]);
27074 return VertexGeometry;
27075 }(Component_1.Geometry));
27076 exports.VertexGeometry = VertexGeometry;
27077 Object.defineProperty(exports, "__esModule", { value: true });
27078 exports.default = VertexGeometry;
27080 },{"../../../Component":224,"earcut":6}],289:[function(require,module,exports){
27083 (function (Alignment) {
27084 Alignment[Alignment["Center"] = 0] = "Center";
27085 Alignment[Alignment["Outer"] = 1] = "Outer";
27086 })(Alignment = exports.Alignment || (exports.Alignment = {}));
27087 Object.defineProperty(exports, "__esModule", { value: true });
27088 exports.default = Alignment;
27090 },{}],290:[function(require,module,exports){
27091 /// <reference path="../../../../typings/index.d.ts" />
27093 var THREE = require("three");
27094 var vd = require("virtual-dom");
27095 var Subject_1 = require("rxjs/Subject");
27096 var Component_1 = require("../../../Component");
27097 var OutlineCreateTag = (function () {
27098 function OutlineCreateTag(geometry, options) {
27099 this._geometry = geometry;
27100 this._options = { color: options.color == null ? 0xFFFFFF : options.color };
27101 this._created$ = new Subject_1.Subject();
27102 this._aborted$ = new Subject_1.Subject();
27104 Object.defineProperty(OutlineCreateTag.prototype, "geometry", {
27106 return this._geometry;
27111 Object.defineProperty(OutlineCreateTag.prototype, "created$", {
27113 return this._created$;
27118 Object.defineProperty(OutlineCreateTag.prototype, "aborted$", {
27120 return this._aborted$;
27125 Object.defineProperty(OutlineCreateTag.prototype, "geometryChanged$", {
27128 return this._geometry.changed$
27129 .map(function (geometry) {
27136 OutlineCreateTag.prototype.getGLObject = function (transform) {
27137 var polygon3d = this._geometry.getPoints3d(transform);
27138 var positions = this._getPositions(polygon3d);
27139 var geometry = new THREE.BufferGeometry();
27140 geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3));
27141 var material = new THREE.LineBasicMaterial({
27142 color: this._options.color,
27145 return new THREE.Line(geometry, material);
27147 OutlineCreateTag.prototype.getDOMObjects = function (transform, matrixWorldInverse, projectionMatrix) {
27150 var abort = function (e) {
27151 e.stopPropagation();
27152 _this._aborted$.next(_this);
27154 if (this._geometry instanceof Component_1.RectGeometry) {
27155 var topLeftPoint3d = this._geometry.getVertex3d(1, transform);
27156 var topLeftCameraSpace = this._convertToCameraSpace(topLeftPoint3d, matrixWorldInverse);
27157 if (topLeftCameraSpace.z < 0) {
27158 var centerCanvas = this._projectToCanvas(topLeftCameraSpace, projectionMatrix);
27159 var centerCss = centerCanvas.map(function (coord) { return (100 * coord) + "%"; });
27160 var pointProperties = {
27162 background: "#" + ("000000" + this._options.color.toString(16)).substr(-6),
27163 left: centerCss[0],
27164 position: "absolute",
27168 var completerProperties = {
27170 style: { left: centerCss[0], position: "absolute", top: centerCss[1] },
27172 vNodes.push(vd.h("div.TagInteractor", completerProperties, []));
27173 vNodes.push(vd.h("div.TagVertex", pointProperties, []));
27176 else if (this._geometry instanceof Component_1.PolygonGeometry) {
27177 var polygonGeometry_1 = this._geometry;
27178 var firstVertex3d = this._geometry.getVertex3d(0, transform);
27179 var firstCameraSpace = this._convertToCameraSpace(firstVertex3d, matrixWorldInverse);
27180 if (firstCameraSpace.z < 0) {
27181 var centerCanvas = this._projectToCanvas(firstCameraSpace, projectionMatrix);
27182 var centerCss = centerCanvas.map(function (coord) { return (100 * coord) + "%"; });
27183 var firstOnclick = polygonGeometry_1.polygon.length > 4 ?
27185 e.stopPropagation();
27186 polygonGeometry_1.removeVertex2d(polygonGeometry_1.polygon.length - 2);
27187 _this._created$.next(_this);
27190 var completerProperties = {
27191 onclick: firstOnclick,
27192 style: { left: centerCss[0], position: "absolute", top: centerCss[1] },
27194 var firstClass = polygonGeometry_1.polygon.length > 4 ?
27197 vNodes.push(vd.h("div." + firstClass, completerProperties, []));
27199 if (polygonGeometry_1.polygon.length > 3) {
27200 var lastVertex3d = this._geometry.getVertex3d(polygonGeometry_1.polygon.length - 3, transform);
27201 var lastCameraSpace = this._convertToCameraSpace(lastVertex3d, matrixWorldInverse);
27202 if (lastCameraSpace.z < 0) {
27203 var centerCanvas = this._projectToCanvas(lastCameraSpace, projectionMatrix);
27204 var centerCss = centerCanvas.map(function (coord) { return (100 * coord) + "%"; });
27205 var remove = function (e) {
27206 e.stopPropagation();
27207 polygonGeometry_1.removeVertex2d(polygonGeometry_1.polygon.length - 3);
27209 var completerProperties = {
27211 style: { left: centerCss[0], position: "absolute", top: centerCss[1] },
27213 vNodes.push(vd.h("div.TagInteractor", completerProperties, []));
27216 var vertices3d = this._geometry.getVertices3d(transform);
27217 vertices3d.splice(-2, 2);
27218 for (var _i = 0, vertices3d_1 = vertices3d; _i < vertices3d_1.length; _i++) {
27219 var vertex = vertices3d_1[_i];
27220 var vertexCameraSpace = this._convertToCameraSpace(vertex, matrixWorldInverse);
27221 if (vertexCameraSpace.z < 0) {
27222 var centerCanvas = this._projectToCanvas(vertexCameraSpace, projectionMatrix);
27223 var centerCss = centerCanvas.map(function (coord) { return (100 * coord) + "%"; });
27224 var pointProperties = {
27226 background: "#" + ("000000" + this._options.color.toString(16)).substr(-6),
27227 left: centerCss[0],
27228 position: "absolute",
27232 vNodes.push(vd.h("div.TagVertex", pointProperties, []));
27238 OutlineCreateTag.prototype.addPoint = function (point) {
27239 if (this._geometry instanceof Component_1.RectGeometry) {
27240 var rectGeometry = this._geometry;
27241 if (!rectGeometry.validate(point)) {
27244 this._created$.next(this);
27246 else if (this._geometry instanceof Component_1.PolygonGeometry) {
27247 var polygonGeometry = this._geometry;
27248 polygonGeometry.addVertex2d(point);
27251 OutlineCreateTag.prototype._getPositions = function (polygon3d) {
27252 var length = polygon3d.length;
27253 var positions = new Float32Array(length * 3);
27254 for (var i = 0; i < length; ++i) {
27256 var position = polygon3d[i];
27257 positions[index] = position[0];
27258 positions[index + 1] = position[1];
27259 positions[index + 2] = position[2];
27263 OutlineCreateTag.prototype._projectToCanvas = function (point, projectionMatrix) {
27264 var projected = new THREE.Vector3(point.x, point.y, point.z)
27265 .applyProjection(projectionMatrix);
27266 return [(projected.x + 1) / 2, (-projected.y + 1) / 2];
27268 OutlineCreateTag.prototype._convertToCameraSpace = function (point, matrixWorldInverse) {
27269 return new THREE.Vector3(point[0], point[1], point[2]).applyMatrix4(matrixWorldInverse);
27271 return OutlineCreateTag;
27273 exports.OutlineCreateTag = OutlineCreateTag;
27274 Object.defineProperty(exports, "__esModule", { value: true });
27275 exports.default = OutlineCreateTag;
27277 },{"../../../Component":224,"rxjs/Subject":33,"three":174,"virtual-dom":180}],291:[function(require,module,exports){
27278 /// <reference path="../../../../typings/index.d.ts" />
27280 var __extends = (this && this.__extends) || function (d, b) {
27281 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
27282 function __() { this.constructor = d; }
27283 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27285 var THREE = require("three");
27286 var vd = require("virtual-dom");
27287 var Component_1 = require("../../../Component");
27288 var Viewer_1 = require("../../../Viewer");
27290 * @class OutlineRenderTag
27291 * @classdesc Tag visualizing the properties of an OutlineTag.
27293 var OutlineRenderTag = (function (_super) {
27294 __extends(OutlineRenderTag, _super);
27295 function OutlineRenderTag(tag, transform) {
27296 var _this = _super.call(this, tag, transform) || this;
27297 _this._fill = _this._tag.fillOpacity > 0 && !transform.gpano ?
27298 _this._createFill() :
27300 _this._holes = _this._tag.lineWidth >= 1 ?
27301 _this._createHoles() :
27303 _this._outline = _this._tag.lineWidth >= 1 ?
27304 _this._createOutline() :
27306 _this._glObjects = _this._createGLObjects();
27307 _this._tag.geometry.changed$
27308 .subscribe(function (geometry) {
27309 if (_this._fill != null) {
27310 _this._updateFillGeometry();
27312 if (_this._holes.length > 0) {
27313 _this._updateHoleGeometries();
27315 if (_this._outline != null) {
27316 _this._updateOulineGeometry();
27319 _this._tag.changed$
27320 .subscribe(function (changedTag) {
27321 var glObjectsChanged = false;
27322 if (_this._fill == null) {
27323 if (_this._tag.fillOpacity > 0 && !_this._transform.gpano) {
27324 _this._fill = _this._createFill();
27325 glObjectsChanged = true;
27329 _this._updateFillMaterial();
27331 if (_this._outline == null) {
27332 if (_this._tag.lineWidth > 0) {
27333 _this._holes = _this._createHoles();
27334 _this._outline = _this._createOutline();
27335 glObjectsChanged = true;
27339 _this._updateHoleMaterials();
27340 _this._updateOutlineMaterial();
27342 if (glObjectsChanged) {
27343 _this._glObjects = _this._createGLObjects();
27344 _this._glObjectsChanged$.next(_this);
27349 OutlineRenderTag.prototype.dispose = function () {
27350 this._disposeFill();
27351 this._disposeHoles();
27352 this._disposeOutline();
27354 OutlineRenderTag.prototype.getDOMObjects = function (atlas, matrixWorldInverse, projectionMatrix) {
27357 if (this._tag.geometry instanceof Component_1.RectGeometry) {
27358 if (this._tag.icon != null) {
27359 var iconVertex = this._tag.geometry.getVertex3d(this._tag.iconIndex, this._transform);
27360 var iconCameraSpace = this._convertToCameraSpace(iconVertex, matrixWorldInverse);
27361 if (iconCameraSpace.z < 0) {
27362 var interact = function (e) {
27363 _this._interact$.next({ offsetX: 0, offsetY: 0, operation: Component_1.TagOperation.None, tag: _this._tag });
27365 if (atlas.loaded) {
27366 var spriteAlignments = this._getSpriteAlignment(this._tag.iconIndex, this._tag.iconAlignment);
27367 var sprite = atlas.getDOMSprite(this._tag.icon, spriteAlignments[0], spriteAlignments[1]);
27368 var click = function (e) {
27369 e.stopPropagation();
27370 _this._tag.click$.next(_this._tag);
27372 var iconCanvas = this._projectToCanvas(iconCameraSpace, projectionMatrix);
27373 var iconCss = iconCanvas.map(function (coord) { return (100 * coord) + "%"; });
27376 onmousedown: interact,
27379 pointerEvents: "all",
27380 position: "absolute",
27384 vNodes.push(vd.h("div.TagSymbol", properties, [sprite]));
27388 else if (this._tag.text != null) {
27389 var textVertex = this._tag.geometry.getVertex3d(3, this._transform);
27390 var textCameraSpace = this._convertToCameraSpace(textVertex, matrixWorldInverse);
27391 if (textCameraSpace.z < 0) {
27392 var interact = function (e) {
27393 _this._interact$.next({ offsetX: 0, offsetY: 0, operation: Component_1.TagOperation.None, tag: _this._tag });
27395 var labelCanvas = this._projectToCanvas(textCameraSpace, projectionMatrix);
27396 var labelCss = labelCanvas.map(function (coord) { return (100 * coord) + "%"; });
27398 onmousedown: interact,
27400 color: "#" + ("000000" + this._tag.textColor.toString(16)).substr(-6),
27402 pointerEvents: "all",
27403 position: "absolute",
27406 textContent: this._tag.text,
27408 vNodes.push(vd.h("span.TagSymbol", properties, []));
27412 if (!this._tag.editable) {
27415 var lineColor = "#" + ("000000" + this._tag.lineColor.toString(16)).substr(-6);
27416 if (this._tag.geometry instanceof Component_1.RectGeometry) {
27417 var centroid3d = this._tag.geometry.getCentroid3d(this._transform);
27418 var centroidCameraSpace = this._convertToCameraSpace(centroid3d, matrixWorldInverse);
27419 if (centroidCameraSpace.z < 0) {
27420 var interact = this._interact(Component_1.TagOperation.Centroid);
27421 var centerCanvas = this._projectToCanvas(centroidCameraSpace, projectionMatrix);
27422 var centerCss = centerCanvas.map(function (coord) { return (100 * coord) + "%"; });
27424 onmousedown: interact,
27425 style: { background: lineColor, left: centerCss[0], position: "absolute", top: centerCss[1] },
27427 vNodes.push(vd.h("div.TagMover", properties, []));
27430 var vertices3d = this._tag.geometry.getVertices3d(this._transform);
27431 for (var i = 0; i < vertices3d.length - 1; i++) {
27432 var isRectGeometry = this._tag.geometry instanceof Component_1.RectGeometry;
27433 if (isRectGeometry &&
27434 ((this._tag.icon != null && i === this._tag.iconIndex) ||
27435 (this._tag.icon == null && this._tag.text != null && i === 3))) {
27438 var vertexCameraSpace = this._convertToCameraSpace(vertices3d[i], matrixWorldInverse);
27439 if (vertexCameraSpace.z > 0) {
27442 var interact = this._interact(Component_1.TagOperation.Vertex, i);
27443 var vertexCanvas = this._projectToCanvas(vertexCameraSpace, projectionMatrix);
27444 var vertexCss = vertexCanvas.map(function (coord) { return (100 * coord) + "%"; });
27446 onmousedown: interact,
27448 background: lineColor,
27449 left: vertexCss[0],
27450 position: "absolute",
27454 if (isRectGeometry) {
27455 properties.style.cursor = i % 2 === 0 ? "nesw-resize" : "nwse-resize";
27457 vNodes.push(vd.h("div.TagResizer", properties, []));
27458 if (!this._tag.indicateVertices) {
27461 var pointProperties = {
27463 background: lineColor,
27464 left: vertexCss[0],
27465 position: "absolute",
27469 vNodes.push(vd.h("div.TagVertex", pointProperties, []));
27473 OutlineRenderTag.prototype._createFill = function () {
27474 var triangles = this._tag.geometry.getTriangles3d(this._transform);
27475 var positions = new Float32Array(triangles);
27476 var geometry = new THREE.BufferGeometry();
27477 geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3));
27478 geometry.computeBoundingSphere();
27479 var material = new THREE.MeshBasicMaterial({
27480 color: this._tag.fillColor,
27481 opacity: this._tag.fillOpacity,
27482 side: THREE.DoubleSide,
27485 return new THREE.Mesh(geometry, material);
27487 OutlineRenderTag.prototype._createGLObjects = function () {
27488 var glObjects = [];
27489 if (this._fill != null) {
27490 glObjects.push(this._fill);
27492 for (var _i = 0, _a = this._holes; _i < _a.length; _i++) {
27494 glObjects.push(hole);
27496 if (this._outline != null) {
27497 glObjects.push(this._outline);
27501 OutlineRenderTag.prototype._createHoles = function () {
27503 if (this._tag.geometry instanceof Component_1.PolygonGeometry) {
27504 var polygonGeometry = this._tag.geometry;
27505 var holes3d = polygonGeometry.getHoleVertices3d(this._transform);
27506 for (var _i = 0, holes3d_1 = holes3d; _i < holes3d_1.length; _i++) {
27507 var holePoints3d = holes3d_1[_i];
27508 var hole = this._createLine(holePoints3d);
27514 OutlineRenderTag.prototype._createLine = function (points3d) {
27515 var positions = this._getLinePositions(points3d);
27516 var geometry = new THREE.BufferGeometry();
27517 geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3));
27518 geometry.computeBoundingSphere();
27519 var material = new THREE.LineBasicMaterial({
27520 color: this._tag.lineColor,
27521 linewidth: this._tag.lineWidth,
27523 return new THREE.Line(geometry, material);
27525 OutlineRenderTag.prototype._createOutline = function () {
27526 var points3d = this._tag.geometry.getPoints3d(this._transform);
27527 return this._createLine(points3d);
27529 OutlineRenderTag.prototype._disposeFill = function () {
27530 if (this._fill == null) {
27533 this._fill.geometry.dispose();
27534 this._fill.material.dispose();
27537 OutlineRenderTag.prototype._disposeHoles = function () {
27538 for (var _i = 0, _a = this._holes; _i < _a.length; _i++) {
27540 hole.geometry.dispose();
27541 hole.material.dispose();
27545 OutlineRenderTag.prototype._disposeOutline = function () {
27546 if (this._outline == null) {
27549 this._outline.geometry.dispose();
27550 this._outline.material.dispose();
27551 this._outline = null;
27553 OutlineRenderTag.prototype._getLinePositions = function (points3d) {
27554 var length = points3d.length;
27555 var positions = new Float32Array(length * 3);
27556 for (var i = 0; i < length; ++i) {
27558 var position = points3d[i];
27559 positions[index + 0] = position[0];
27560 positions[index + 1] = position[1];
27561 positions[index + 2] = position[2];
27565 OutlineRenderTag.prototype._getSpriteAlignment = function (index, alignment) {
27566 var horizontalAlignment = Viewer_1.SpriteAlignment.Center;
27567 var verticalAlignment = Viewer_1.SpriteAlignment.Center;
27568 if (alignment === Component_1.Alignment.Outer) {
27571 horizontalAlignment = Viewer_1.SpriteAlignment.End;
27572 verticalAlignment = Viewer_1.SpriteAlignment.Start;
27575 horizontalAlignment = Viewer_1.SpriteAlignment.End;
27576 verticalAlignment = Viewer_1.SpriteAlignment.End;
27579 horizontalAlignment = Viewer_1.SpriteAlignment.Start;
27580 verticalAlignment = Viewer_1.SpriteAlignment.End;
27583 horizontalAlignment = Viewer_1.SpriteAlignment.Start;
27584 verticalAlignment = Viewer_1.SpriteAlignment.Start;
27590 return [horizontalAlignment, verticalAlignment];
27592 OutlineRenderTag.prototype._interact = function (operation, vertexIndex) {
27594 return function (e) {
27595 var offsetX = e.offsetX - e.target.offsetWidth / 2;
27596 var offsetY = e.offsetY - e.target.offsetHeight / 2;
27597 _this._interact$.next({
27600 operation: operation,
27602 vertexIndex: vertexIndex,
27606 OutlineRenderTag.prototype._updateFillGeometry = function () {
27607 var triangles = this._tag.geometry.getTriangles3d(this._transform);
27608 var positions = new Float32Array(triangles);
27609 var geometry = this._fill.geometry;
27610 var attribute = geometry.getAttribute("position");
27611 if (attribute.array.length === positions.length) {
27612 attribute.set(positions);
27613 attribute.needsUpdate = true;
27616 geometry.removeAttribute("position");
27617 geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3));
27619 geometry.computeBoundingSphere();
27621 OutlineRenderTag.prototype._updateFillMaterial = function () {
27622 var material = this._fill.material;
27623 material.color = new THREE.Color(this._tag.fillColor);
27624 material.opacity = this._tag.fillOpacity;
27625 material.needsUpdate = true;
27627 OutlineRenderTag.prototype._updateHoleGeometries = function () {
27628 var polygonGeometry = this._tag.geometry;
27629 var holes3d = polygonGeometry.getHoleVertices3d(this._transform);
27630 if (holes3d.length !== this._holes.length) {
27631 throw new Error("Changing the number of holes is not supported.");
27633 for (var i = 0; i < this._holes.length; i++) {
27634 var holePoints3d = holes3d[i];
27635 var hole = this._holes[i];
27636 this._updateLine(hole, holePoints3d);
27639 OutlineRenderTag.prototype._updateHoleMaterials = function () {
27640 for (var _i = 0, _a = this._holes; _i < _a.length; _i++) {
27642 var material = hole.material;
27643 this._updateLineBasicMaterial(material);
27646 OutlineRenderTag.prototype._updateLine = function (line, points3d) {
27647 var positions = this._getLinePositions(points3d);
27648 var geometry = line.geometry;
27649 var attribute = geometry.getAttribute("position");
27650 attribute.set(positions);
27651 attribute.needsUpdate = true;
27652 geometry.computeBoundingSphere();
27654 OutlineRenderTag.prototype._updateOulineGeometry = function () {
27655 var points3d = this._tag.geometry.getPoints3d(this._transform);
27656 this._updateLine(this._outline, points3d);
27658 OutlineRenderTag.prototype._updateOutlineMaterial = function () {
27659 var material = this._outline.material;
27660 this._updateLineBasicMaterial(material);
27662 OutlineRenderTag.prototype._updateLineBasicMaterial = function (material) {
27663 material.color = new THREE.Color(this._tag.lineColor);
27664 material.linewidth = Math.max(this._tag.lineWidth, 1);
27665 material.opacity = this._tag.lineWidth >= 1 ? 1 : 0;
27666 material.transparent = this._tag.lineWidth <= 0;
27667 material.needsUpdate = true;
27669 return OutlineRenderTag;
27670 }(Component_1.RenderTag));
27671 exports.OutlineRenderTag = OutlineRenderTag;
27673 },{"../../../Component":224,"../../../Viewer":234,"three":174,"virtual-dom":180}],292:[function(require,module,exports){
27675 var __extends = (this && this.__extends) || function (d, b) {
27676 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
27677 function __() { this.constructor = d; }
27678 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27680 var Subject_1 = require("rxjs/Subject");
27681 var Component_1 = require("../../../Component");
27683 * @class OutlineTag
27684 * @classdesc Tag holding properties for visualizing a geometry outline.
27686 var OutlineTag = (function (_super) {
27687 __extends(OutlineTag, _super);
27689 * Create an outline tag.
27693 * @param {string} id
27694 * @param {Geometry} geometry
27695 * @param {IOutlineTagOptions} options - Options defining the visual appearance and
27696 * behavior of the outline tag.
27698 function OutlineTag(id, geometry, options) {
27699 var _this = _super.call(this, id, geometry) || this;
27700 _this._editable = options.editable == null ? false : options.editable;
27701 _this._fillColor = options.fillColor == null ? 0xFFFFFF : options.fillColor;
27702 _this._fillOpacity = options.fillOpacity == null ? 0.0 : options.fillOpacity;
27703 _this._icon = options.icon === undefined ? null : options.icon;
27704 _this._iconAlignment = options.iconAlignment == null ? Component_1.Alignment.Outer : options.iconAlignment;
27705 _this._iconIndex = options.iconIndex == null ? 3 : options.iconIndex;
27706 _this._indicateVertices = options.indicateVertices == null ? true : options.indicateVertices;
27707 _this._lineColor = options.lineColor == null ? 0xFFFFFF : options.lineColor;
27708 _this._lineWidth = options.lineWidth == null ? 1 : options.lineWidth;
27709 _this._text = options.text === undefined ? null : options.text;
27710 _this._textColor = options.textColor == null ? 0xFFFFFF : options.textColor;
27711 _this._click$ = new Subject_1.Subject();
27713 .subscribe(function (t) {
27714 _this.fire(OutlineTag.click, _this);
27718 Object.defineProperty(OutlineTag.prototype, "click$", {
27720 * Click observable.
27722 * @description An observable emitting the tag when the icon of the
27723 * tag has been clicked.
27725 * @returns {Observable<Tag>}
27728 return this._click$;
27733 Object.defineProperty(OutlineTag.prototype, "editable", {
27735 * Get editable property.
27736 * @returns {boolean} Value indicating if tag is editable.
27739 return this._editable;
27742 * Set editable property.
27745 * @fires Tag#changed
27747 set: function (value) {
27748 this._editable = value;
27749 this._notifyChanged$.next(this);
27754 Object.defineProperty(OutlineTag.prototype, "fillColor", {
27756 * Get fill color property.
27757 * @returns {number}
27760 return this._fillColor;
27763 * Set fill color property.
27766 * @fires Tag#changed
27768 set: function (value) {
27769 this._fillColor = value;
27770 this._notifyChanged$.next(this);
27775 Object.defineProperty(OutlineTag.prototype, "fillOpacity", {
27777 * Get fill opacity property.
27778 * @returns {number}
27781 return this._fillOpacity;
27784 * Set fill opacity property.
27787 * @fires Tag#changed
27789 set: function (value) {
27790 this._fillOpacity = value;
27791 this._notifyChanged$.next(this);
27796 Object.defineProperty(OutlineTag.prototype, "geometry", {
27798 return this._geometry;
27803 Object.defineProperty(OutlineTag.prototype, "icon", {
27805 * Get icon property.
27806 * @returns {string}
27812 * Set icon property.
27815 * @fires Tag#changed
27817 set: function (value) {
27818 this._icon = value;
27819 this._notifyChanged$.next(this);
27824 Object.defineProperty(OutlineTag.prototype, "iconAlignment", {
27826 * Get icon alignment property.
27827 * @returns {Alignment}
27830 return this._iconAlignment;
27833 * Set icon alignment property.
27834 * @param {Alignment}
27836 * @fires Tag#changed
27838 set: function (value) {
27839 this._iconAlignment = value;
27840 this._notifyChanged$.next(this);
27845 Object.defineProperty(OutlineTag.prototype, "iconIndex", {
27847 * Get icon index property.
27848 * @returns {number}
27851 return this._iconIndex;
27854 * Set icon index property.
27857 * @fires Tag#changed
27859 set: function (value) {
27860 this._iconIndex = value;
27861 this._notifyChanged$.next(this);
27866 Object.defineProperty(OutlineTag.prototype, "indicateVertices", {
27868 * Get indicate vertices property.
27869 * @returns {boolean} Value indicating if vertices should be indicated
27870 * when tag is editable.
27873 return this._indicateVertices;
27876 * Set indicate vertices property.
27879 * @fires Tag#changed
27881 set: function (value) {
27882 this._indicateVertices = value;
27883 this._notifyChanged$.next(this);
27888 Object.defineProperty(OutlineTag.prototype, "lineColor", {
27890 * Get line color property.
27891 * @returns {number}
27894 return this._lineColor;
27897 * Set line color property.
27900 * @fires Tag#changed
27902 set: function (value) {
27903 this._lineColor = value;
27904 this._notifyChanged$.next(this);
27909 Object.defineProperty(OutlineTag.prototype, "lineWidth", {
27911 * Get line width property.
27912 * @returns {number}
27915 return this._lineWidth;
27918 * Set line width property.
27921 * @fires Tag#changed
27923 set: function (value) {
27924 this._lineWidth = value;
27925 this._notifyChanged$.next(this);
27930 Object.defineProperty(OutlineTag.prototype, "text", {
27932 * Get text property.
27933 * @returns {string}
27939 * Set text property.
27942 * @fires Tag#changed
27944 set: function (value) {
27945 this._text = value;
27946 this._notifyChanged$.next(this);
27951 Object.defineProperty(OutlineTag.prototype, "textColor", {
27953 * Get text color property.
27954 * @returns {number}
27957 return this._textColor;
27960 * Set text color property.
27963 * @fires Tag#changed
27965 set: function (value) {
27966 this._textColor = value;
27967 this._notifyChanged$.next(this);
27973 * Set options for tag.
27975 * @description Sets all the option properties provided and keps
27976 * the rest of the values as is.
27978 * @param {IOutlineTagOptions} options - Outline tag options
27980 * @fires {Tag#changed}
27982 OutlineTag.prototype.setOptions = function (options) {
27983 this._editable = options.editable == null ? this._editable : options.editable;
27984 this._icon = options.icon === undefined ? this._icon : options.icon;
27985 this._iconAlignment = options.iconAlignment == null ? this._iconAlignment : options.iconAlignment;
27986 this._iconIndex = options.iconIndex == null ? this._iconIndex : options.iconIndex;
27987 this._indicateVertices = options.indicateVertices == null ? this._indicateVertices : options.indicateVertices;
27988 this._lineColor = options.lineColor == null ? this._lineColor : options.lineColor;
27989 this._lineWidth = options.lineWidth == null ? this._lineWidth : options.lineWidth;
27990 this._fillColor = options.fillColor == null ? this._fillColor : options.fillColor;
27991 this._fillOpacity = options.fillOpacity == null ? this._fillOpacity : options.fillOpacity;
27992 this._text = options.text === undefined ? this._text : options.text;
27993 this._textColor = options.textColor == null ? this._textColor : options.textColor;
27994 this._notifyChanged$.next(this);
27997 }(Component_1.Tag));
27999 * Event fired when the icon of the outline tag is clicked.
28001 * @event OutlineTag#click
28002 * @type {OutlineTag} The tag instance that was clicked.
28004 OutlineTag.click = "click";
28005 exports.OutlineTag = OutlineTag;
28006 Object.defineProperty(exports, "__esModule", { value: true });
28007 exports.default = OutlineTag;
28009 },{"../../../Component":224,"rxjs/Subject":33}],293:[function(require,module,exports){
28010 /// <reference path="../../../../typings/index.d.ts" />
28012 var THREE = require("three");
28013 var Subject_1 = require("rxjs/Subject");
28014 var RenderTag = (function () {
28015 function RenderTag(tag, transform) {
28017 this._transform = transform;
28018 this._glObjects = [];
28019 this._glObjectsChanged$ = new Subject_1.Subject();
28020 this._interact$ = new Subject_1.Subject();
28022 Object.defineProperty(RenderTag.prototype, "glObjects", {
28024 * Get the GL objects for rendering of the tag.
28025 * @return {Array<Object3D>}
28028 return this._glObjects;
28033 Object.defineProperty(RenderTag.prototype, "glObjectsChanged$", {
28035 return this._glObjectsChanged$;
28040 Object.defineProperty(RenderTag.prototype, "interact$", {
28042 return this._interact$;
28047 Object.defineProperty(RenderTag.prototype, "tag", {
28054 RenderTag.prototype._projectToCanvas = function (point3d, projectionMatrix) {
28055 var projected = new THREE.Vector3(point3d.x, point3d.y, point3d.z)
28056 .applyProjection(projectionMatrix);
28057 return [(projected.x + 1) / 2, (-projected.y + 1) / 2];
28059 RenderTag.prototype._convertToCameraSpace = function (point3d, matrixWorldInverse) {
28060 return new THREE.Vector3(point3d[0], point3d[1], point3d[2]).applyMatrix4(matrixWorldInverse);
28064 exports.RenderTag = RenderTag;
28065 Object.defineProperty(exports, "__esModule", { value: true });
28066 exports.default = RenderTag;
28068 },{"rxjs/Subject":33,"three":174}],294:[function(require,module,exports){
28069 /// <reference path="../../../../typings/index.d.ts" />
28071 var __extends = (this && this.__extends) || function (d, b) {
28072 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
28073 function __() { this.constructor = d; }
28074 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
28076 var vd = require("virtual-dom");
28077 var Component_1 = require("../../../Component");
28078 var Viewer_1 = require("../../../Viewer");
28080 * @class SpotRenderTag
28081 * @classdesc Tag visualizing the properties of a SpotTag.
28083 var SpotRenderTag = (function (_super) {
28084 __extends(SpotRenderTag, _super);
28085 function SpotRenderTag() {
28086 return _super !== null && _super.apply(this, arguments) || this;
28088 SpotRenderTag.prototype.dispose = function () { return; };
28089 SpotRenderTag.prototype.getDOMObjects = function (atlas, matrixWorldInverse, projectionMatrix) {
28092 var centroid3d = this._tag.geometry.getCentroid3d(this._transform);
28093 var centroidCameraSpace = this._convertToCameraSpace(centroid3d, matrixWorldInverse);
28094 if (centroidCameraSpace.z < 0) {
28095 var centroidCanvas = this._projectToCanvas(centroidCameraSpace, projectionMatrix);
28096 var centroidCss = centroidCanvas.map(function (coord) { return (100 * coord) + "%"; });
28097 var interactNone = function (e) {
28098 _this._interact$.next({ offsetX: 0, offsetY: 0, operation: Component_1.TagOperation.None, tag: _this._tag });
28100 if (this._tag.icon != null) {
28101 if (atlas.loaded) {
28102 var sprite = atlas.getDOMSprite(this._tag.icon, Viewer_1.SpriteAlignment.Center, Viewer_1.SpriteAlignment.End);
28104 onmousedown: interactNone,
28106 bottom: 100 * (1 - centroidCanvas[1]) + "%",
28107 left: centroidCss[0],
28108 pointerEvents: "all",
28109 position: "absolute",
28110 transform: "translate(0px, -8px)",
28113 vNodes.push(vd.h("div", properties, [sprite]));
28116 else if (this._tag.text != null) {
28118 onmousedown: interactNone,
28120 bottom: 100 * (1 - centroidCanvas[1]) + "%",
28121 color: "#" + ("000000" + this._tag.textColor.toString(16)).substr(-6),
28122 left: centroidCss[0],
28123 pointerEvents: "all",
28124 position: "absolute",
28125 transform: "translate(-50%, -7px)",
28127 textContent: this._tag.text,
28129 vNodes.push(vd.h("span.TagSymbol", properties, []));
28131 var interact = this._interact(Component_1.TagOperation.Centroid);
28132 var background = "#" + ("000000" + this._tag.color.toString(16)).substr(-6);
28133 if (this._tag.editable) {
28134 var interactorProperties = {
28135 onmousedown: interact,
28137 background: background,
28138 left: centroidCss[0],
28139 pointerEvents: "all",
28140 position: "absolute",
28141 top: centroidCss[1],
28144 vNodes.push(vd.h("div.TagSpotInteractor", interactorProperties, []));
28146 var pointProperties = {
28148 background: background,
28149 left: centroidCss[0],
28150 position: "absolute",
28151 top: centroidCss[1],
28154 vNodes.push(vd.h("div.TagVertex", pointProperties, []));
28158 SpotRenderTag.prototype._interact = function (operation, vertexIndex) {
28160 return function (e) {
28161 var offsetX = e.offsetX - e.target.offsetWidth / 2;
28162 var offsetY = e.offsetY - e.target.offsetHeight / 2;
28163 _this._interact$.next({
28166 operation: operation,
28168 vertexIndex: vertexIndex,
28172 return SpotRenderTag;
28173 }(Component_1.RenderTag));
28174 exports.SpotRenderTag = SpotRenderTag;
28176 },{"../../../Component":224,"../../../Viewer":234,"virtual-dom":180}],295:[function(require,module,exports){
28178 var __extends = (this && this.__extends) || function (d, b) {
28179 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
28180 function __() { this.constructor = d; }
28181 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
28183 var Component_1 = require("../../../Component");
28186 * @classdesc Tag holding properties for visualizing the centroid of a geometry.
28188 var SpotTag = (function (_super) {
28189 __extends(SpotTag, _super);
28191 * Create a spot tag.
28195 * @param {string} id
28196 * @param {Geometry} geometry
28197 * @param {IOutlineTagOptions} options - Options defining the visual appearance and
28198 * behavior of the spot tag.
28200 function SpotTag(id, geometry, options) {
28201 var _this = _super.call(this, id, geometry) || this;
28202 _this._color = options.color == null ? 0xFFFFFF : options.color;
28203 _this._editable = options.editable == null ? false : options.editable;
28204 _this._icon = options.icon === undefined ? null : options.icon;
28205 _this._text = options.text === undefined ? null : options.text;
28206 _this._textColor = options.textColor == null ? 0xFFFFFF : options.textColor;
28209 Object.defineProperty(SpotTag.prototype, "color", {
28211 * Get color property.
28212 * @returns {number} The color of the spot as a hexagonal number;
28215 return this._color;
28218 * Set color property.
28221 * @fires Tag#changed
28223 set: function (value) {
28224 this._color = value;
28225 this._notifyChanged$.next(this);
28230 Object.defineProperty(SpotTag.prototype, "editable", {
28232 * Get editable property.
28233 * @returns {boolean} Value indicating if tag is editable.
28236 return this._editable;
28239 * Set editable property.
28242 * @fires Tag#changed
28244 set: function (value) {
28245 this._editable = value;
28246 this._notifyChanged$.next(this);
28251 Object.defineProperty(SpotTag.prototype, "icon", {
28253 * Get icon property.
28254 * @returns {string}
28260 * Set icon property.
28263 * @fires Tag#changed
28265 set: function (value) {
28266 this._icon = value;
28267 this._notifyChanged$.next(this);
28272 Object.defineProperty(SpotTag.prototype, "text", {
28274 * Get text property.
28275 * @returns {string}
28281 * Set text property.
28284 * @fires Tag#changed
28286 set: function (value) {
28287 this._text = value;
28288 this._notifyChanged$.next(this);
28293 Object.defineProperty(SpotTag.prototype, "textColor", {
28295 * Get text color property.
28296 * @returns {number}
28299 return this._textColor;
28302 * Set text color property.
28305 * @fires Tag#changed
28307 set: function (value) {
28308 this._textColor = value;
28309 this._notifyChanged$.next(this);
28315 * Set options for tag.
28317 * @description Sets all the option properties provided and keps
28318 * the rest of the values as is.
28320 * @param {ISpotTagOptions} options - Spot tag options
28322 * @fires {Tag#changed}
28324 SpotTag.prototype.setOptions = function (options) {
28325 this._color = options.color == null ? this._color : options.color;
28326 this._editable = options.editable == null ? this._editable : options.editable;
28327 this._icon = options.icon === undefined ? this._icon : options.icon;
28328 this._text = options.text === undefined ? this._text : options.text;
28329 this._textColor = options.textColor == null ? this._textColor : options.textColor;
28330 this._notifyChanged$.next(this);
28333 }(Component_1.Tag));
28334 exports.SpotTag = SpotTag;
28335 Object.defineProperty(exports, "__esModule", { value: true });
28336 exports.default = SpotTag;
28338 },{"../../../Component":224}],296:[function(require,module,exports){
28340 var __extends = (this && this.__extends) || function (d, b) {
28341 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
28342 function __() { this.constructor = d; }
28343 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
28345 var Subject_1 = require("rxjs/Subject");
28346 require("rxjs/add/operator/map");
28347 require("rxjs/add/operator/share");
28348 var Utils_1 = require("../../../Utils");
28352 * @classdesc Abstract class representing the basic functionality of for a tag.
28354 var Tag = (function (_super) {
28355 __extends(Tag, _super);
28360 * @param {string} id
28361 * @param {Geometry} geometry
28363 function Tag(id, geometry) {
28364 var _this = _super.call(this) || this;
28366 _this._geometry = geometry;
28367 _this._notifyChanged$ = new Subject_1.Subject();
28368 _this._notifyChanged$
28369 .subscribe(function (t) {
28370 _this.fire(Tag.changed, _this);
28372 _this._geometry.changed$
28373 .subscribe(function (g) {
28374 _this.fire(Tag.geometrychanged, _this);
28378 Object.defineProperty(Tag.prototype, "id", {
28381 * @returns {string}
28389 Object.defineProperty(Tag.prototype, "geometry", {
28391 * Get geometry property.
28392 * @returns {Geometry}
28395 return this._geometry;
28400 Object.defineProperty(Tag.prototype, "changed$", {
28402 * Get changed observable.
28403 * @returns {Observable<Tag>}
28406 return this._notifyChanged$;
28411 Object.defineProperty(Tag.prototype, "geometryChanged$", {
28413 * Get geometry changed observable.
28414 * @returns {Observable<Tag>}
28418 return this._geometry.changed$
28419 .map(function (geometry) {
28428 }(Utils_1.EventEmitter));
28430 * Event fired when a property related to the visual appearance of the
28433 * @event Tag#changed
28434 * @type {Tag} The tag instance that has changed.
28436 Tag.changed = "changed";
28438 * Event fired when the geometry of the tag has changed.
28440 * @event Tag#geometrychanged
28441 * @type {Tag} The tag instance whose geometry has changed.
28443 Tag.geometrychanged = "geometrychanged";
28445 Object.defineProperty(exports, "__esModule", { value: true });
28446 exports.default = Tag;
28448 },{"../../../Utils":233,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/share":73}],297:[function(require,module,exports){
28450 var __extends = (this && this.__extends) || function (d, b) {
28451 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
28452 function __() { this.constructor = d; }
28453 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
28455 var MapillaryError_1 = require("./MapillaryError");
28456 var ArgumentMapillaryError = (function (_super) {
28457 __extends(ArgumentMapillaryError, _super);
28458 function ArgumentMapillaryError(message) {
28459 var _this = _super.call(this, message != null ? message : "The argument is not valid.") || this;
28460 _this.name = "ArgumentMapillaryError";
28463 return ArgumentMapillaryError;
28464 }(MapillaryError_1.MapillaryError));
28465 exports.ArgumentMapillaryError = ArgumentMapillaryError;
28466 Object.defineProperty(exports, "__esModule", { value: true });
28467 exports.default = ArgumentMapillaryError;
28469 },{"./MapillaryError":299}],298:[function(require,module,exports){
28471 var __extends = (this && this.__extends) || function (d, b) {
28472 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
28473 function __() { this.constructor = d; }
28474 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
28476 var MapillaryError_1 = require("./MapillaryError");
28477 var GraphMapillaryError = (function (_super) {
28478 __extends(GraphMapillaryError, _super);
28479 function GraphMapillaryError(message) {
28480 var _this = _super.call(this, message) || this;
28481 _this.name = "GraphMapillaryError";
28484 return GraphMapillaryError;
28485 }(MapillaryError_1.MapillaryError));
28486 exports.GraphMapillaryError = GraphMapillaryError;
28487 Object.defineProperty(exports, "__esModule", { value: true });
28488 exports.default = GraphMapillaryError;
28490 },{"./MapillaryError":299}],299:[function(require,module,exports){
28492 var __extends = (this && this.__extends) || function (d, b) {
28493 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
28494 function __() { this.constructor = d; }
28495 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
28497 var MapillaryError = (function (_super) {
28498 __extends(MapillaryError, _super);
28499 function MapillaryError(message) {
28500 var _this = _super.call(this, message) || this;
28501 _this.name = "MapillaryError";
28504 return MapillaryError;
28506 exports.MapillaryError = MapillaryError;
28507 Object.defineProperty(exports, "__esModule", { value: true });
28508 exports.default = MapillaryError;
28510 },{}],300:[function(require,module,exports){
28511 /// <reference path="../../typings/index.d.ts" />
28513 var THREE = require("three");
28517 * @classdesc Holds information about a camera.
28519 var Camera = (function () {
28521 * Create a new camera instance.
28522 * @param {Transform} [transform] - Optional transform instance.
28524 function Camera(transform) {
28525 if (transform != null) {
28526 this._position = new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 0));
28527 this._lookat = new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 10));
28528 this._up = transform.upVector();
28529 this._focal = this._getFocal(transform);
28532 this._position = new THREE.Vector3(0, 0, 0);
28533 this._lookat = new THREE.Vector3(0, 0, 1);
28534 this._up = new THREE.Vector3(0, -1, 0);
28538 Object.defineProperty(Camera.prototype, "position", {
28541 * @returns {THREE.Vector3} The position vector.
28544 return this._position;
28549 Object.defineProperty(Camera.prototype, "lookat", {
28552 * @returns {THREE.Vector3} The lookat vector.
28555 return this._lookat;
28560 Object.defineProperty(Camera.prototype, "up", {
28563 * @returns {THREE.Vector3} The up vector.
28571 Object.defineProperty(Camera.prototype, "focal", {
28574 * @returns {number} The focal length.
28577 return this._focal;
28582 set: function (value) {
28583 this._focal = value;
28589 * Update this camera to the linearly interpolated value of two other cameras.
28591 * @param {Camera} a - First camera.
28592 * @param {Camera} b - Second camera.
28593 * @param {number} alpha - Interpolation value on the interval [0, 1].
28595 Camera.prototype.lerpCameras = function (a, b, alpha) {
28596 this._position.subVectors(b.position, a.position).multiplyScalar(alpha).add(a.position);
28597 this._lookat.subVectors(b.lookat, a.lookat).multiplyScalar(alpha).add(a.lookat);
28598 this._up.subVectors(b.up, a.up).multiplyScalar(alpha).add(a.up);
28599 this._focal = (1 - alpha) * a.focal + alpha * b.focal;
28602 * Copy the properties of another camera to this camera.
28604 * @param {Camera} other - Another camera.
28606 Camera.prototype.copy = function (other) {
28607 this._position.copy(other.position);
28608 this._lookat.copy(other.lookat);
28609 this._up.copy(other.up);
28610 this._focal = other.focal;
28613 * Clone this camera.
28615 * @returns {Camera} A camera with cloned properties equal to this camera.
28617 Camera.prototype.clone = function () {
28618 var camera = new Camera();
28619 camera.position.copy(this._position);
28620 camera.lookat.copy(this._lookat);
28621 camera.up.copy(this._up);
28622 camera.focal = this._focal;
28626 * Determine the distance between this camera and another camera.
28628 * @param {Camera} other - Another camera.
28629 * @returns {number} The distance between the cameras.
28631 Camera.prototype.diff = function (other) {
28632 var pd = this._position.distanceToSquared(other.position);
28633 var ld = this._lookat.distanceToSquared(other.lookat);
28634 var ud = this._up.distanceToSquared(other.up);
28635 var fd = 100 * Math.abs(this._focal - other.focal);
28636 return Math.max(pd, ld, ud, fd);
28639 * Get the focal length based on the transform.
28641 * @description Returns the focal length of the transform if gpano info is not available.
28642 * Returns a focal length corresponding to a vertical fov clamped to [45, 90] degrees based on
28643 * the gpano information if available.
28645 * @returns {number} Focal length.
28647 Camera.prototype._getFocal = function (transform) {
28648 if (transform.gpano == null) {
28649 return transform.focal;
28651 var vFov = Math.PI * transform.gpano.CroppedAreaImageHeightPixels / transform.gpano.FullPanoHeightPixels;
28652 var focal = 0.5 / Math.tan(vFov / 2);
28653 return Math.min(1 / (2 * (Math.sqrt(2) - 1)), Math.max(0.5, focal));
28657 exports.Camera = Camera;
28659 },{"three":174}],301:[function(require,module,exports){
28664 * @classdesc Converts coordinates between the geodetic (WGS84),
28665 * Earth-Centered, Earth-Fixed (ECEF) and local topocentric
28666 * East, North, Up (ENU) reference frames.
28668 * The WGS84 has latitude (degrees), longitude (degrees) and
28669 * altitude (meters) values.
28671 * The ECEF Z-axis pierces the north pole and the
28672 * XY-axis defines the equatorial plane. The X-axis extends
28673 * from the geocenter to the intersection of the Equator and
28674 * the Greenwich Meridian. All values in meters.
28676 * The WGS84 parameters are:
28680 * f = 1 / 298.257223563
28681 * e = Math.sqrt((a^2 - b^2) / a^2)
28682 * e' = Math.sqrt((a^2 - b^2) / b^2)
28684 * The WGS84 to ECEF conversion is performed using the following:
28686 * X = (N - h) * cos(phi) * cos(lambda)
28687 * Y = (N + h) * cos(phi) * sin(lambda)
28688 * Z = (b^2 * N / a^2 + h) * sin(phi)
28693 * lambda = longitude
28694 * h = height above ellipsoid (altitude)
28695 * N = Radius of curvature (meters)
28696 * = a / Math.sqrt(1 - e^2 * sin(phi)^2)
28698 * The ECEF to WGS84 conversion is performed using the following:
28700 * phi = arctan((Z + e'^2 * b * sin(theta)^3) / (p - e^2 * a * cos(theta)^3))
28701 * lambda = arctan(Y / X)
28702 * h = p / cos(phi) - N
28706 * p = Math.sqrt(X^2 + Y^2)
28707 * theta = arctan(Z * a / p * b)
28709 * In the ENU reference frame the x-axis points to the
28710 * East, the y-axis to the North and the z-axis Up. All values
28713 * The ECEF to ENU conversion is performed using the following:
28715 * | x | | -sin(lambda_r) cos(lambda_r) 0 | | X - X_r |
28716 * | y | = | -sin(phi_r) * cos(lambda_r) -sin(phi_r) * sin(lambda_r) cos(phi_r) | | Y - Y_r |
28717 * | z | | cos(phi_r) * cos(lambda_r) cos(phi_r) * sin(lambda_r) sin(phi_r) | | Z - Z_r |
28721 * phi_r = latitude of reference
28722 * lambda_r = longitude of reference
28723 * X_r, Y_r, Z_r = ECEF coordinates of reference
28725 * The ENU to ECEF conversion is performed by solving the above equation for X, Y, Z.
28727 * WGS84 to ENU and ENU to WGS84 are two step conversions with ECEF calculated in
28728 * the first step for both conversions.
28730 var GeoCoords = (function () {
28731 function GeoCoords() {
28732 this._wgs84a = 6378137.0;
28733 this._wgs84b = 6356752.31424518;
28736 * Convert coordinates from geodetic (WGS84) reference to local topocentric
28739 * @param {number} lat Latitude in degrees.
28740 * @param {number} lon Longitude in degrees.
28741 * @param {number} alt Altitude in meters.
28742 * @param {number} refLat Reference latitude in degrees.
28743 * @param {number} refLon Reference longitude in degrees.
28744 * @param {number} refAlt Reference altitude in meters.
28745 * @returns {Array<number>} The x, y, z local topocentric ENU coordinates.
28747 GeoCoords.prototype.geodeticToEnu = function (lat, lon, alt, refLat, refLon, refAlt) {
28748 var ecef = this.geodeticToEcef(lat, lon, alt);
28749 return this.ecefToEnu(ecef[0], ecef[1], ecef[2], refLat, refLon, refAlt);
28752 * Convert coordinates from local topocentric (ENU) reference to
28753 * geodetic (WGS84) reference.
28755 * @param {number} x Topocentric ENU coordinate in East direction.
28756 * @param {number} y Topocentric ENU coordinate in North direction.
28757 * @param {number} z Topocentric ENU coordinate in Up direction.
28758 * @param {number} refLat Reference latitude in degrees.
28759 * @param {number} refLon Reference longitude in degrees.
28760 * @param {number} refAlt Reference altitude in meters.
28761 * @returns {Array<number>} The latitude and longitude in degrees
28762 * as well as altitude in meters.
28764 GeoCoords.prototype.enuToGeodetic = function (x, y, z, refLat, refLon, refAlt) {
28765 var ecef = this.enuToEcef(x, y, z, refLat, refLon, refAlt);
28766 return this.ecefToGeodetic(ecef[0], ecef[1], ecef[2]);
28769 * Convert coordinates from Earth-Centered, Earth-Fixed (ECEF) reference
28770 * to local topocentric (ENU) reference.
28772 * @param {number} X ECEF X-value.
28773 * @param {number} Y ECEF Y-value.
28774 * @param {number} Z ECEF Z-value.
28775 * @param {number} refLat Reference latitude in degrees.
28776 * @param {number} refLon Reference longitude in degrees.
28777 * @param {number} refAlt Reference altitude in meters.
28778 * @returns {Array<number>} The x, y, z topocentric ENU coordinates in East, North
28779 * and Up directions respectively.
28781 GeoCoords.prototype.ecefToEnu = function (X, Y, Z, refLat, refLon, refAlt) {
28782 var refEcef = this.geodeticToEcef(refLat, refLon, refAlt);
28783 var V = [X - refEcef[0], Y - refEcef[1], Z - refEcef[2]];
28784 refLat = refLat * Math.PI / 180.0;
28785 refLon = refLon * Math.PI / 180.0;
28786 var cosLat = Math.cos(refLat);
28787 var sinLat = Math.sin(refLat);
28788 var cosLon = Math.cos(refLon);
28789 var sinLon = Math.sin(refLon);
28790 var x = -sinLon * V[0] + cosLon * V[1];
28791 var y = -sinLat * cosLon * V[0] - sinLat * sinLon * V[1] + cosLat * V[2];
28792 var z = cosLat * cosLon * V[0] + cosLat * sinLon * V[1] + sinLat * V[2];
28796 * Convert coordinates from local topocentric (ENU) reference
28797 * to Earth-Centered, Earth-Fixed (ECEF) reference.
28799 * @param {number} x Topocentric ENU coordinate in East direction.
28800 * @param {number} y Topocentric ENU coordinate in North direction.
28801 * @param {number} z Topocentric ENU coordinate in Up direction.
28802 * @param {number} refLat Reference latitude in degrees.
28803 * @param {number} refLon Reference longitude in degrees.
28804 * @param {number} refAlt Reference altitude in meters.
28805 * @returns {Array<number>} The X, Y, Z ECEF coordinates.
28807 GeoCoords.prototype.enuToEcef = function (x, y, z, refLat, refLon, refAlt) {
28808 var refEcef = this.geodeticToEcef(refLat, refLon, refAlt);
28809 refLat = refLat * Math.PI / 180.0;
28810 refLon = refLon * Math.PI / 180.0;
28811 var cosLat = Math.cos(refLat);
28812 var sinLat = Math.sin(refLat);
28813 var cosLon = Math.cos(refLon);
28814 var sinLon = Math.sin(refLon);
28815 var X = -sinLon * x - sinLat * cosLon * y + cosLat * cosLon * z + refEcef[0];
28816 var Y = cosLon * x - sinLat * sinLon * y + cosLat * sinLon * z + refEcef[1];
28817 var Z = cosLat * y + sinLat * z + refEcef[2];
28821 * Convert coordinates from geodetic reference (WGS84) to Earth-Centered,
28822 * Earth-Fixed (ECEF) reference.
28824 * @param {number} lat Latitude in degrees.
28825 * @param {number} lon Longitude in degrees.
28826 * @param {number} alt Altitude in meters.
28827 * @returns {Array<number>} The X, Y, Z ECEF coordinates.
28829 GeoCoords.prototype.geodeticToEcef = function (lat, lon, alt) {
28830 var a = this._wgs84a;
28831 var b = this._wgs84b;
28832 lat = lat * Math.PI / 180.0;
28833 lon = lon * Math.PI / 180.0;
28834 var cosLat = Math.cos(lat);
28835 var sinLat = Math.sin(lat);
28836 var cosLon = Math.cos(lon);
28837 var sinLon = Math.sin(lon);
28840 var L = 1.0 / Math.sqrt(a2 * cosLat * cosLat + b2 * sinLat * sinLat);
28841 var nhcl = (a2 * L + alt) * cosLat;
28842 var X = nhcl * cosLon;
28843 var Y = nhcl * sinLon;
28844 var Z = (b2 * L + alt) * sinLat;
28848 * Convert coordinates from Earth-Centered, Earth-Fixed (ECEF) reference
28849 * to geodetic reference (WGS84).
28851 * @param {number} X ECEF X-value.
28852 * @param {number} Y ECEF Y-value.
28853 * @param {number} Z ECEF Z-value.
28854 * @returns {Array<number>} The latitude and longitude in degrees
28855 * as well as altitude in meters.
28857 GeoCoords.prototype.ecefToGeodetic = function (X, Y, Z) {
28858 var a = this._wgs84a;
28859 var b = this._wgs84b;
28862 var a2mb2 = a2 - b2;
28863 var ea = Math.sqrt(a2mb2 / a2);
28864 var eb = Math.sqrt(a2mb2 / b2);
28865 var p = Math.sqrt(X * X + Y * Y);
28866 var theta = Math.atan2(Z * a, p * b);
28867 var sinTheta = Math.sin(theta);
28868 var cosTheta = Math.cos(theta);
28869 var lon = Math.atan2(Y, X);
28870 var lat = Math.atan2(Z + eb * eb * b * sinTheta * sinTheta * sinTheta, p - ea * ea * a * cosTheta * cosTheta * cosTheta);
28871 var sinLat = Math.sin(lat);
28872 var cosLat = Math.cos(lat);
28873 var N = a / Math.sqrt(1 - ea * ea * sinLat * sinLat);
28874 var alt = p / cosLat - N;
28875 return [lat * 180.0 / Math.PI, lon * 180.0 / Math.PI, alt];
28879 exports.GeoCoords = GeoCoords;
28880 Object.defineProperty(exports, "__esModule", { value: true });
28881 exports.default = GeoCoords;
28883 },{}],302:[function(require,module,exports){
28884 /// <reference path="../../typings/index.d.ts" />
28886 var THREE = require("three");
28890 * @classdesc Provides methods for scalar, vector and matrix calculations.
28892 var Spatial = (function () {
28893 function Spatial() {
28894 this._epsilon = 1e-9;
28897 * Converts azimuthal phi rotation (counter-clockwise with origin on X-axis) to
28898 * bearing (clockwise with origin at north or Y-axis).
28900 * @param {number} phi - Azimuthal phi angle in radians.
28901 * @returns {number} Bearing in radians.
28903 Spatial.prototype.azimuthalToBearing = function (phi) {
28904 return -phi + Math.PI / 2;
28907 * Converts degrees to radians.
28909 * @param {number} deg - Degrees.
28910 * @returns {number} Radians.
28912 Spatial.prototype.degToRad = function (deg) {
28913 return Math.PI * deg / 180;
28916 * Converts radians to degrees.
28918 * @param {number} rad - Radians.
28919 * @returns {number} Degrees.
28921 Spatial.prototype.radToDeg = function (rad) {
28922 return 180 * rad / Math.PI;
28925 * Creates a rotation matrix from an angle-axis vector.
28927 * @param {Array<number>} angleAxis - Angle-axis representation of a rotation.
28928 * @returns {THREE.Matrix4} Rotation matrix.
28930 Spatial.prototype.rotationMatrix = function (angleAxis) {
28931 var axis = new THREE.Vector3(angleAxis[0], angleAxis[1], angleAxis[2]);
28932 var angle = axis.length();
28934 return new THREE.Matrix4().makeRotationAxis(axis, angle);
28937 * Rotates a vector according to a angle-axis rotation vector.
28939 * @param {Array<number>} vector - Vector to rotate.
28940 * @param {Array<number>} angleAxis - Angle-axis representation of a rotation.
28941 * @returns {THREE.Vector3} Rotated vector.
28943 Spatial.prototype.rotate = function (vector, angleAxis) {
28944 var v = new THREE.Vector3(vector[0], vector[1], vector[2]);
28945 var rotationMatrix = this.rotationMatrix(angleAxis);
28946 v.applyMatrix4(rotationMatrix);
28950 * Calculates the optical center from a rotation vector
28951 * on the angle-axis representation and a translation vector
28952 * according to C = -R^T t.
28954 * @param {Array<number>} rotation - Angle-axis representation of a rotation.
28955 * @param {Array<number>} translation - Translation vector.
28956 * @returns {THREE.Vector3} Optical center.
28958 Spatial.prototype.opticalCenter = function (rotation, translation) {
28959 var angleAxis = [-rotation[0], -rotation[1], -rotation[2]];
28960 var vector = [-translation[0], -translation[1], -translation[2]];
28961 return this.rotate(vector, angleAxis);
28964 * Calculates the viewing direction from a rotation vector
28965 * on the angle-axis representation.
28967 * @param {number[]} rotation - Angle-axis representation of a rotation.
28968 * @returns {THREE.Vector3} Viewing direction.
28970 Spatial.prototype.viewingDirection = function (rotation) {
28971 var angleAxis = [-rotation[0], -rotation[1], -rotation[2]];
28972 return this.rotate([0, 0, 1], angleAxis);
28975 * Wrap a number on the interval [min, max].
28977 * @param {number} value - Value to wrap.
28978 * @param {number} min - Lower endpoint of interval.
28979 * @param {number} max - Upper endpoint of interval.
28980 * @returns {number} The wrapped number.
28982 Spatial.prototype.wrap = function (value, min, max) {
28984 throw new Error("Invalid arguments: max must be larger than min.");
28986 var interval = (max - min);
28987 while (value > max || value < min) {
28989 value = value - interval;
28991 else if (value < min) {
28992 value = value + interval;
28998 * Wrap an angle on the interval [-Pi, Pi].
29000 * @param {number} angle - Value to wrap.
29001 * @returns {number} Wrapped angle.
29003 Spatial.prototype.wrapAngle = function (angle) {
29004 return this.wrap(angle, -Math.PI, Math.PI);
29007 * Limit the value to the interval [min, max] by changing the value to
29008 * the nearest available one when it is outside the interval.
29010 * @param {number} value - Value to clamp.
29011 * @param {number} min - Minimum of the interval.
29012 * @param {number} max - Maximum of the interval.
29013 * @returns {number} Clamped value.
29015 Spatial.prototype.clamp = function (value, min, max) {
29025 * Calculates the counter-clockwise angle from the first
29026 * vector (x1, y1)^T to the second (x2, y2)^T.
29028 * @param {number} x1 - X coordinate of first vector.
29029 * @param {number} y1 - Y coordinate of first vector.
29030 * @param {number} x2 - X coordinate of second vector.
29031 * @param {number} y2 - Y coordinate of second vector.
29032 * @returns {number} Counter clockwise angle between the vectors.
29034 Spatial.prototype.angleBetweenVector2 = function (x1, y1, x2, y2) {
29035 var angle = Math.atan2(y2, x2) - Math.atan2(y1, x1);
29036 return this.wrapAngle(angle);
29039 * Calculates the minimum (absolute) angle change for rotation
29040 * from one angle to another on the [-Pi, Pi] interval.
29042 * @param {number} angle1 - Start angle.
29043 * @param {number} angle2 - Destination angle.
29044 * @returns {number} Absolute angle change between angles.
29046 Spatial.prototype.angleDifference = function (angle1, angle2) {
29047 var angle = angle2 - angle1;
29048 return this.wrapAngle(angle);
29051 * Calculates the relative rotation angle between two
29052 * angle-axis vectors.
29054 * @param {number} rotation1 - First angle-axis vector.
29055 * @param {number} rotation2 - Second angle-axis vector.
29056 * @returns {number} Relative rotation angle.
29058 Spatial.prototype.relativeRotationAngle = function (rotation1, rotation2) {
29059 var R1T = this.rotationMatrix([-rotation1[0], -rotation1[1], -rotation1[2]]);
29060 var R2 = this.rotationMatrix(rotation2);
29061 var R = R1T.multiply(R2);
29062 var elements = R.elements;
29063 // from Tr(R) = 1 + 2*cos(theta)
29064 var theta = Math.acos((elements[0] + elements[5] + elements[10] - 1) / 2);
29068 * Calculates the angle from a vector to a plane.
29070 * @param {Array<number>} vector - The vector.
29071 * @param {Array<number>} planeNormal - Normal of the plane.
29072 * @returns {number} Angle from between plane and vector.
29074 Spatial.prototype.angleToPlane = function (vector, planeNormal) {
29075 var v = new THREE.Vector3().fromArray(vector);
29076 var norm = v.length();
29077 if (norm < this._epsilon) {
29080 var projection = v.dot(new THREE.Vector3().fromArray(planeNormal));
29081 return Math.asin(projection / norm);
29084 * Calculates the distance between two coordinates
29085 * (latitude longitude pairs) in meters according to
29086 * the haversine formula.
29088 * @param {number} lat1 - Latitude of the first coordinate.
29089 * @param {number} lon1 - Longitude of the first coordinate.
29090 * @param {number} lat2 - Latitude of the second coordinate.
29091 * @param {number} lon2 - Longitude of the second coordinate.
29092 * @returns {number} Distance between lat lon positions.
29094 Spatial.prototype.distanceFromLatLon = function (lat1, lon1, lat2, lon2) {
29096 var dLat = this.degToRad(lat2 - lat1);
29097 var dLon = this.degToRad(lon2 - lon1);
29098 var hav = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
29099 Math.cos(lat1) * Math.cos(lat2) *
29100 Math.sin(dLon / 2) * Math.sin(dLon / 2);
29101 var d = 2 * r * Math.atan2(Math.sqrt(hav), Math.sqrt(1 - hav));
29106 exports.Spatial = Spatial;
29107 Object.defineProperty(exports, "__esModule", { value: true });
29108 exports.default = Spatial;
29110 },{"three":174}],303:[function(require,module,exports){
29111 /// <reference path="../../typings/index.d.ts" />
29113 var THREE = require("three");
29117 * @classdesc Class used for calculating coordinate transformations
29120 var Transform = (function () {
29122 * Create a new transform instance.
29123 * @param {Node} apiNavImIm - Node properties.
29124 * @param {HTMLImageElement} image - Node image.
29125 * @param {Array<number>} translation - Node translation vector in three dimensions.
29127 function Transform(node, image, translation) {
29128 this._orientation = this._getValue(node.orientation, 1);
29129 var imageWidth = image != null ? image.width : 4;
29130 var imageHeight = image != null ? image.height : 3;
29131 var keepOrientation = this._orientation < 5;
29132 this._width = this._getValue(node.width, keepOrientation ? imageWidth : imageHeight);
29133 this._height = this._getValue(node.height, keepOrientation ? imageHeight : imageWidth);
29134 this._basicAspect = keepOrientation ?
29135 this._width / this._height :
29136 this._height / this._width;
29137 this._basicWidth = keepOrientation ? node.width : node.height;
29138 this._basicHeight = keepOrientation ? node.height : node.width;
29139 this._focal = this._getValue(node.focal, 1);
29140 this._scale = this._getValue(node.scale, 0);
29141 this._gpano = node.gpano != null ? node.gpano : null;
29142 this._rt = this._getRt(node.rotation, translation);
29143 this._srt = this._getSrt(this._rt, this._scale);
29145 Object.defineProperty(Transform.prototype, "basicAspect", {
29147 * Get basic aspect.
29148 * @returns {number} The orientation adjusted aspect ratio.
29151 return this._basicAspect;
29156 Object.defineProperty(Transform.prototype, "basicHeight", {
29158 * Get basic height.
29160 * @description Does not fall back to node image height but
29161 * uses original value from API so can be faulty.
29163 * @returns {number} The height of the basic version image
29164 * (adjusted for orientation).
29167 return this._basicHeight;
29172 Object.defineProperty(Transform.prototype, "basicWidth", {
29176 * @description Does not fall back to node image width but
29177 * uses original value from API so can be faulty.
29179 * @returns {number} The width of the basic version image
29180 * (adjusted for orientation).
29183 return this._basicWidth;
29188 Object.defineProperty(Transform.prototype, "focal", {
29191 * @returns {number} The node focal length.
29194 return this._focal;
29199 Object.defineProperty(Transform.prototype, "fullPano", {
29203 * @returns {boolean} Value indicating whether the node is a complete
29207 return this._gpano != null &&
29208 this._gpano.CroppedAreaLeftPixels === 0 &&
29209 this._gpano.CroppedAreaTopPixels === 0 &&
29210 this._gpano.CroppedAreaImageWidthPixels === this._gpano.FullPanoWidthPixels &&
29211 this._gpano.CroppedAreaImageHeightPixels === this._gpano.FullPanoHeightPixels;
29216 Object.defineProperty(Transform.prototype, "gpano", {
29219 * @returns {number} The node gpano information.
29222 return this._gpano;
29227 Object.defineProperty(Transform.prototype, "height", {
29231 * @description Falls back to the node image height if
29232 * the API data is faulty.
29234 * @returns {number} The orientation adjusted image height.
29237 return this._height;
29242 Object.defineProperty(Transform.prototype, "orientation", {
29245 * @returns {number} The image orientation.
29248 return this._orientation;
29253 Object.defineProperty(Transform.prototype, "rt", {
29256 * @returns {THREE.Matrix4} The extrinsic camera matrix.
29264 Object.defineProperty(Transform.prototype, "srt", {
29267 * @returns {THREE.Matrix4} The scaled extrinsic camera matrix.
29275 Object.defineProperty(Transform.prototype, "scale", {
29278 * @returns {number} The node atomic reconstruction scale.
29281 return this._scale;
29286 Object.defineProperty(Transform.prototype, "width", {
29290 * @description Falls back to the node image width if
29291 * the API data is faulty.
29293 * @returns {number} The orientation adjusted image width.
29296 return this._width;
29302 * Calculate the up vector for the node transform.
29304 * @returns {THREE.Vector3} Normalized and orientation adjusted up vector.
29306 Transform.prototype.upVector = function () {
29307 var rte = this._rt.elements;
29308 switch (this._orientation) {
29310 return new THREE.Vector3(-rte[1], -rte[5], -rte[9]);
29312 return new THREE.Vector3(rte[1], rte[5], rte[9]);
29314 return new THREE.Vector3(-rte[0], -rte[4], -rte[8]);
29316 return new THREE.Vector3(rte[0], rte[4], rte[8]);
29318 return new THREE.Vector3(-rte[1], -rte[5], -rte[9]);
29322 * Calculate projector matrix for projecting 3D points to texture map
29323 * coordinates (u and v).
29325 * @returns {THREE.Matrix4} Projection matrix for 3D point to texture
29326 * map coordinate calculations.
29328 Transform.prototype.projectorMatrix = function () {
29329 var projector = this._normalizedToTextureMatrix();
29330 var f = this._focal;
29331 var projection = new THREE.Matrix4().set(f, 0, 0, 0, 0, f, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0);
29332 projector.multiply(projection);
29333 projector.multiply(this._rt);
29337 * Project 3D world coordinates to basic coordinates.
29339 * @param {Array<number>} point3d - 3D world coordinates.
29340 * @return {Array<number>} 2D basic coordinates.
29342 Transform.prototype.projectBasic = function (point3d) {
29343 var sfm = this.projectSfM(point3d);
29344 return this._sfmToBasic(sfm);
29347 * Unproject basic coordinates to 3D world coordinates.
29349 * @param {Array<number>} basic - 2D basic coordinates.
29350 * @param {Array<number>} distance - Depth to unproject from camera center.
29351 * @returns {Array<number>} Unprojected 3D world coordinates.
29353 Transform.prototype.unprojectBasic = function (basic, distance) {
29354 var sfm = this._basicToSfm(basic);
29355 return this.unprojectSfM(sfm, distance);
29358 * Project 3D world coordinates to SfM coordinates.
29360 * @param {Array<number>} point3d - 3D world coordinates.
29361 * @return {Array<number>} 2D SfM coordinates.
29363 Transform.prototype.projectSfM = function (point3d) {
29364 var v = new THREE.Vector4(point3d[0], point3d[1], point3d[2], 1);
29365 v.applyMatrix4(this._rt);
29366 return this._bearingToSfm([v.x, v.y, v.z]);
29369 * Unproject SfM coordinates to a 3D world coordinates.
29371 * @param {Array<number>} sfm - 2D SfM coordinates.
29372 * @param {Array<number>} distance - Depth to unproject from camera center.
29373 * @returns {Array<number>} Unprojected 3D world coordinates.
29375 Transform.prototype.unprojectSfM = function (sfm, distance) {
29376 var bearing = this._sfmToBearing(sfm);
29377 var v = new THREE.Vector4(distance * bearing[0], distance * bearing[1], distance * bearing[2], 1);
29378 v.applyMatrix4(new THREE.Matrix4().getInverse(this._rt));
29379 return [v.x / v.w, v.y / v.w, v.z / v.w];
29382 * Transform SfM coordinates to bearing vector (3D cartesian
29383 * coordinates on the unit sphere).
29385 * @param {Array<number>} sfm - 2D SfM coordinates.
29386 * @returns {Array<number>} Bearing vector (3D cartesian coordinates
29387 * on the unit sphere).
29389 Transform.prototype._sfmToBearing = function (sfm) {
29390 if (this._fullPano()) {
29391 var lon = sfm[0] * 2 * Math.PI;
29392 var lat = -sfm[1] * 2 * Math.PI;
29393 var x = Math.cos(lat) * Math.sin(lon);
29394 var y = -Math.sin(lat);
29395 var z = Math.cos(lat) * Math.cos(lon);
29398 else if (this._gpano) {
29399 var size = Math.max(this.gpano.CroppedAreaImageWidthPixels, this.gpano.CroppedAreaImageHeightPixels);
29400 var fullPanoPixel = [
29401 sfm[0] * size + this.gpano.CroppedAreaImageWidthPixels / 2 + this.gpano.CroppedAreaLeftPixels,
29402 sfm[1] * size + this.gpano.CroppedAreaImageHeightPixels / 2 + this.gpano.CroppedAreaTopPixels,
29404 var lon = 2 * Math.PI * (fullPanoPixel[0] / this.gpano.FullPanoWidthPixels - 0.5);
29405 var lat = -Math.PI * (fullPanoPixel[1] / this.gpano.FullPanoHeightPixels - 0.5);
29406 var x = Math.cos(lat) * Math.sin(lon);
29407 var y = -Math.sin(lat);
29408 var z = Math.cos(lat) * Math.cos(lon);
29412 var v = new THREE.Vector3(sfm[0], sfm[1], this._focal);
29414 return [v.x, v.y, v.z];
29418 * Transform bearing vector (3D cartesian coordiantes on the unit sphere) to
29421 * @param {Array<number>} bearing - Bearing vector (3D cartesian coordinates on the
29423 * @returns {Array<number>} 2D SfM coordinates.
29425 Transform.prototype._bearingToSfm = function (bearing) {
29426 if (this._fullPano()) {
29427 var x = bearing[0];
29428 var y = bearing[1];
29429 var z = bearing[2];
29430 var lon = Math.atan2(x, z);
29431 var lat = Math.atan2(-y, Math.sqrt(x * x + z * z));
29432 return [lon / (2 * Math.PI), -lat / (2 * Math.PI)];
29434 else if (this._gpano) {
29435 var x = bearing[0];
29436 var y = bearing[1];
29437 var z = bearing[2];
29438 var lon = Math.atan2(x, z);
29439 var lat = Math.atan2(-y, Math.sqrt(x * x + z * z));
29440 var fullPanoPixel = [
29441 (lon / (2 * Math.PI) + 0.5) * this.gpano.FullPanoWidthPixels,
29442 (-lat / Math.PI + 0.5) * this.gpano.FullPanoHeightPixels,
29444 var size = Math.max(this.gpano.CroppedAreaImageWidthPixels, this.gpano.CroppedAreaImageHeightPixels);
29446 (fullPanoPixel[0] - this.gpano.CroppedAreaLeftPixels - this.gpano.CroppedAreaImageWidthPixels / 2) / size,
29447 (fullPanoPixel[1] - this.gpano.CroppedAreaTopPixels - this.gpano.CroppedAreaImageHeightPixels / 2) / size,
29451 if (bearing[2] > 0) {
29453 bearing[0] * this._focal / bearing[2],
29454 bearing[1] * this._focal / bearing[2],
29459 bearing[0] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,
29460 bearing[1] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,
29466 * Convert basic coordinates to SfM coordinates.
29468 * @param {Array<number>} basic - 2D basic coordinates.
29469 * @returns {Array<number>} 2D SfM coordinates.
29471 Transform.prototype._basicToSfm = function (basic) {
29474 switch (this._orientation) {
29476 rotatedX = basic[0];
29477 rotatedY = basic[1];
29480 rotatedX = 1 - basic[0];
29481 rotatedY = 1 - basic[1];
29484 rotatedX = basic[1];
29485 rotatedY = 1 - basic[0];
29488 rotatedX = 1 - basic[1];
29489 rotatedY = basic[0];
29492 rotatedX = basic[0];
29493 rotatedY = basic[1];
29496 var w = this._width;
29497 var h = this._height;
29498 var s = Math.max(w, h);
29499 var sfmX = rotatedX * w / s - w / s / 2;
29500 var sfmY = rotatedY * h / s - h / s / 2;
29501 return [sfmX, sfmY];
29504 * Convert SfM coordinates to basic coordinates.
29506 * @param {Array<number>} sfm - 2D SfM coordinates.
29507 * @returns {Array<number>} 2D basic coordinates.
29509 Transform.prototype._sfmToBasic = function (sfm) {
29510 var w = this._width;
29511 var h = this._height;
29512 var s = Math.max(w, h);
29513 var rotatedX = (sfm[0] + w / s / 2) / w * s;
29514 var rotatedY = (sfm[1] + h / s / 2) / h * s;
29517 switch (this._orientation) {
29523 basicX = 1 - rotatedX;
29524 basicY = 1 - rotatedY;
29527 basicX = 1 - rotatedY;
29532 basicY = 1 - rotatedX;
29539 return [basicX, basicY];
29542 * Determines if the gpano information indicates a full panorama.
29544 * @returns {boolean} Value determining if the gpano information indicates
29547 Transform.prototype._fullPano = function () {
29548 return this.gpano != null &&
29549 this.gpano.CroppedAreaLeftPixels === 0 &&
29550 this.gpano.CroppedAreaTopPixels === 0 &&
29551 this.gpano.CroppedAreaImageWidthPixels === this.gpano.FullPanoWidthPixels &&
29552 this.gpano.CroppedAreaImageHeightPixels === this.gpano.FullPanoHeightPixels;
29555 * Checks a value and returns it if it exists and is larger than 0.
29556 * Fallbacks if it is null.
29558 * @param {number} value - Value to check.
29559 * @param {number} fallback - Value to fall back to.
29560 * @returns {number} The value or its fallback value if it is not defined or negative.
29562 Transform.prototype._getValue = function (value, fallback) {
29563 return value != null && value > 0 ? value : fallback;
29566 * Creates the extrinsic camera matrix [ R | t ].
29568 * @param {Array<number>} rotation - Rotation vector in angle axis representation.
29569 * @param {Array<number>} translation - Translation vector.
29570 * @returns {THREE.Matrix4} Extrisic camera matrix.
29572 Transform.prototype._getRt = function (rotation, translation) {
29573 var axis = new THREE.Vector3(rotation[0], rotation[1], rotation[2]);
29574 var angle = axis.length();
29576 var rt = new THREE.Matrix4();
29577 rt.makeRotationAxis(axis, angle);
29578 rt.setPosition(new THREE.Vector3(translation[0], translation[1], translation[2]));
29582 * Calculates the scaled extrinsic camera matrix scale * [ R | t ].
29584 * @param {THREE.Matrix4} rt - Extrisic camera matrix.
29585 * @param {number} scale - Scale factor.
29586 * @returns {THREE.Matrix4} Scaled extrisic camera matrix.
29588 Transform.prototype._getSrt = function (rt, scale) {
29589 var srt = rt.clone();
29590 var elements = srt.elements;
29591 elements[12] = scale * elements[12];
29592 elements[13] = scale * elements[13];
29593 elements[14] = scale * elements[14];
29594 srt.scale(new THREE.Vector3(scale, scale, scale));
29598 * Calculate a transformation matrix from normalized coordinates for
29599 * texture map coordinates.
29601 * @returns {THREE.Matrix4} Normalized coordinates to texture map
29602 * coordinates transformation matrix.
29604 Transform.prototype._normalizedToTextureMatrix = function () {
29605 var size = Math.max(this._width, this._height);
29606 var w = size / this._width;
29607 var h = size / this._height;
29608 switch (this._orientation) {
29610 return new THREE.Matrix4().set(w, 0, 0, 0.5, 0, -h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);
29612 return new THREE.Matrix4().set(-w, 0, 0, 0.5, 0, h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);
29614 return new THREE.Matrix4().set(0, -h, 0, 0.5, -w, 0, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);
29616 return new THREE.Matrix4().set(0, h, 0, 0.5, w, 0, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);
29618 return new THREE.Matrix4().set(w, 0, 0, 0.5, 0, -h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);
29623 exports.Transform = Transform;
29625 },{"three":174}],304:[function(require,module,exports){
29626 /// <reference path="../../typings/index.d.ts" />
29628 var THREE = require("three");
29630 * @class ViewportCoords
29632 * @classdesc Provides methods for calculating 2D coordinate conversions
29633 * as well as 3D projection and unprojection.
29635 * Basic coordinates are 2D coordinates on the [0, 1] interval and
29636 * have the origin point, (0, 0), at the top left corner and the
29637 * maximum value, (1, 1), at the bottom right corner of the original
29640 * Viewport coordinates are 2D coordinates on the [-1, 1] interval and
29641 * have the origin point in the center. The bottom left corner point is
29642 * (-1, -1) and the top right corner point is (1, 1).
29644 * Canvas coordiantes are 2D pixel coordinates on the [0, canvasWidth] and
29645 * [0, canvasHeight] intervals. The origin point (0, 0) is in the top left
29646 * corner and the maximum value is (canvasWidth, canvasHeight) is in the
29647 * bottom right corner.
29649 * 3D coordinates are in the topocentric world reference frame.
29651 var ViewportCoords = (function () {
29652 function ViewportCoords() {
29653 this._unprojectDepth = 200;
29656 * Convert basic coordinates to canvas coordinates.
29658 * @description Transform origin and perspective camera position needs to be the
29659 * equal for reliable return value.
29661 * @param {number} basicX - Basic X coordinate.
29662 * @param {number} basicY - Basic Y coordinate.
29663 * @param {HTMLElement} container - The viewer container.
29664 * @param {Transform} transform - Transform of the node to unproject from.
29665 * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.
29666 * @returns {Array<number>} 2D canvas coordinates.
29668 ViewportCoords.prototype.basicToCanvas = function (basicX, basicY, container, transform, perspectiveCamera) {
29669 var point3d = transform.unprojectBasic([basicX, basicY], this._unprojectDepth);
29670 var canvas = this.projectToCanvas(point3d, container, perspectiveCamera);
29674 * Convert basic coordinates to viewport coordinates.
29676 * @description Transform origin and perspective camera position needs to be the
29677 * equal for reliable return value.
29679 * @param {number} basicX - Basic X coordinate.
29680 * @param {number} basicY - Basic Y coordinate.
29681 * @param {Transform} transform - Transform of the node to unproject from.
29682 * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.
29683 * @returns {Array<number>} 2D viewport coordinates.
29685 ViewportCoords.prototype.basicToViewport = function (basicX, basicY, transform, perspectiveCamera) {
29686 var point3d = transform.unprojectBasic([basicX, basicY], this._unprojectDepth);
29687 var viewport = this.projectToViewport(point3d, perspectiveCamera);
29691 * Get canvas pixel position from event.
29693 * @param {Event} event - Event containing clientX and clientY properties.
29694 * @param {HTMLElement} element - HTML element.
29695 * @returns {Array<number>} 2D canvas coordinates.
29697 ViewportCoords.prototype.canvasPosition = function (event, element) {
29698 var clientRect = element.getBoundingClientRect();
29699 var canvasX = event.clientX - clientRect.left - element.clientLeft;
29700 var canvasY = event.clientY - clientRect.top - element.clientTop;
29701 return [canvasX, canvasY];
29704 * Convert canvas coordinates to basic coordinates.
29706 * @description Transform origin and perspective camera position needs to be the
29707 * equal for reliable return value.
29709 * @param {number} canvasX - Canvas X coordinate.
29710 * @param {number} canvasY - Canvas Y coordinate.
29711 * @param {HTMLElement} container - The viewer container.
29712 * @param {Transform} transform - Transform of the node to unproject from.
29713 * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.
29714 * @returns {Array<number>} 2D basic coordinates.
29716 ViewportCoords.prototype.canvasToBasic = function (canvasX, canvasY, container, transform, perspectiveCamera) {
29717 var point3d = this.unprojectFromCanvas(canvasX, canvasY, container, perspectiveCamera)
29719 var basic = transform.projectBasic(point3d);
29723 * Convert canvas coordinates to viewport coordinates.
29725 * @param {number} canvasX - Canvas X coordinate.
29726 * @param {number} canvasY - Canvas Y coordinate.
29727 * @param {HTMLElement} container - The viewer container.
29728 * @returns {Array<number>} 2D viewport coordinates.
29730 ViewportCoords.prototype.canvasToViewport = function (canvasX, canvasY, container) {
29731 var _a = this.containerToCanvas(container), canvasWidth = _a[0], canvasHeight = _a[1];
29732 var viewportX = 2 * canvasX / canvasWidth - 1;
29733 var viewportY = 1 - 2 * canvasY / canvasHeight;
29734 return [viewportX, viewportY];
29737 * Determines the width and height of the container in canvas coordinates.
29739 * @param {HTMLElement} container - The viewer container.
29740 * @returns {Array<number>} 2D canvas coordinates.
29742 ViewportCoords.prototype.containerToCanvas = function (container) {
29743 return [container.offsetWidth, container.offsetHeight];
29746 * Determine basic distances from image to canvas corners.
29748 * @description Transform origin and perspective camera position needs to be the
29749 * equal for reliable return value.
29751 * Determines the smallest basic distance for every side of the canvas.
29753 * @param {Transform} transform - Transform of the node to unproject from.
29754 * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.
29755 * @returns {Array<number>} Array of basic distances as [top, right, bottom, left].
29757 ViewportCoords.prototype.getBasicDistances = function (transform, perspectiveCamera) {
29758 var topLeftBasic = this.viewportToBasic(-1, 1, transform, perspectiveCamera);
29759 var topRightBasic = this.viewportToBasic(1, 1, transform, perspectiveCamera);
29760 var bottomRightBasic = this.viewportToBasic(1, -1, transform, perspectiveCamera);
29761 var bottomLeftBasic = this.viewportToBasic(-1, -1, transform, perspectiveCamera);
29762 var topBasicDistance = 0;
29763 var rightBasicDistance = 0;
29764 var bottomBasicDistance = 0;
29765 var leftBasicDistance = 0;
29766 if (topLeftBasic[1] < 0 && topRightBasic[1] < 0) {
29767 topBasicDistance = topLeftBasic[1] > topRightBasic[1] ?
29771 if (topRightBasic[0] > 1 && bottomRightBasic[0] > 1) {
29772 rightBasicDistance = topRightBasic[0] < bottomRightBasic[0] ?
29773 topRightBasic[0] - 1 :
29774 bottomRightBasic[0] - 1;
29776 if (bottomRightBasic[1] > 1 && bottomLeftBasic[1] > 1) {
29777 bottomBasicDistance = bottomRightBasic[1] < bottomLeftBasic[1] ?
29778 bottomRightBasic[1] - 1 :
29779 bottomLeftBasic[1] - 1;
29781 if (bottomLeftBasic[0] < 0 && topLeftBasic[0] < 0) {
29782 leftBasicDistance = bottomLeftBasic[0] > topLeftBasic[0] ?
29783 -bottomLeftBasic[0] :
29786 return [topBasicDistance, rightBasicDistance, bottomBasicDistance, leftBasicDistance];
29789 * Determine pixel distances from image to canvas corners.
29791 * @description Transform origin and perspective camera position needs to be the
29792 * equal for reliable return value.
29794 * Determines the smallest pixel distance for every side of the canvas.
29796 * @param {HTMLElement} container - The viewer container.
29797 * @param {Transform} transform - Transform of the node to unproject from.
29798 * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.
29799 * @returns {Array<number>} Array of pixel distances as [top, right, bottom, left].
29801 ViewportCoords.prototype.getPixelDistances = function (container, transform, perspectiveCamera) {
29802 var topLeftBasic = this.viewportToBasic(-1, 1, transform, perspectiveCamera);
29803 var topRightBasic = this.viewportToBasic(1, 1, transform, perspectiveCamera);
29804 var bottomRightBasic = this.viewportToBasic(1, -1, transform, perspectiveCamera);
29805 var bottomLeftBasic = this.viewportToBasic(-1, -1, transform, perspectiveCamera);
29806 var topPixelDistance = 0;
29807 var rightPixelDistance = 0;
29808 var bottomPixelDistance = 0;
29809 var leftPixelDistance = 0;
29810 var _a = this.containerToCanvas(container), canvasWidth = _a[0], canvasHeight = _a[1];
29811 if (topLeftBasic[1] < 0 && topRightBasic[1] < 0) {
29812 var basicX = topLeftBasic[1] > topRightBasic[1] ?
29815 var canvas = this.basicToCanvas(basicX, 0, container, transform, perspectiveCamera);
29816 topPixelDistance = canvas[1] > 0 ? canvas[1] : 0;
29818 if (topRightBasic[0] > 1 && bottomRightBasic[0] > 1) {
29819 var basicY = topRightBasic[0] < bottomRightBasic[0] ?
29821 bottomRightBasic[1];
29822 var canvas = this.basicToCanvas(1, basicY, container, transform, perspectiveCamera);
29823 rightPixelDistance = canvas[0] < canvasWidth ? canvasWidth - canvas[0] : 0;
29825 if (bottomRightBasic[1] > 1 && bottomLeftBasic[1] > 1) {
29826 var basicX = bottomRightBasic[1] < bottomLeftBasic[1] ?
29827 bottomRightBasic[0] :
29828 bottomLeftBasic[0];
29829 var canvas = this.basicToCanvas(basicX, 1, container, transform, perspectiveCamera);
29830 bottomPixelDistance = canvas[1] < canvasHeight ? canvasHeight - canvas[1] : 0;
29832 if (bottomLeftBasic[0] < 0 && topLeftBasic[0] < 0) {
29833 var basicY = bottomLeftBasic[0] > topLeftBasic[0] ?
29834 bottomLeftBasic[1] :
29836 var canvas = this.basicToCanvas(0, basicY, container, transform, perspectiveCamera);
29837 leftPixelDistance = canvas[0] > 0 ? canvas[0] : 0;
29839 return [topPixelDistance, rightPixelDistance, bottomPixelDistance, leftPixelDistance];
29842 * Determine if an event occured inside an element.
29844 * @param {Event} event - Event containing clientX and clientY properties.
29845 * @param {HTMLElement} element - HTML element.
29846 * @returns {boolean} Value indicating if the event occured inside the element or not.
29848 ViewportCoords.prototype.insideElement = function (event, element) {
29849 var clientRect = element.getBoundingClientRect();
29850 var minX = clientRect.left + element.clientLeft;
29851 var maxX = minX + element.clientWidth;
29852 var minY = clientRect.top + element.clientTop;
29853 var maxY = minY + element.clientHeight;
29854 return event.clientX > minX &&
29855 event.clientX < maxX &&
29856 event.clientY > minY &&
29857 event.clientY < maxY;
29860 * Project 3D world coordinates to canvas coordinates.
29862 * @param {Array<number>} point3D - 3D world coordinates.
29863 * @param {HTMLElement} container - The viewer container.
29864 * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.
29865 * @returns {Array<number>} 2D canvas coordinates.
29867 ViewportCoords.prototype.projectToCanvas = function (point3d, container, perspectiveCamera) {
29868 var viewport = this.projectToViewport(point3d, perspectiveCamera);
29869 var canvas = this.viewportToCanvas(viewport[0], viewport[1], container);
29873 * Project 3D world coordinates to viewport coordinates.
29875 * @param {Array<number>} point3D - 3D world coordinates.
29876 * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.
29877 * @returns {Array<number>} 2D viewport coordinates.
29879 ViewportCoords.prototype.projectToViewport = function (point3d, perspectiveCamera) {
29880 var viewport = new THREE.Vector3(point3d[0], point3d[1], point3d[2])
29881 .project(perspectiveCamera);
29882 return [viewport.x, viewport.y];
29885 * Uproject canvas coordinates to 3D world coordinates.
29887 * @param {number} canvasX - Canvas X coordinate.
29888 * @param {number} canvasY - Canvas Y coordinate.
29889 * @param {HTMLElement} container - The viewer container.
29890 * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.
29891 * @returns {Array<number>} 3D world coordinates.
29893 ViewportCoords.prototype.unprojectFromCanvas = function (canvasX, canvasY, container, perspectiveCamera) {
29894 var viewport = this.canvasToViewport(canvasX, canvasY, container);
29895 var point3d = this.unprojectFromViewport(viewport[0], viewport[1], perspectiveCamera);
29899 * Unproject viewport coordinates to 3D world coordinates.
29901 * @param {number} viewportX - Viewport X coordinate.
29902 * @param {number} viewportY - Viewport Y coordinate.
29903 * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.
29904 * @returns {Array<number>} 3D world coordinates.
29906 ViewportCoords.prototype.unprojectFromViewport = function (viewportX, viewportY, perspectiveCamera) {
29907 var point3d = new THREE.Vector3(viewportX, viewportY, 1)
29908 .unproject(perspectiveCamera);
29912 * Convert viewport coordinates to basic coordinates.
29914 * @description Transform origin and perspective camera position needs to be the
29915 * equal for reliable return value.
29917 * @param {number} viewportX - Viewport X coordinate.
29918 * @param {number} viewportY - Viewport Y coordinate.
29919 * @param {Transform} transform - Transform of the node to unproject from.
29920 * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.
29921 * @returns {Array<number>} 2D basic coordinates.
29923 ViewportCoords.prototype.viewportToBasic = function (viewportX, viewportY, transform, perspectiveCamera) {
29924 var point3d = new THREE.Vector3(viewportX, viewportY, 1)
29925 .unproject(perspectiveCamera)
29927 var basic = transform.projectBasic(point3d);
29931 * Convert viewport coordinates to canvas coordinates.
29933 * @param {number} viewportX - Viewport X coordinate.
29934 * @param {number} viewportY - Viewport Y coordinate.
29935 * @param {HTMLElement} container - The viewer container.
29936 * @returns {Array<number>} 2D canvas coordinates.
29938 ViewportCoords.prototype.viewportToCanvas = function (viewportX, viewportY, container) {
29939 var _a = this.containerToCanvas(container), canvasWidth = _a[0], canvasHeight = _a[1];
29940 var canvasX = canvasWidth * (viewportX + 1) / 2;
29941 var canvasY = -canvasHeight * (viewportY - 1) / 2;
29942 return [canvasX, canvasY];
29944 return ViewportCoords;
29946 exports.ViewportCoords = ViewportCoords;
29947 Object.defineProperty(exports, "__esModule", { value: true });
29948 exports.default = ViewportCoords;
29950 },{"three":174}],305:[function(require,module,exports){
29955 * @classdesc Represents a class for creating node filters. Implementation and
29956 * definitions based on https://github.com/mapbox/feature-filter.
29958 var FilterCreator = (function () {
29959 function FilterCreator() {
29962 * Create a filter from a filter expression.
29964 * @description The following filters are supported:
29981 * @param {FilterExpression} filter - Comparison, set membership or combinding filter
29983 * @returns {FilterFunction} Function taking a node and returning a boolean that
29984 * indicates whether the node passed the test or not.
29986 FilterCreator.prototype.createFilter = function (filter) {
29987 return new Function("node", "return " + this._compile(filter) + ";");
29989 FilterCreator.prototype._compile = function (filter) {
29990 if (filter == null || filter.length <= 1) {
29993 var operator = filter[0];
29994 var operation = operator === "==" ? this._compileComparisonOp("===", filter[1], filter[2], false) :
29995 operator === "!=" ? this._compileComparisonOp("!==", filter[1], filter[2], false) :
29996 operator === ">" ||
29997 operator === ">=" ||
29998 operator === "<" ||
29999 operator === "<=" ? this._compileComparisonOp(operator, filter[1], filter[2], true) :
30000 operator === "in" ?
30001 this._compileInOp(filter[1], filter.slice(2)) :
30002 operator === "!in" ?
30003 this._compileNegation(this._compileInOp(filter[1], filter.slice(2))) :
30004 operator === "all" ? this._compileLogicalOp(filter.slice(1), "&&") :
30006 return "(" + operation + ")";
30008 FilterCreator.prototype._compare = function (a, b) {
30009 return a < b ? -1 : a > b ? 1 : 0;
30011 FilterCreator.prototype._compileComparisonOp = function (operator, property, value, checkType) {
30012 var left = this._compilePropertyReference(property);
30013 var right = JSON.stringify(value);
30014 return (checkType ? "typeof " + left + "===typeof " + right + "&&" : "") + left + operator + right;
30016 FilterCreator.prototype._compileInOp = function (property, values) {
30017 var compare = this._compare;
30018 var left = JSON.stringify(values.sort(compare));
30019 var right = this._compilePropertyReference(property);
30020 return left + ".indexOf(" + right + ")!==-1";
30022 FilterCreator.prototype._compileLogicalOp = function (filters, operator) {
30023 var compile = this._compile.bind(this);
30024 return filters.map(compile).join(operator);
30026 FilterCreator.prototype._compileNegation = function (expression) {
30027 return "!(" + expression + ")";
30029 FilterCreator.prototype._compilePropertyReference = function (property) {
30030 return "node[" + JSON.stringify(property) + "]";
30032 return FilterCreator;
30034 exports.FilterCreator = FilterCreator;
30035 Object.defineProperty(exports, "__esModule", { value: true });
30036 exports.default = FilterCreator;
30038 },{}],306:[function(require,module,exports){
30039 /// <reference path="../../typings/index.d.ts" />
30041 var rbush = require("rbush");
30042 var Subject_1 = require("rxjs/Subject");
30043 require("rxjs/add/observable/from");
30044 require("rxjs/add/operator/catch");
30045 require("rxjs/add/operator/do");
30046 require("rxjs/add/operator/finally");
30047 require("rxjs/add/operator/map");
30048 require("rxjs/add/operator/publish");
30049 var Edge_1 = require("../Edge");
30050 var Error_1 = require("../Error");
30051 var Graph_1 = require("../Graph");
30055 * @classdesc Represents a graph of nodes with edges.
30057 var Graph = (function () {
30059 * Create a new graph instance.
30061 * @param {APIv3} [apiV3] - API instance for retrieving data.
30062 * @param {rbush.RBush<NodeIndexItem>} [nodeIndex] - Node index for fast spatial retreival.
30063 * @param {GraphCalculator} [graphCalculator] - Instance for graph calculations.
30064 * @param {EdgeCalculator} [edgeCalculator] - Instance for edge calculations.
30065 * @param {FilterCreator} [filterCreator] - Instance for filter creation.
30066 * @param {IGraphConfiguration} [configuration] - Configuration struct.
30068 function Graph(apiV3, nodeIndex, graphCalculator, edgeCalculator, filterCreator, configuration) {
30069 this._apiV3 = apiV3;
30070 this._cachedNodes = {};
30071 this._cachedNodeTiles = {};
30072 this._cachedSpatialEdges = {};
30073 this._cachedTiles = {};
30074 this._cachingFill$ = {};
30075 this._cachingFull$ = {};
30076 this._cachingSequences$ = {};
30077 this._cachingSpatialArea$ = {};
30078 this._cachingTiles$ = {};
30079 this._changed$ = new Subject_1.Subject();
30080 this._defaultAlt = 2;
30081 this._edgeCalculator = edgeCalculator != null ? edgeCalculator : new Edge_1.EdgeCalculator();
30082 this._filterCreator = filterCreator != null ? filterCreator : new Graph_1.FilterCreator();
30083 this._filter = this._filterCreator.createFilter(undefined);
30084 this._graphCalculator = graphCalculator != null ? graphCalculator : new Graph_1.GraphCalculator();
30085 this._configuration = configuration != null ?
30089 maxUnusedNodes: 100,
30090 maxUnusedTiles: 20,
30093 this._nodeIndex = nodeIndex != null ? nodeIndex : rbush(16, [".lat", ".lon", ".lat", ".lon"]);
30094 this._nodeIndexTiles = {};
30095 this._nodeToTile = {};
30096 this._preStored = {};
30097 this._requiredNodeTiles = {};
30098 this._requiredSpatialArea = {};
30099 this._sequences = {};
30100 this._tilePrecision = 7;
30101 this._tileThreshold = 20;
30103 Object.defineProperty(Graph.prototype, "changed$", {
30107 * @returns {Observable<Graph>} Observable emitting
30108 * the graph every time it has changed.
30111 return this._changed$;
30117 * Retrieve and cache node fill properties.
30119 * @param {string} key - Key of node to fill.
30120 * @returns {Observable<Graph>} Observable emitting the graph
30121 * when the node has been updated.
30122 * @throws {GraphMapillaryError} When the operation is not valid on the
30125 Graph.prototype.cacheFill$ = function (key) {
30127 if (key in this._cachingFull$) {
30128 throw new Error_1.GraphMapillaryError("Cannot fill node while caching full (" + key + ").");
30130 if (!this.hasNode(key)) {
30131 throw new Error_1.GraphMapillaryError("Cannot fill node that does not exist in graph (" + key + ").");
30133 if (key in this._cachingFill$) {
30134 return this._cachingFill$[key];
30136 var node = this.getNode(key);
30138 throw new Error_1.GraphMapillaryError("Cannot fill node that is already full (" + key + ").");
30140 this._cachingFill$[key] = this._apiV3.imageByKeyFill$([key])
30141 .do(function (imageByKeyFill) {
30143 _this._makeFull(node, imageByKeyFill[key]);
30145 delete _this._cachingFill$[key];
30147 .map(function (imageByKeyFill) {
30150 .finally(function () {
30151 if (key in _this._cachingFill$) {
30152 delete _this._cachingFill$[key];
30154 _this._changed$.next(_this);
30158 return this._cachingFill$[key];
30161 * Retrieve and cache full node properties.
30163 * @param {string} key - Key of node to fill.
30164 * @returns {Observable<Graph>} Observable emitting the graph
30165 * when the node has been updated.
30166 * @throws {GraphMapillaryError} When the operation is not valid on the
30169 Graph.prototype.cacheFull$ = function (key) {
30171 if (key in this._cachingFull$) {
30172 return this._cachingFull$[key];
30174 if (this.hasNode(key)) {
30175 throw new Error_1.GraphMapillaryError("Cannot cache full node that already exist in graph (" + key + ").");
30177 this._cachingFull$[key] = this._apiV3.imageByKeyFull$([key])
30178 .do(function (imageByKeyFull) {
30179 var fn = imageByKeyFull[key];
30180 if (_this.hasNode(key)) {
30181 var node = _this.getNode(key);
30183 _this._makeFull(node, fn);
30187 if (fn.sequence == null || fn.sequence.key == null) {
30188 throw new Error_1.GraphMapillaryError("Node has no sequence (" + key + ").");
30190 var node = new Graph_1.Node(fn);
30191 _this._makeFull(node, fn);
30192 var h = _this._graphCalculator.encodeH(node.originalLatLon, _this._tilePrecision);
30193 _this._preStore(h, node);
30194 _this._setNode(node);
30195 delete _this._cachingFull$[key];
30198 .map(function (imageByKeyFull) {
30201 .finally(function () {
30202 if (key in _this._cachingFull$) {
30203 delete _this._cachingFull$[key];
30205 _this._changed$.next(_this);
30209 return this._cachingFull$[key];
30212 * Retrieve and cache a node sequence.
30214 * @param {string} key - Key of node for which to retrieve sequence.
30215 * @returns {Observable<Graph>} Observable emitting the graph
30216 * when the sequence has been retrieved.
30217 * @throws {GraphMapillaryError} When the operation is not valid on the
30220 Graph.prototype.cacheNodeSequence$ = function (key) {
30221 if (!this.hasNode(key)) {
30222 throw new Error_1.GraphMapillaryError("Cannot cache sequence edges of node that does not exist in graph (" + key + ").");
30224 var node = this.getNode(key);
30225 if (node.sequenceKey in this._sequences) {
30226 throw new Error_1.GraphMapillaryError("Sequence already cached (" + key + "), (" + node.sequenceKey + ").");
30228 return this._cacheSequence$(node.sequenceKey);
30231 * Retrieve and cache a sequence.
30233 * @param {string} sequenceKey - Key of sequence to cache.
30234 * @returns {Observable<Graph>} Observable emitting the graph
30235 * when the sequence has been retrieved.
30236 * @throws {GraphMapillaryError} When the operation is not valid on the
30239 Graph.prototype.cacheSequence$ = function (sequenceKey) {
30240 if (sequenceKey in this._sequences) {
30241 throw new Error_1.GraphMapillaryError("Sequence already cached (" + sequenceKey + ")");
30243 return this._cacheSequence$(sequenceKey);
30246 * Cache sequence edges for a node.
30248 * @param {string} key - Key of node.
30249 * @throws {GraphMapillaryError} When the operation is not valid on the
30252 Graph.prototype.cacheSequenceEdges = function (key) {
30253 var node = this.getNode(key);
30254 if (!(node.sequenceKey in this._sequences)) {
30255 throw new Error_1.GraphMapillaryError("Sequence is not cached (" + key + "), (" + node.sequenceKey + ")");
30257 var sequence = this._sequences[node.sequenceKey].sequence;
30258 var edges = this._edgeCalculator.computeSequenceEdges(node, sequence);
30259 node.cacheSequenceEdges(edges);
30262 * Retrieve and cache full nodes for a node spatial area.
30264 * @param {string} key - Key of node for which to retrieve sequence.
30265 * @returns {Observable<Graph>} Observable emitting the graph
30266 * when the nodes in the spatial area has been made full.
30267 * @throws {GraphMapillaryError} When the operation is not valid on the
30270 Graph.prototype.cacheSpatialArea$ = function (key) {
30272 if (!this.hasNode(key)) {
30273 throw new Error_1.GraphMapillaryError("Cannot cache spatial area of node that does not exist in graph (" + key + ").");
30275 if (key in this._cachedSpatialEdges) {
30276 throw new Error_1.GraphMapillaryError("Node already spatially cached (" + key + ").");
30278 if (!(key in this._requiredSpatialArea)) {
30279 throw new Error_1.GraphMapillaryError("Spatial area not determined (" + key + ").");
30281 var spatialArea = this._requiredSpatialArea[key];
30282 if (Object.keys(spatialArea.cacheNodes).length === 0) {
30283 throw new Error_1.GraphMapillaryError("Spatial nodes already cached (" + key + ").");
30285 if (key in this._cachingSpatialArea$) {
30286 return this._cachingSpatialArea$[key];
30289 while (spatialArea.cacheKeys.length > 0) {
30290 batches.push(spatialArea.cacheKeys.splice(0, 200));
30292 var batchesToCache = batches.length;
30293 var spatialNodes$ = [];
30294 var _loop_1 = function (batch) {
30295 var spatialNodeBatch$ = this_1._apiV3.imageByKeyFill$(batch)
30296 .do(function (imageByKeyFill) {
30297 for (var fillKey in imageByKeyFill) {
30298 if (!imageByKeyFill.hasOwnProperty(fillKey)) {
30301 var spatialNode = spatialArea.cacheNodes[fillKey];
30302 if (spatialNode.full) {
30303 delete spatialArea.cacheNodes[fillKey];
30306 var fillNode = imageByKeyFill[fillKey];
30307 _this._makeFull(spatialNode, fillNode);
30308 delete spatialArea.cacheNodes[fillKey];
30310 if (--batchesToCache === 0) {
30311 delete _this._cachingSpatialArea$[key];
30314 .map(function (imageByKeyFill) {
30317 .catch(function (error) {
30318 for (var _i = 0, batch_1 = batch; _i < batch_1.length; _i++) {
30319 var batchKey = batch_1[_i];
30320 if (batchKey in spatialArea.all) {
30321 delete spatialArea.all[batchKey];
30323 if (batchKey in spatialArea.cacheNodes) {
30324 delete spatialArea.cacheNodes[batchKey];
30327 if (--batchesToCache === 0) {
30328 delete _this._cachingSpatialArea$[key];
30332 .finally(function () {
30333 if (Object.keys(spatialArea.cacheNodes).length === 0) {
30334 _this._changed$.next(_this);
30339 spatialNodes$.push(spatialNodeBatch$);
30342 for (var _i = 0, batches_1 = batches; _i < batches_1.length; _i++) {
30343 var batch = batches_1[_i];
30346 this._cachingSpatialArea$[key] = spatialNodes$;
30347 return spatialNodes$;
30350 * Cache spatial edges for a node.
30352 * @param {string} key - Key of node.
30353 * @throws {GraphMapillaryError} When the operation is not valid on the
30356 Graph.prototype.cacheSpatialEdges = function (key) {
30357 if (key in this._cachedSpatialEdges) {
30358 throw new Error_1.GraphMapillaryError("Spatial edges already cached (" + key + ").");
30360 var node = this.getNode(key);
30361 var sequence = this._sequences[node.sequenceKey].sequence;
30362 var fallbackKeys = [];
30363 var prevKey = sequence.findPrevKey(node.key);
30364 if (prevKey != null) {
30365 fallbackKeys.push(prevKey);
30367 var nextKey = sequence.findNextKey(node.key);
30368 if (nextKey != null) {
30369 fallbackKeys.push(nextKey);
30371 var allSpatialNodes = this._requiredSpatialArea[key].all;
30372 var potentialNodes = [];
30373 var filter = this._filter;
30374 for (var spatialNodeKey in allSpatialNodes) {
30375 if (!allSpatialNodes.hasOwnProperty(spatialNodeKey)) {
30378 var spatialNode = allSpatialNodes[spatialNodeKey];
30379 if (filter(spatialNode)) {
30380 potentialNodes.push(spatialNode);
30383 var potentialEdges = this._edgeCalculator.getPotentialEdges(node, potentialNodes, fallbackKeys);
30384 var edges = this._edgeCalculator.computeStepEdges(node, potentialEdges, prevKey, nextKey);
30385 edges = edges.concat(this._edgeCalculator.computeTurnEdges(node, potentialEdges));
30386 edges = edges.concat(this._edgeCalculator.computePanoEdges(node, potentialEdges));
30387 edges = edges.concat(this._edgeCalculator.computePerspectiveToPanoEdges(node, potentialEdges));
30388 edges = edges.concat(this._edgeCalculator.computeSimilarEdges(node, potentialEdges));
30389 node.cacheSpatialEdges(edges);
30390 this._cachedSpatialEdges[key] = node;
30391 delete this._requiredSpatialArea[key];
30392 delete this._cachedNodeTiles[key];
30395 * Retrieve and cache geohash tiles for a node.
30397 * @param {string} key - Key of node for which to retrieve tiles.
30398 * @returns {Observable<Graph>} Observable emitting the graph
30399 * when the tiles required for the node has been cached.
30400 * @throws {GraphMapillaryError} When the operation is not valid on the
30403 Graph.prototype.cacheTiles$ = function (key) {
30405 if (key in this._cachedNodeTiles) {
30406 throw new Error_1.GraphMapillaryError("Tiles already cached (" + key + ").");
30408 if (key in this._cachedSpatialEdges) {
30409 throw new Error_1.GraphMapillaryError("Spatial edges already cached so tiles considered cached (" + key + ").");
30411 if (!(key in this._requiredNodeTiles)) {
30412 throw new Error_1.GraphMapillaryError("Tiles have not been determined (" + key + ").");
30414 var nodeTiles = this._requiredNodeTiles[key];
30415 if (nodeTiles.cache.length === 0 &&
30416 nodeTiles.caching.length === 0) {
30417 throw new Error_1.GraphMapillaryError("Tiles already cached (" + key + ").");
30419 if (!this.hasNode(key)) {
30420 throw new Error_1.GraphMapillaryError("Cannot cache tiles of node that does not exist in graph (" + key + ").");
30422 var hs = nodeTiles.cache.slice();
30423 nodeTiles.caching = this._requiredNodeTiles[key].caching.concat(hs);
30424 nodeTiles.cache = [];
30425 var cacheTiles$ = [];
30426 var _loop_2 = function (h) {
30427 var cacheTile$ = null;
30428 if (h in this_2._cachingTiles$) {
30429 cacheTile$ = this_2._cachingTiles$[h];
30432 cacheTile$ = this_2._apiV3.imagesByH$([h])
30433 .do(function (imagesByH) {
30434 var coreNodes = imagesByH[h];
30435 if (h in _this._cachedTiles) {
30438 _this._nodeIndexTiles[h] = [];
30439 _this._cachedTiles[h] = { accessed: new Date().getTime(), nodes: [] };
30440 var hCache = _this._cachedTiles[h].nodes;
30441 var preStored = _this._removeFromPreStore(h);
30442 for (var index in coreNodes) {
30443 if (!coreNodes.hasOwnProperty(index)) {
30446 var coreNode = coreNodes[index];
30447 if (coreNode == null) {
30450 if (coreNode.sequence == null ||
30451 coreNode.sequence.key == null) {
30452 console.warn("Sequence missing, discarding (" + coreNode.key + ")");
30455 if (preStored != null && coreNode.key in preStored) {
30456 var node_1 = preStored[coreNode.key];
30457 delete preStored[coreNode.key];
30458 hCache.push(node_1);
30459 var nodeIndexItem_1 = {
30460 lat: node_1.latLon.lat,
30461 lon: node_1.latLon.lon,
30464 _this._nodeIndex.insert(nodeIndexItem_1);
30465 _this._nodeIndexTiles[h].push(nodeIndexItem_1);
30466 _this._nodeToTile[node_1.key] = h;
30469 var node = new Graph_1.Node(coreNode);
30471 var nodeIndexItem = {
30472 lat: node.latLon.lat,
30473 lon: node.latLon.lon,
30476 _this._nodeIndex.insert(nodeIndexItem);
30477 _this._nodeIndexTiles[h].push(nodeIndexItem);
30478 _this._nodeToTile[node.key] = h;
30479 _this._setNode(node);
30481 delete _this._cachingTiles$[h];
30483 .map(function (imagesByH) {
30486 .catch(function (error) {
30487 delete _this._cachingTiles$[h];
30492 this_2._cachingTiles$[h] = cacheTile$;
30494 cacheTiles$.push(cacheTile$
30495 .do(function (graph) {
30496 var index = nodeTiles.caching.indexOf(h);
30498 nodeTiles.caching.splice(index, 1);
30500 if (nodeTiles.caching.length === 0 &&
30501 nodeTiles.cache.length === 0) {
30502 delete _this._requiredNodeTiles[key];
30503 _this._cachedNodeTiles[key] = true;
30506 .catch(function (error) {
30507 var index = nodeTiles.caching.indexOf(h);
30509 nodeTiles.caching.splice(index, 1);
30511 if (nodeTiles.caching.length === 0 &&
30512 nodeTiles.cache.length === 0) {
30513 delete _this._requiredNodeTiles[key];
30514 _this._cachedNodeTiles[key] = true;
30518 .finally(function () {
30519 _this._changed$.next(_this);
30525 for (var _i = 0, _a = nodeTiles.caching; _i < _a.length; _i++) {
30529 return cacheTiles$;
30532 * Initialize the cache for a node.
30534 * @param {string} key - Key of node.
30535 * @throws {GraphMapillaryError} When the operation is not valid on the
30538 Graph.prototype.initializeCache = function (key) {
30539 if (key in this._cachedNodes) {
30540 throw new Error_1.GraphMapillaryError("Node already in cache (" + key + ").");
30542 var node = this.getNode(key);
30543 node.initializeCache(new Graph_1.NodeCache());
30544 var accessed = new Date().getTime();
30545 this._cachedNodes[key] = { accessed: accessed, node: node };
30546 this._updateCachedTileAccess(key, accessed);
30549 * Get a value indicating if the graph is fill caching a node.
30551 * @param {string} key - Key of node.
30552 * @returns {boolean} Value indicating if the node is being fill cached.
30554 Graph.prototype.isCachingFill = function (key) {
30555 return key in this._cachingFill$;
30558 * Get a value indicating if the graph is fully caching a node.
30560 * @param {string} key - Key of node.
30561 * @returns {boolean} Value indicating if the node is being fully cached.
30563 Graph.prototype.isCachingFull = function (key) {
30564 return key in this._cachingFull$;
30567 * Get a value indicating if the graph is caching a sequence of a node.
30569 * @param {string} key - Key of node.
30570 * @returns {boolean} Value indicating if the sequence of a node is
30573 Graph.prototype.isCachingNodeSequence = function (key) {
30574 var node = this.getNode(key);
30575 return node.sequenceKey in this._cachingSequences$;
30578 * Get a value indicating if the graph is caching a sequence.
30580 * @param {string} sequenceKey - Key of sequence.
30581 * @returns {boolean} Value indicating if the sequence is
30584 Graph.prototype.isCachingSequence = function (sequenceKey) {
30585 return sequenceKey in this._cachingSequences$;
30588 * Get a value indicating if the graph is caching the tiles
30589 * required for calculating spatial edges of a node.
30591 * @param {string} key - Key of node.
30592 * @returns {boolean} Value indicating if the tiles of
30593 * a node are being cached.
30595 Graph.prototype.isCachingTiles = function (key) {
30596 return key in this._requiredNodeTiles &&
30597 this._requiredNodeTiles[key].cache.length === 0 &&
30598 this._requiredNodeTiles[key].caching.length > 0;
30601 * Get a value indicating if the cache has been initialized
30604 * @param {string} key - Key of node.
30605 * @returns {boolean} Value indicating if the cache has been
30606 * initialized for a node.
30608 Graph.prototype.hasInitializedCache = function (key) {
30609 return key in this._cachedNodes;
30612 * Get a value indicating if a node exist in the graph.
30614 * @param {string} key - Key of node.
30615 * @returns {boolean} Value indicating if a node exist in the graph.
30617 Graph.prototype.hasNode = function (key) {
30618 var accessed = new Date().getTime();
30619 this._updateCachedNodeAccess(key, accessed);
30620 this._updateCachedTileAccess(key, accessed);
30621 return key in this._nodes;
30624 * Get a value indicating if a node sequence exist in the graph.
30626 * @param {string} key - Key of node.
30627 * @returns {boolean} Value indicating if a node sequence exist
30630 Graph.prototype.hasNodeSequence = function (key) {
30631 var node = this.getNode(key);
30632 var sequenceKey = node.sequenceKey;
30633 var hasNodeSequence = sequenceKey in this._sequences;
30634 if (hasNodeSequence) {
30635 this._sequences[sequenceKey].accessed = new Date().getTime();
30637 return hasNodeSequence;
30640 * Get a value indicating if a sequence exist in the graph.
30642 * @param {string} sequenceKey - Key of sequence.
30643 * @returns {boolean} Value indicating if a sequence exist
30646 Graph.prototype.hasSequence = function (sequenceKey) {
30647 var hasSequence = sequenceKey in this._sequences;
30649 this._sequences[sequenceKey].accessed = new Date().getTime();
30651 return hasSequence;
30654 * Get a value indicating if the graph has fully cached
30655 * all nodes in the spatial area of a node.
30657 * @param {string} key - Key of node.
30658 * @returns {boolean} Value indicating if the spatial area
30659 * of a node has been cached.
30661 Graph.prototype.hasSpatialArea = function (key) {
30662 if (!this.hasNode(key)) {
30663 throw new Error_1.GraphMapillaryError("Spatial area nodes cannot be determined if node not in graph (" + key + ").");
30665 if (key in this._cachedSpatialEdges) {
30668 if (key in this._requiredSpatialArea) {
30669 return Object.keys(this._requiredSpatialArea[key].cacheNodes).length === 0;
30671 var node = this.getNode(key);
30672 var bbox = this._graphCalculator.boundingBoxCorners(node.latLon, this._tileThreshold);
30673 var spatialItems = this._nodeIndex.search({
30679 var spatialNodes = {
30684 for (var _i = 0, spatialItems_1 = spatialItems; _i < spatialItems_1.length; _i++) {
30685 var spatialItem = spatialItems_1[_i];
30686 spatialNodes.all[spatialItem.node.key] = spatialItem.node;
30687 if (!spatialItem.node.full) {
30688 spatialNodes.cacheKeys.push(spatialItem.node.key);
30689 spatialNodes.cacheNodes[spatialItem.node.key] = spatialItem.node;
30692 this._requiredSpatialArea[key] = spatialNodes;
30693 return spatialNodes.cacheKeys.length === 0;
30696 * Get a value indicating if the graph has a tiles required
30699 * @param {string} key - Key of node.
30700 * @returns {boolean} Value indicating if the the tiles required
30701 * by a node has been cached.
30703 Graph.prototype.hasTiles = function (key) {
30705 if (key in this._cachedNodeTiles) {
30708 if (key in this._cachedSpatialEdges) {
30711 if (!this.hasNode(key)) {
30712 throw new Error_1.GraphMapillaryError("Node does not exist in graph (" + key + ").");
30714 var nodeTiles = { cache: [], caching: [] };
30715 if (!(key in this._requiredNodeTiles)) {
30716 var node = this.getNode(key);
30717 nodeTiles.cache = this._graphCalculator
30718 .encodeHs(node.latLon, this._tilePrecision, this._tileThreshold)
30719 .filter(function (h) {
30720 return !(h in _this._cachedTiles);
30722 if (nodeTiles.cache.length > 0) {
30723 this._requiredNodeTiles[key] = nodeTiles;
30727 nodeTiles = this._requiredNodeTiles[key];
30729 return nodeTiles.cache.length === 0 && nodeTiles.caching.length === 0;
30734 * @param {string} key - Key of node.
30735 * @returns {Node} Retrieved node.
30737 Graph.prototype.getNode = function (key) {
30738 var accessed = new Date().getTime();
30739 this._updateCachedNodeAccess(key, accessed);
30740 this._updateCachedTileAccess(key, accessed);
30741 return this._nodes[key];
30746 * @param {string} sequenceKey - Key of sequence.
30747 * @returns {Node} Retrieved sequence.
30749 Graph.prototype.getSequence = function (sequenceKey) {
30750 var sequenceAccess = this._sequences[sequenceKey];
30751 sequenceAccess.accessed = new Date().getTime();
30752 return sequenceAccess.sequence;
30755 * Reset all spatial edges of the graph nodes.
30757 Graph.prototype.resetSpatialEdges = function () {
30758 var cachedKeys = Object.keys(this._cachedSpatialEdges);
30759 for (var _i = 0, cachedKeys_1 = cachedKeys; _i < cachedKeys_1.length; _i++) {
30760 var cachedKey = cachedKeys_1[_i];
30761 var node = this._cachedSpatialEdges[cachedKey];
30762 node.resetSpatialEdges();
30763 delete this._cachedSpatialEdges[cachedKey];
30767 * Reset the complete graph but keep the nodes corresponding
30768 * to the supplied keys. All other nodes will be disposed.
30770 * @param {Array<string>} keepKeys - Keys for nodes to keep
30771 * in graph after reset.
30773 Graph.prototype.reset = function (keepKeys) {
30775 for (var _i = 0, keepKeys_1 = keepKeys; _i < keepKeys_1.length; _i++) {
30776 var key = keepKeys_1[_i];
30777 if (!this.hasNode(key)) {
30778 throw new Error("Node does not exist " + key);
30780 var node = this.getNode(key);
30781 node.resetSequenceEdges();
30782 node.resetSpatialEdges();
30785 for (var _a = 0, _b = Object.keys(this._cachedNodes); _a < _b.length; _a++) {
30786 var cachedKey = _b[_a];
30787 if (keepKeys.indexOf(cachedKey) !== -1) {
30790 this._cachedNodes[cachedKey].node.dispose();
30791 delete this._cachedNodes[cachedKey];
30793 this._cachedNodeTiles = {};
30794 this._cachedSpatialEdges = {};
30795 this._cachedTiles = {};
30796 this._cachingFill$ = {};
30797 this._cachingFull$ = {};
30798 this._cachingSequences$ = {};
30799 this._cachingSpatialArea$ = {};
30800 this._cachingTiles$ = {};
30802 this._nodeToTile = {};
30803 this._preStored = {};
30804 for (var _c = 0, nodes_1 = nodes; _c < nodes_1.length; _c++) {
30805 var node = nodes_1[_c];
30806 this._nodes[node.key] = node;
30807 var h = this._graphCalculator.encodeH(node.originalLatLon, this._tilePrecision);
30808 this._preStore(h, node);
30810 this._requiredNodeTiles = {};
30811 this._requiredSpatialArea = {};
30812 this._sequences = {};
30813 this._nodeIndexTiles = {};
30814 this._nodeIndex.clear();
30817 * Set the spatial node filter.
30819 * @param {FilterExpression} filter - Filter expression to be applied
30820 * when calculating spatial edges.
30822 Graph.prototype.setFilter = function (filter) {
30823 this._filter = this._filterCreator.createFilter(filter);
30826 * Uncache the graph according to the graph configuration.
30828 * @description Uncaches unused tiles, unused nodes and
30829 * sequences according to the numbers specified in the
30830 * graph configuration. Sequences does not have a direct
30831 * reference to either tiles or nodes and may be uncached
30832 * even if they are related to the nodes that should be kept.
30834 * @param {Array<string>} keepKeys - Keys of nodes to keep in
30835 * graph unrelated to last access. Tiles related to those keys
30836 * will also be kept in graph.
30838 Graph.prototype.uncache = function (keepKeys) {
30839 var keysInUse = {};
30840 this._addNewKeys(keysInUse, this._cachingFull$);
30841 this._addNewKeys(keysInUse, this._cachingFill$);
30842 this._addNewKeys(keysInUse, this._cachingTiles$);
30843 this._addNewKeys(keysInUse, this._cachingSpatialArea$);
30844 this._addNewKeys(keysInUse, this._requiredNodeTiles);
30845 this._addNewKeys(keysInUse, this._requiredSpatialArea);
30846 for (var _i = 0, keepKeys_2 = keepKeys; _i < keepKeys_2.length; _i++) {
30847 var key = keepKeys_2[_i];
30848 if (key in keysInUse) {
30851 keysInUse[key] = true;
30854 for (var key in keysInUse) {
30855 if (!keysInUse.hasOwnProperty(key)) {
30858 var node = this._nodes[key];
30859 var nodeHs = this._graphCalculator.encodeHs(node.latLon);
30860 for (var _a = 0, nodeHs_1 = nodeHs; _a < nodeHs_1.length; _a++) {
30861 var nodeH = nodeHs_1[_a];
30862 if (!(nodeH in keepHs)) {
30863 keepHs[nodeH] = true;
30867 var potentialHs = [];
30868 for (var h in this._cachedTiles) {
30869 if (!this._cachedTiles.hasOwnProperty(h) || h in keepHs) {
30872 potentialHs.push([h, this._cachedTiles[h]]);
30874 var uncacheHs = potentialHs
30875 .sort(function (h1, h2) {
30876 return h2[1].accessed - h1[1].accessed;
30878 .slice(this._configuration.maxUnusedTiles)
30879 .map(function (h) {
30882 for (var _b = 0, uncacheHs_1 = uncacheHs; _b < uncacheHs_1.length; _b++) {
30883 var uncacheH = uncacheHs_1[_b];
30884 this._uncacheTile(uncacheH);
30886 var potentialNodes = [];
30887 for (var key in this._cachedNodes) {
30888 if (!this._cachedNodes.hasOwnProperty(key) || key in keysInUse) {
30891 potentialNodes.push(this._cachedNodes[key]);
30893 var uncacheNodes = potentialNodes
30894 .sort(function (n1, n2) {
30895 return n2.accessed - n1.accessed;
30897 .slice(this._configuration.maxUnusedNodes);
30898 for (var _c = 0, uncacheNodes_1 = uncacheNodes; _c < uncacheNodes_1.length; _c++) {
30899 var nodeAccess = uncacheNodes_1[_c];
30900 nodeAccess.node.uncache();
30901 var key = nodeAccess.node.key;
30902 delete this._cachedNodes[key];
30903 if (key in this._cachedNodeTiles) {
30904 delete this._cachedNodeTiles[key];
30906 if (key in this._cachedSpatialEdges) {
30907 delete this._cachedSpatialEdges[key];
30910 var potentialSequences = [];
30911 for (var sequenceKey in this._sequences) {
30912 if (!this._sequences.hasOwnProperty(sequenceKey) ||
30913 sequenceKey in this._cachingSequences$) {
30916 potentialSequences.push(this._sequences[sequenceKey]);
30918 var uncacheSequences = potentialSequences
30919 .sort(function (s1, s2) {
30920 return s2.accessed - s1.accessed;
30922 .slice(this._configuration.maxSequences);
30923 for (var _d = 0, uncacheSequences_1 = uncacheSequences; _d < uncacheSequences_1.length; _d++) {
30924 var sequenceAccess = uncacheSequences_1[_d];
30925 var sequenceKey = sequenceAccess.sequence.key;
30926 delete this._sequences[sequenceKey];
30927 sequenceAccess.sequence.dispose();
30930 Graph.prototype._addNewKeys = function (keys, dict) {
30931 for (var key in dict) {
30932 if (!dict.hasOwnProperty(key) || !this.hasNode(key)) {
30935 if (!(key in keys)) {
30940 Graph.prototype._cacheSequence$ = function (sequenceKey) {
30942 if (sequenceKey in this._cachingSequences$) {
30943 return this._cachingSequences$[sequenceKey];
30945 this._cachingSequences$[sequenceKey] = this._apiV3.sequenceByKey$([sequenceKey])
30946 .do(function (sequenceByKey) {
30947 if (!(sequenceKey in _this._sequences)) {
30948 _this._sequences[sequenceKey] = {
30949 accessed: new Date().getTime(),
30950 sequence: new Graph_1.Sequence(sequenceByKey[sequenceKey]),
30953 delete _this._cachingSequences$[sequenceKey];
30955 .map(function (sequenceByKey) {
30958 .finally(function () {
30959 if (sequenceKey in _this._cachingSequences$) {
30960 delete _this._cachingSequences$[sequenceKey];
30962 _this._changed$.next(_this);
30966 return this._cachingSequences$[sequenceKey];
30968 Graph.prototype._makeFull = function (node, fillNode) {
30969 if (fillNode.calt == null) {
30970 fillNode.calt = this._defaultAlt;
30972 if (fillNode.c_rotation == null) {
30973 fillNode.c_rotation = this._graphCalculator.rotationFromCompass(fillNode.ca, fillNode.orientation);
30975 node.makeFull(fillNode);
30977 Graph.prototype._preStore = function (h, node) {
30978 if (!(h in this._preStored)) {
30979 this._preStored[h] = {};
30981 this._preStored[h][node.key] = node;
30983 Graph.prototype._removeFromPreStore = function (h) {
30984 var preStored = null;
30985 if (h in this._preStored) {
30986 preStored = this._preStored[h];
30987 delete this._preStored[h];
30991 Graph.prototype._setNode = function (node) {
30992 var key = node.key;
30993 if (this.hasNode(key)) {
30994 throw new Error_1.GraphMapillaryError("Node already exist (" + key + ").");
30996 this._nodes[key] = node;
30998 Graph.prototype._uncacheTile = function (h) {
30999 for (var _i = 0, _a = this._cachedTiles[h].nodes; _i < _a.length; _i++) {
31001 var key = node.key;
31002 delete this._nodes[key];
31003 delete this._nodeToTile[key];
31004 if (key in this._cachedNodes) {
31005 delete this._cachedNodes[key];
31007 if (key in this._cachedNodeTiles) {
31008 delete this._cachedNodeTiles[key];
31010 if (key in this._cachedSpatialEdges) {
31011 delete this._cachedSpatialEdges[key];
31015 for (var _b = 0, _c = this._nodeIndexTiles[h]; _b < _c.length; _b++) {
31016 var nodeIndexItem = _c[_b];
31017 this._nodeIndex.remove(nodeIndexItem);
31019 delete this._nodeIndexTiles[h];
31020 delete this._cachedTiles[h];
31022 Graph.prototype._updateCachedTileAccess = function (key, accessed) {
31023 if (key in this._nodeToTile) {
31024 this._cachedTiles[this._nodeToTile[key]].accessed = accessed;
31027 Graph.prototype._updateCachedNodeAccess = function (key, accessed) {
31028 if (key in this._cachedNodes) {
31029 this._cachedNodes[key].accessed = accessed;
31034 exports.Graph = Graph;
31035 Object.defineProperty(exports, "__esModule", { value: true });
31036 exports.default = Graph;
31038 },{"../Edge":225,"../Error":226,"../Graph":228,"rbush":24,"rxjs/Subject":33,"rxjs/add/observable/from":40,"rxjs/add/operator/catch":51,"rxjs/add/operator/do":58,"rxjs/add/operator/finally":61,"rxjs/add/operator/map":64,"rxjs/add/operator/publish":70}],307:[function(require,module,exports){
31039 /// <reference path="../../typings/index.d.ts" />
31041 var geohash = require("latlon-geohash");
31042 var THREE = require("three");
31043 var Geo_1 = require("../Geo");
31044 var GeoHashDirections = (function () {
31045 function GeoHashDirections() {
31047 return GeoHashDirections;
31049 GeoHashDirections.n = "n";
31050 GeoHashDirections.nw = "nw";
31051 GeoHashDirections.w = "w";
31052 GeoHashDirections.sw = "sw";
31053 GeoHashDirections.s = "s";
31054 GeoHashDirections.se = "se";
31055 GeoHashDirections.e = "e";
31056 GeoHashDirections.ne = "ne";
31058 * @class GraphCalculator
31060 * @classdesc Represents a calculator for graph entities.
31062 var GraphCalculator = (function () {
31064 * Create a new graph calculator instance.
31066 * @param {GeoCoords} geoCoords - Geo coords instance.
31068 function GraphCalculator(geoCoords) {
31069 this._geoCoords = geoCoords != null ? geoCoords : new Geo_1.GeoCoords();
31072 * Encode the geohash tile for geodetic coordinates.
31074 * @param {ILatLon} latlon - Latitude and longitude to encode.
31075 * @param {number} precision - Precision of the encoding.
31077 * @returns {string} The geohash tile for the lat, lon and precision.
31079 GraphCalculator.prototype.encodeH = function (latLon, precision) {
31080 if (precision === void 0) { precision = 7; }
31081 return geohash.encode(latLon.lat, latLon.lon, precision);
31084 * Encode the geohash tiles within a threshold from a position
31085 * using Manhattan distance.
31087 * @param {ILatLon} latlon - Latitude and longitude to encode.
31088 * @param {number} precision - Precision of the encoding.
31089 * @param {number} threshold - Threshold of the encoding in meters.
31091 * @returns {string} The geohash tiles reachable within the threshold.
31093 GraphCalculator.prototype.encodeHs = function (latLon, precision, threshold) {
31094 if (precision === void 0) { precision = 7; }
31095 if (threshold === void 0) { threshold = 20; }
31096 var h = geohash.encode(latLon.lat, latLon.lon, precision);
31097 var bounds = geohash.bounds(h);
31098 var ne = bounds.ne;
31099 var sw = bounds.sw;
31100 var neighbours = geohash.neighbours(h);
31101 var bl = [0, 0, 0];
31102 var tr = this._geoCoords.geodeticToEnu(ne.lat, ne.lon, 0, sw.lat, sw.lon, 0);
31103 var position = this._geoCoords.geodeticToEnu(latLon.lat, latLon.lon, 0, sw.lat, sw.lon, 0);
31104 var left = position[0] - bl[0];
31105 var right = tr[0] - position[0];
31106 var bottom = position[1] - bl[1];
31107 var top = tr[1] - position[1];
31108 var l = left < threshold;
31109 var r = right < threshold;
31110 var b = bottom < threshold;
31111 var t = top < threshold;
31114 hs.push(neighbours[GeoHashDirections.n]);
31117 hs.push(neighbours[GeoHashDirections.nw]);
31120 hs.push(neighbours[GeoHashDirections.w]);
31123 hs.push(neighbours[GeoHashDirections.sw]);
31126 hs.push(neighbours[GeoHashDirections.s]);
31129 hs.push(neighbours[GeoHashDirections.se]);
31132 hs.push(neighbours[GeoHashDirections.e]);
31135 hs.push(neighbours[GeoHashDirections.ne]);
31140 * Get the bounding box corners for a circle with radius of a threshold
31141 * with center in a geodetic position.
31143 * @param {ILatLon} latlon - Latitude and longitude to encode.
31144 * @param {number} threshold - Threshold distance from the position in meters.
31146 * @returns {Array<ILatLon>} The south west and north east corners of the
31149 GraphCalculator.prototype.boundingBoxCorners = function (latLon, threshold) {
31150 var bl = this._geoCoords.enuToGeodetic(-threshold, -threshold, 0, latLon.lat, latLon.lon, 0);
31151 var tr = this._geoCoords.enuToGeodetic(threshold, threshold, 0, latLon.lat, latLon.lon, 0);
31153 { lat: bl[0], lon: bl[1] },
31154 { lat: tr[0], lon: tr[1] },
31158 * Convert a compass angle to an angle axis rotation vector.
31160 * @param {number} compassAngle - The compass angle in degrees.
31161 * @param {number} orientation - The orientation of the original image.
31163 * @returns {Array<number>} Angle axis rotation vector.
31165 GraphCalculator.prototype.rotationFromCompass = function (compassAngle, orientation) {
31169 switch (orientation) {
31188 var rz = new THREE.Matrix4().makeRotationZ(z);
31189 var euler = new THREE.Euler(x, y, compassAngle * Math.PI / 180, "XYZ");
31190 var re = new THREE.Matrix4().makeRotationFromEuler(euler);
31191 var rotation = new THREE.Vector4().setAxisAngleFromRotationMatrix(re.multiply(rz));
31192 return rotation.multiplyScalar(rotation.w).toArray().slice(0, 3);
31194 return GraphCalculator;
31196 exports.GraphCalculator = GraphCalculator;
31197 Object.defineProperty(exports, "__esModule", { value: true });
31198 exports.default = GraphCalculator;
31200 },{"../Geo":227,"latlon-geohash":20,"three":174}],308:[function(require,module,exports){
31202 var Observable_1 = require("rxjs/Observable");
31203 var Subject_1 = require("rxjs/Subject");
31204 require("rxjs/add/operator/catch");
31205 require("rxjs/add/operator/concat");
31206 require("rxjs/add/operator/do");
31207 require("rxjs/add/operator/expand");
31208 require("rxjs/add/operator/finally");
31209 require("rxjs/add/operator/first");
31210 require("rxjs/add/operator/last");
31211 require("rxjs/add/operator/map");
31212 require("rxjs/add/operator/mergeMap");
31213 require("rxjs/add/operator/publishReplay");
31215 * @class GraphService
31217 * @classdesc Represents a service for graph operations.
31219 var GraphService = (function () {
31221 * Create a new graph service instance.
31223 * @param {Graph} graph - Graph instance to be operated on.
31225 function GraphService(graph, imageLoadingService) {
31226 this._graph$ = Observable_1.Observable
31228 .concat(graph.changed$)
31231 this._graph$.subscribe(function () { });
31232 this._imageLoadingService = imageLoadingService;
31233 this._firstGraphSubjects$ = [];
31234 this._initializeCacheSubscriptions = [];
31235 this._sequenceSubscriptions = [];
31236 this._spatialSubscriptions = [];
31239 * Cache a node in the graph and retrieve it.
31241 * @description When called, the full properties of
31242 * the node are retrieved and the node cache is initialized.
31243 * After that the node assets are cached and the node
31244 * is emitted to the observable when.
31245 * In parallel to caching the node assets, the sequence and
31246 * spatial edges of the node are cached. For this, the sequence
31247 * of the node and the required tiles and spatial nodes are
31248 * retrieved. The sequence and spatial edges may be set before
31249 * or after the node is returned.
31251 * @param {string} key - Key of the node to cache.
31252 * @return {Observable<Node>} Observable emitting a single item,
31253 * the node, when it has been retrieved and its assets are cached.
31254 * @throws {Error} Propagates any IO node caching errors to the caller.
31256 GraphService.prototype.cacheNode$ = function (key) {
31258 var firstGraphSubject$ = new Subject_1.Subject();
31259 this._firstGraphSubjects$.push(firstGraphSubject$);
31260 var firstGraph$ = firstGraphSubject$
31263 var node$ = firstGraph$
31264 .map(function (graph) {
31265 return graph.getNode(key);
31267 .mergeMap(function (node) {
31268 return node.assetsCached ?
31269 Observable_1.Observable.of(node) :
31270 node.cacheAssets$();
31274 node$.subscribe(function (node) {
31275 _this._imageLoadingService.loadnode$.next(node);
31276 }, function (error) {
31277 console.error("Failed to cache node (" + key + ")", error);
31279 var initializeCacheSubscription = this._graph$
31281 .mergeMap(function (graph) {
31282 if (graph.isCachingFull(key) || !graph.hasNode(key)) {
31283 return graph.cacheFull$(key);
31285 if (graph.isCachingFill(key) || !graph.getNode(key).full) {
31286 return graph.cacheFill$(key);
31288 return Observable_1.Observable.of(graph);
31290 .do(function (graph) {
31291 if (!graph.hasInitializedCache(key)) {
31292 graph.initializeCache(key);
31295 .finally(function () {
31296 if (initializeCacheSubscription == null) {
31299 _this._removeFromArray(initializeCacheSubscription, _this._initializeCacheSubscriptions);
31300 _this._removeFromArray(firstGraphSubject$, _this._firstGraphSubjects$);
31302 .subscribe(function (graph) {
31303 firstGraphSubject$.next(graph);
31304 firstGraphSubject$.complete();
31305 }, function (error) {
31306 firstGraphSubject$.error(error);
31308 if (!initializeCacheSubscription.closed) {
31309 this._initializeCacheSubscriptions.push(initializeCacheSubscription);
31311 var sequenceSubscription = firstGraph$
31312 .mergeMap(function (graph) {
31313 if (graph.isCachingNodeSequence(key) || !graph.hasNodeSequence(key)) {
31314 return graph.cacheNodeSequence$(key);
31316 return Observable_1.Observable.of(graph);
31318 .do(function (graph) {
31319 if (!graph.getNode(key).sequenceEdges.cached) {
31320 graph.cacheSequenceEdges(key);
31323 .finally(function () {
31324 if (sequenceSubscription == null) {
31327 _this._removeFromArray(sequenceSubscription, _this._sequenceSubscriptions);
31329 .subscribe(function (graph) { return; }, function (error) {
31330 console.error("Failed to cache sequence edges (" + key + ").", error);
31332 if (!sequenceSubscription.closed) {
31333 this._sequenceSubscriptions.push(sequenceSubscription);
31335 var spatialSubscription = firstGraph$
31336 .expand(function (graph) {
31337 if (graph.hasTiles(key)) {
31338 return Observable_1.Observable.empty();
31340 return Observable_1.Observable
31341 .from(graph.cacheTiles$(key))
31342 .mergeMap(function (graph$) {
31344 .mergeMap(function (g) {
31345 if (g.isCachingTiles(key)) {
31346 return Observable_1.Observable.empty();
31348 return Observable_1.Observable.of(g);
31350 .catch(function (error, caught$) {
31351 console.error("Failed to cache tile data (" + key + ").", error);
31352 return Observable_1.Observable.empty();
31357 .mergeMap(function (graph) {
31358 if (graph.hasSpatialArea(key)) {
31359 return Observable_1.Observable.of(graph);
31361 return Observable_1.Observable
31362 .from(graph.cacheSpatialArea$(key))
31363 .mergeMap(function (graph$) {
31365 .catch(function (error, caught$) {
31366 console.error("Failed to cache spatial nodes (" + key + ").", error);
31367 return Observable_1.Observable.empty();
31372 .mergeMap(function (graph) {
31373 return graph.hasNodeSequence(key) ?
31374 Observable_1.Observable.of(graph) :
31375 graph.cacheNodeSequence$(key);
31377 .do(function (graph) {
31378 if (!graph.getNode(key).spatialEdges.cached) {
31379 graph.cacheSpatialEdges(key);
31382 .finally(function () {
31383 if (spatialSubscription == null) {
31386 _this._removeFromArray(spatialSubscription, _this._spatialSubscriptions);
31388 .subscribe(function (graph) { return; }, function (error) {
31389 console.error("Failed to cache spatial edges (" + key + ").", error);
31391 if (!spatialSubscription.closed) {
31392 this._spatialSubscriptions.push(spatialSubscription);
31395 .first(function (node) {
31396 return node.assetsCached;
31400 * Cache a sequence in the graph and retrieve it.
31402 * @param {string} sequenceKey - Sequence key.
31403 * @returns {Observable<Sequence>} Observable emitting a single item,
31404 * the sequence, when it has been retrieved and its assets are cached.
31405 * @throws {Error} Propagates any IO node caching errors to the caller.
31407 GraphService.prototype.cacheSequence$ = function (sequenceKey) {
31408 return this._graph$
31410 .mergeMap(function (graph) {
31411 if (graph.isCachingSequence(sequenceKey) || !graph.hasSequence(sequenceKey)) {
31412 return graph.cacheSequence$(sequenceKey);
31414 return Observable_1.Observable.of(graph);
31416 .map(function (graph) {
31417 return graph.getSequence(sequenceKey);
31421 * Set a spatial edge filter on the graph.
31423 * @description Resets the spatial edges of all cached nodes.
31425 * @param {FilterExpression} filter - Filter expression to be applied.
31426 * @return {Observable<Graph>} Observable emitting a single item,
31427 * the graph, when the spatial edges have been reset.
31429 GraphService.prototype.setFilter$ = function (filter) {
31430 this._resetSubscriptions(this._spatialSubscriptions);
31431 return this._graph$
31433 .do(function (graph) {
31434 graph.resetSpatialEdges();
31435 graph.setFilter(filter);
31441 * @description Resets the graph but keeps the nodes of the
31444 * @param {Array<string>} keepKeys - Keys of nodes to keep in graph.
31445 * @return {Observable<Node>} Observable emitting a single item,
31446 * the graph, when it has been reset.
31448 GraphService.prototype.reset$ = function (keepKeys) {
31449 this._abortSubjects(this._firstGraphSubjects$);
31450 this._resetSubscriptions(this._initializeCacheSubscriptions);
31451 this._resetSubscriptions(this._sequenceSubscriptions);
31452 this._resetSubscriptions(this._spatialSubscriptions);
31453 return this._graph$
31455 .do(function (graph) {
31456 graph.reset(keepKeys);
31460 * Uncache the graph.
31462 * @description Uncaches the graph by removing tiles, nodes and
31463 * sequences. Keeps the nodes of the supplied keys and the tiles
31464 * related to those nodes.
31466 * @param {Array<string>} keepKeys - Keys of nodes to keep in graph.
31467 * @return {Observable<Graph>} Observable emitting a single item,
31468 * the graph, when the graph has been uncached.
31470 GraphService.prototype.uncache$ = function (keepKeys) {
31471 return this._graph$
31473 .do(function (graph) {
31474 graph.uncache(keepKeys);
31477 GraphService.prototype._abortSubjects = function (subjects) {
31478 for (var _i = 0, _a = subjects.slice(); _i < _a.length; _i++) {
31479 var subject = _a[_i];
31480 this._removeFromArray(subject, subjects);
31481 subject.error(new Error("Cache node request was aborted."));
31484 GraphService.prototype._removeFromArray = function (object, objects) {
31485 var index = objects.indexOf(object);
31486 if (index !== -1) {
31487 objects.splice(index, 1);
31490 GraphService.prototype._resetSubscriptions = function (subscriptions) {
31491 for (var _i = 0, _a = subscriptions.slice(); _i < _a.length; _i++) {
31492 var subscription = _a[_i];
31493 this._removeFromArray(subscription, subscriptions);
31494 if (!subscription.closed) {
31495 subscription.unsubscribe();
31499 return GraphService;
31501 exports.GraphService = GraphService;
31502 Object.defineProperty(exports, "__esModule", { value: true });
31503 exports.default = GraphService;
31505 },{"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/operator/catch":51,"rxjs/add/operator/concat":53,"rxjs/add/operator/do":58,"rxjs/add/operator/expand":59,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/last":63,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71}],309:[function(require,module,exports){
31506 /// <reference path="../../typings/index.d.ts" />
31508 var Subject_1 = require("rxjs/Subject");
31509 var ImageLoadingService = (function () {
31510 function ImageLoadingService() {
31511 this._loadnode$ = new Subject_1.Subject();
31512 this._loadstatus$ = this._loadnode$
31513 .scan(function (nodes, node) {
31514 nodes[node.key] = node.loadStatus;
31519 this._loadstatus$.subscribe(function () { });
31521 Object.defineProperty(ImageLoadingService.prototype, "loadnode$", {
31523 return this._loadnode$;
31528 Object.defineProperty(ImageLoadingService.prototype, "loadstatus$", {
31530 return this._loadstatus$;
31535 return ImageLoadingService;
31537 exports.ImageLoadingService = ImageLoadingService;
31539 },{"rxjs/Subject":33}],310:[function(require,module,exports){
31540 /// <reference path="../../typings/index.d.ts" />
31542 var Pbf = require("pbf");
31543 var MeshReader = (function () {
31544 function MeshReader() {
31546 MeshReader.read = function (buffer) {
31547 var pbf = new Pbf(buffer);
31548 return pbf.readFields(MeshReader._readMeshField, { faces: [], vertices: [] });
31550 MeshReader._readMeshField = function (tag, mesh, pbf) {
31552 mesh.vertices.push(pbf.readFloat());
31554 else if (tag === 2) {
31555 mesh.faces.push(pbf.readVarint());
31560 exports.MeshReader = MeshReader;
31562 },{"pbf":22}],311:[function(require,module,exports){
31564 require("rxjs/add/observable/combineLatest");
31565 require("rxjs/add/operator/map");
31569 * @classdesc Represents a node in the navigation graph.
31571 var Node = (function () {
31573 * Create a new node instance.
31575 * @description Nodes are always created internally by the library.
31576 * Nodes can not be added to the library through any API method.
31578 * @param {ICoreNode} coreNode - Raw core node data.
31580 function Node(core) {
31581 this._cache = null;
31585 Object.defineProperty(Node.prototype, "assetsCached", {
31587 * Get assets cached.
31589 * @description The assets that need to be cached for this property
31590 * to report true are the following: fill properties, image and mesh.
31591 * The library ensures that the current node will always have the
31594 * @returns {boolean} Value indicating whether all assets have been
31598 return this._core != null &&
31599 this._fill != null &&
31600 this._cache != null &&
31601 this._cache.image != null &&
31602 this._cache.mesh != null;
31607 Object.defineProperty(Node.prototype, "alt", {
31611 * @description If SfM has not been run the computed altitude is
31612 * set to a default value of two meters.
31614 * @returns {number} Altitude, in meters.
31617 return this._fill.calt;
31622 Object.defineProperty(Node.prototype, "ca", {
31626 * @description If the SfM computed compass angle exists it will
31627 * be returned, otherwise the original EXIF compass angle.
31629 * @returns {number} Compass angle, measured in degrees.
31632 return this._fill.cca != null ? this._fill.cca : this._fill.ca;
31637 Object.defineProperty(Node.prototype, "capturedAt", {
31641 * @returns {number} Timestamp when the image was captured.
31644 return this._fill.captured_at;
31649 Object.defineProperty(Node.prototype, "computedCA", {
31653 * @description Will not be set if SfM has not been run.
31655 * @returns {number} SfM computed compass angle, measured in degrees.
31658 return this._fill.cca;
31663 Object.defineProperty(Node.prototype, "computedLatLon", {
31665 * Get computedLatLon.
31667 * @description Will not be set if SfM has not been run.
31669 * @returns {ILatLon} SfM computed latitude longitude in WGS84 datum,
31670 * measured in degrees.
31673 return this._core.cl;
31678 Object.defineProperty(Node.prototype, "focal", {
31682 * @description Will not be set if SfM has not been run.
31684 * @returns {number} SfM computed focal length.
31687 return this._fill.cfocal;
31692 Object.defineProperty(Node.prototype, "full", {
31696 * @description The library ensures that the current node will
31699 * @returns {boolean} Value indicating whether the node has all
31700 * properties filled.
31703 return this._fill != null;
31708 Object.defineProperty(Node.prototype, "fullPano", {
31712 * @returns {boolean} Value indicating whether the node is a complete
31716 return this._fill.gpano != null &&
31717 this._fill.gpano.CroppedAreaLeftPixels === 0 &&
31718 this._fill.gpano.CroppedAreaTopPixels === 0 &&
31719 this._fill.gpano.CroppedAreaImageWidthPixels === this._fill.gpano.FullPanoWidthPixels &&
31720 this._fill.gpano.CroppedAreaImageHeightPixels === this._fill.gpano.FullPanoHeightPixels;
31725 Object.defineProperty(Node.prototype, "gpano", {
31729 * @description Will not be set for non panoramic images.
31731 * @returns {IGPano} Panorama information for panorama images.
31734 return this._fill.gpano;
31739 Object.defineProperty(Node.prototype, "height", {
31743 * @returns {number} Height of original image, not adjusted
31747 return this._fill.height;
31752 Object.defineProperty(Node.prototype, "image", {
31756 * @description The image will always be set on the current node.
31758 * @returns {HTMLImageElement} Cached image element of the node.
31761 return this._cache.image;
31766 Object.defineProperty(Node.prototype, "key", {
31770 * @returns {string} Unique key of the node.
31773 return this._core.key;
31778 Object.defineProperty(Node.prototype, "latLon", {
31782 * @description If the SfM computed latitude longitude exist
31783 * it will be returned, otherwise the original EXIF latitude
31786 * @returns {ILatLon} Latitude longitude in WGS84 datum,
31787 * measured in degrees.
31790 return this._core.cl != null ? this._core.cl : this._core.l;
31795 Object.defineProperty(Node.prototype, "loadStatus", {
31799 * @returns {ILoadStatus} Value indicating the load status
31800 * of the mesh and image.
31803 return this._cache.loadStatus;
31808 Object.defineProperty(Node.prototype, "merged", {
31812 * @returns {boolean} Value indicating whether SfM has been
31813 * run on the node and the node has been merged into a
31814 * connected component.
31817 return this._fill != null &&
31818 this._fill.merge_version != null &&
31819 this._fill.merge_version > 0;
31824 Object.defineProperty(Node.prototype, "mergeCC", {
31828 * @description Will not be set if SfM has not yet been run on
31831 * @returns {number} SfM connected component key to which
31835 return this._fill.merge_cc;
31840 Object.defineProperty(Node.prototype, "mergeVersion", {
31842 * Get mergeVersion.
31844 * @returns {number} Version for which SfM was run and image was merged.
31847 return this._fill.merge_version;
31852 Object.defineProperty(Node.prototype, "mesh", {
31856 * @description The mesh will always be set on the current node.
31858 * @returns {IMesh} SfM triangulated mesh of reconstructed
31859 * atomic 3D points.
31862 return this._cache.mesh;
31867 Object.defineProperty(Node.prototype, "orientation", {
31871 * @returns {number} EXIF orientation of original image.
31874 return this._fill.orientation;
31879 Object.defineProperty(Node.prototype, "originalCA", {
31883 * @returns {number} Original EXIF compass angle, measured in
31887 return this._fill.ca;
31892 Object.defineProperty(Node.prototype, "originalLatLon", {
31894 * Get originalLatLon.
31896 * @returns {ILatLon} Original EXIF latitude longitude in
31897 * WGS84 datum, measured in degrees.
31900 return this._core.l;
31905 Object.defineProperty(Node.prototype, "pano", {
31909 * @returns {boolean} Value indicating whether the node is a panorama.
31910 * It could be a cropped or full panorama.
31913 return this._fill.gpano != null &&
31914 this._fill.gpano.FullPanoWidthPixels != null;
31919 Object.defineProperty(Node.prototype, "projectKey", {
31923 * @returns {string} Unique key of the project to which
31924 * the node belongs.
31927 return this._fill.project != null ?
31928 this._fill.project.key :
31934 Object.defineProperty(Node.prototype, "rotation", {
31938 * @description Will not be set if SfM has not been run.
31940 * @returns {Array<number>} Rotation vector in angle axis representation.
31943 return this._fill.c_rotation;
31948 Object.defineProperty(Node.prototype, "scale", {
31952 * @description Will not be set if SfM has not been run.
31954 * @returns {number} Scale of atomic reconstruction.
31957 return this._fill.atomic_scale;
31962 Object.defineProperty(Node.prototype, "sequenceKey", {
31966 * @returns {string} Unique key of the sequence to which
31967 * the node belongs.
31970 return this._core.sequence.key;
31975 Object.defineProperty(Node.prototype, "sequenceEdges", {
31977 * Get sequenceEdges.
31979 * @returns {IEdgeStatus} Value describing the status of the
31983 return this._cache.sequenceEdges;
31988 Object.defineProperty(Node.prototype, "sequenceEdges$", {
31990 * Get sequenceEdges$.
31992 * @returns {Observable<IEdgeStatus>} Observable emitting
31993 * values describing the status of the sequence edges.
31996 return this._cache.sequenceEdges$;
32001 Object.defineProperty(Node.prototype, "spatialEdges", {
32003 * Get spatialEdges.
32005 * @returns {IEdgeStatus} Value describing the status of the
32009 return this._cache.spatialEdges;
32014 Object.defineProperty(Node.prototype, "spatialEdges$", {
32016 * Get spatialEdges$.
32018 * @returns {Observable<IEdgeStatus>} Observable emitting
32019 * values describing the status of the spatial edges.
32022 return this._cache.spatialEdges$;
32027 Object.defineProperty(Node.prototype, "userKey", {
32031 * @returns {string} Unique key of the user who uploaded
32035 return this._fill.user.key;
32040 Object.defineProperty(Node.prototype, "username", {
32044 * @returns {string} Username of the user who uploaded
32048 return this._fill.user.username;
32053 Object.defineProperty(Node.prototype, "width", {
32057 * @returns {number} Width of original image, not
32058 * adjusted for orientation.
32061 return this._fill.width;
32067 * Cache the image and mesh assets.
32069 * @description The assets are always cached internally by the
32070 * library prior to setting a node as the current node.
32072 * @returns {Observable<Node>} Observable emitting this node whenever the
32073 * load status has changed and when the mesh or image has been fully loaded.
32075 Node.prototype.cacheAssets$ = function () {
32077 return this._cache.cacheAssets$(this.key, this.pano, this.merged)
32078 .map(function (cache) {
32082 Node.prototype.cacheImage$ = function (imageSize) {
32084 return this._cache.cacheImage$(this.key, imageSize)
32085 .map(function (cache) {
32090 * Cache the sequence edges.
32092 * @description The sequence edges are cached asynchronously
32093 * internally by the library.
32095 * @param {Array<IEdge>} edges - Sequence edges to cache.
32097 Node.prototype.cacheSequenceEdges = function (edges) {
32098 this._cache.cacheSequenceEdges(edges);
32101 * Cache the spatial edges.
32103 * @description The spatial edges are cached asynchronously
32104 * internally by the library.
32106 * @param {Array<IEdge>} edges - Spatial edges to cache.
32108 Node.prototype.cacheSpatialEdges = function (edges) {
32109 this._cache.cacheSpatialEdges(edges);
32112 * Dispose the node.
32114 * @description Disposes all cached assets.
32116 Node.prototype.dispose = function () {
32117 if (this._cache != null) {
32118 this._cache.dispose();
32119 this._cache = null;
32125 * Initialize the node cache.
32127 * @description The node cache is initialized internally by
32130 * @param {NodeCache} cache - The node cache to set as cache.
32132 Node.prototype.initializeCache = function (cache) {
32133 if (this._cache != null) {
32134 throw new Error("Node cache already initialized (" + this.key + ").");
32136 this._cache = cache;
32139 * Fill the node with all properties.
32141 * @description The node is filled internally by
32144 * @param {IFillNode} fill - The fill node struct.
32146 Node.prototype.makeFull = function (fill) {
32147 if (fill == null) {
32148 throw new Error("Fill can not be null.");
32153 * Reset the sequence edges.
32155 Node.prototype.resetSequenceEdges = function () {
32156 this._cache.resetSequenceEdges();
32159 * Reset the spatial edges.
32161 Node.prototype.resetSpatialEdges = function () {
32162 this._cache.resetSpatialEdges();
32165 * Clears the image and mesh assets, aborts
32166 * any outstanding requests and resets edges.
32168 Node.prototype.uncache = function () {
32169 if (this._cache == null) {
32172 this._cache.dispose();
32173 this._cache = null;
32177 exports.Node = Node;
32178 Object.defineProperty(exports, "__esModule", { value: true });
32179 exports.default = Node;
32181 },{"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/map":64}],312:[function(require,module,exports){
32182 (function (Buffer){
32184 var Subject_1 = require("rxjs/Subject");
32185 var Observable_1 = require("rxjs/Observable");
32186 require("rxjs/add/observable/combineLatest");
32187 require("rxjs/add/operator/publishReplay");
32188 var Graph_1 = require("../Graph");
32189 var Utils_1 = require("../Utils");
32193 * @classdesc Represents the cached properties of a node.
32195 var NodeCache = (function () {
32197 * Create a new node cache instance.
32199 function NodeCache() {
32200 this._disposed = false;
32201 this._image = null;
32202 this._loadStatus = { loaded: 0, total: 0 };
32204 this._sequenceEdges = { cached: false, edges: [] };
32205 this._spatialEdges = { cached: false, edges: [] };
32206 this._sequenceEdgesChanged$ = new Subject_1.Subject();
32207 this._sequenceEdges$ = this._sequenceEdgesChanged$
32208 .startWith(this._sequenceEdges)
32211 this._sequenceEdgesSubscription = this._sequenceEdges$.subscribe(function () { });
32212 this._spatialEdgesChanged$ = new Subject_1.Subject();
32213 this._spatialEdges$ = this._spatialEdgesChanged$
32214 .startWith(this._spatialEdges)
32217 this._spatialEdgesSubscription = this._spatialEdges$.subscribe(function () { });
32218 this._cachingAssets$ = null;
32220 Object.defineProperty(NodeCache.prototype, "image", {
32224 * @description Will not be set when assets have not been cached
32225 * or when the object has been disposed.
32227 * @returns {HTMLImageElement} Cached image element of the node.
32230 return this._image;
32235 Object.defineProperty(NodeCache.prototype, "loadStatus", {
32239 * @returns {ILoadStatus} Value indicating the load status
32240 * of the mesh and image.
32243 return this._loadStatus;
32248 Object.defineProperty(NodeCache.prototype, "mesh", {
32252 * @description Will not be set when assets have not been cached
32253 * or when the object has been disposed.
32255 * @returns {IMesh} SfM triangulated mesh of reconstructed
32256 * atomic 3D points.
32264 Object.defineProperty(NodeCache.prototype, "sequenceEdges", {
32266 * Get sequenceEdges.
32268 * @returns {IEdgeStatus} Value describing the status of the
32272 return this._sequenceEdges;
32277 Object.defineProperty(NodeCache.prototype, "sequenceEdges$", {
32279 * Get sequenceEdges$.
32281 * @returns {Observable<IEdgeStatus>} Observable emitting
32282 * values describing the status of the sequence edges.
32285 return this._sequenceEdges$;
32290 Object.defineProperty(NodeCache.prototype, "spatialEdges", {
32292 * Get spatialEdges.
32294 * @returns {IEdgeStatus} Value describing the status of the
32298 return this._spatialEdges;
32303 Object.defineProperty(NodeCache.prototype, "spatialEdges$", {
32305 * Get spatialEdges$.
32307 * @returns {Observable<IEdgeStatus>} Observable emitting
32308 * values describing the status of the spatial edges.
32311 return this._spatialEdges$;
32317 * Cache the image and mesh assets.
32319 * @param {string} key - Key of the node to cache.
32320 * @param {boolean} pano - Value indicating whether node is a panorama.
32321 * @param {boolean} merged - Value indicating whether node is merged.
32322 * @returns {Observable<NodeCache>} Observable emitting this node
32323 * cache whenever the load status has changed and when the mesh or image
32324 * has been fully loaded.
32326 NodeCache.prototype.cacheAssets$ = function (key, pano, merged) {
32328 if (this._cachingAssets$ != null) {
32329 return this._cachingAssets$;
32331 var imageSize = pano ?
32332 Utils_1.Settings.basePanoramaSize :
32333 Utils_1.Settings.baseImageSize;
32334 this._cachingAssets$ = Observable_1.Observable
32335 .combineLatest(this._cacheImage$(key, imageSize), this._cacheMesh$(key, merged), function (imageStatus, meshStatus) {
32336 _this._loadStatus.loaded = 0;
32337 _this._loadStatus.total = 0;
32339 _this._mesh = meshStatus.object;
32340 _this._loadStatus.loaded += meshStatus.loaded.loaded;
32341 _this._loadStatus.total += meshStatus.loaded.total;
32344 _this._image = imageStatus.object;
32345 _this._loadStatus.loaded += imageStatus.loaded.loaded;
32346 _this._loadStatus.total += imageStatus.loaded.total;
32350 .finally(function () {
32351 _this._cachingAssets$ = null;
32355 return this._cachingAssets$;
32358 * Cache an image with a higher resolution than the current one.
32360 * @param {string} key - Key of the node to cache.
32361 * @param {ImageSize} imageSize - The size to cache.
32362 * @returns {Observable<NodeCache>} Observable emitting a single item,
32363 * the node cache, when the image has been cached. If supplied image
32364 * size is not larger than the current image size the node cache is
32365 * returned immediately.
32367 NodeCache.prototype.cacheImage$ = function (key, imageSize) {
32369 if (this._image != null && imageSize <= Math.max(this._image.width, this._image.height)) {
32370 return Observable_1.Observable.of(this);
32372 return this._cacheImage$(key, imageSize)
32373 .first(function (status) {
32374 return status.object != null;
32376 .do(function (status) {
32377 _this._disposeImage();
32378 _this._image = status.object;
32380 .map(function (imageStatus) {
32385 * Cache the sequence edges.
32387 * @param {Array<IEdge>} edges - Sequence edges to cache.
32389 NodeCache.prototype.cacheSequenceEdges = function (edges) {
32390 this._sequenceEdges = { cached: true, edges: edges };
32391 this._sequenceEdgesChanged$.next(this._sequenceEdges);
32394 * Cache the spatial edges.
32396 * @param {Array<IEdge>} edges - Spatial edges to cache.
32398 NodeCache.prototype.cacheSpatialEdges = function (edges) {
32399 this._spatialEdges = { cached: true, edges: edges };
32400 this._spatialEdgesChanged$.next(this._spatialEdges);
32403 * Dispose the node cache.
32405 * @description Disposes all cached assets and unsubscribes to
32408 NodeCache.prototype.dispose = function () {
32409 this._sequenceEdgesSubscription.unsubscribe();
32410 this._spatialEdgesSubscription.unsubscribe();
32411 this._disposeImage();
32413 this._loadStatus.loaded = 0;
32414 this._loadStatus.total = 0;
32415 this._sequenceEdges = { cached: false, edges: [] };
32416 this._spatialEdges = { cached: false, edges: [] };
32417 this._sequenceEdgesChanged$.next(this._sequenceEdges);
32418 this._spatialEdgesChanged$.next(this._spatialEdges);
32419 this._disposed = true;
32420 if (this._imageRequest != null) {
32421 this._imageRequest.abort();
32423 if (this._meshRequest != null) {
32424 this._meshRequest.abort();
32428 * Reset the sequence edges.
32430 NodeCache.prototype.resetSequenceEdges = function () {
32431 this._sequenceEdges = { cached: false, edges: [] };
32432 this._sequenceEdgesChanged$.next(this._sequenceEdges);
32435 * Reset the spatial edges.
32437 NodeCache.prototype.resetSpatialEdges = function () {
32438 this._spatialEdges = { cached: false, edges: [] };
32439 this._spatialEdgesChanged$.next(this._spatialEdges);
32444 * @param {string} key - Key of the node to cache.
32445 * @param {boolean} pano - Value indicating whether node is a panorama.
32446 * @returns {Observable<ILoadStatusObject<HTMLImageElement>>} Observable
32447 * emitting a load status object every time the load status changes
32448 * and completes when the image is fully loaded.
32450 NodeCache.prototype._cacheImage$ = function (key, imageSize) {
32452 return Observable_1.Observable.create(function (subscriber) {
32453 var xmlHTTP = new XMLHttpRequest();
32454 xmlHTTP.open("GET", Utils_1.Urls.thumbnail(key, imageSize), true);
32455 xmlHTTP.responseType = "arraybuffer";
32456 xmlHTTP.timeout = 15000;
32457 xmlHTTP.onload = function (pe) {
32458 if (xmlHTTP.status !== 200) {
32459 _this._imageRequest = null;
32460 subscriber.error(new Error("Failed to fetch image (" + key + "). Status: " + xmlHTTP.status + ", " + xmlHTTP.statusText));
32463 var image = new Image();
32464 image.crossOrigin = "Anonymous";
32465 image.onload = function (e) {
32466 _this._imageRequest = null;
32467 if (_this._disposed) {
32468 window.URL.revokeObjectURL(image.src);
32469 subscriber.error(new Error("Image load was aborted (" + key + ")"));
32472 subscriber.next({ loaded: { loaded: pe.loaded, total: pe.total }, object: image });
32473 subscriber.complete();
32475 image.onerror = function (error) {
32476 _this._imageRequest = null;
32477 subscriber.error(new Error("Failed to load image (" + key + ")"));
32479 var blob = new Blob([xmlHTTP.response]);
32480 image.src = window.URL.createObjectURL(blob);
32482 xmlHTTP.onprogress = function (pe) {
32483 if (_this._disposed) {
32486 subscriber.next({ loaded: { loaded: pe.loaded, total: pe.total }, object: null });
32488 xmlHTTP.onerror = function (error) {
32489 _this._imageRequest = null;
32490 subscriber.error(new Error("Failed to fetch image (" + key + ")"));
32492 xmlHTTP.ontimeout = function (e) {
32493 _this._imageRequest = null;
32494 subscriber.error(new Error("Image request timed out (" + key + ")"));
32496 xmlHTTP.onabort = function (event) {
32497 _this._imageRequest = null;
32498 subscriber.error(new Error("Image request was aborted (" + key + ")"));
32500 _this._imageRequest = xmlHTTP;
32501 xmlHTTP.send(null);
32507 * @param {string} key - Key of the node to cache.
32508 * @param {boolean} merged - Value indicating whether node is merged.
32509 * @returns {Observable<ILoadStatusObject<IMesh>>} Observable emitting
32510 * a load status object every time the load status changes and completes
32511 * when the mesh is fully loaded.
32513 NodeCache.prototype._cacheMesh$ = function (key, merged) {
32515 return Observable_1.Observable.create(function (subscriber) {
32517 subscriber.next(_this._createEmptyMeshLoadStatus());
32518 subscriber.complete();
32521 var xmlHTTP = new XMLHttpRequest();
32522 xmlHTTP.open("GET", Utils_1.Urls.protoMesh(key), true);
32523 xmlHTTP.responseType = "arraybuffer";
32524 xmlHTTP.timeout = 15000;
32525 xmlHTTP.onload = function (pe) {
32526 _this._meshRequest = null;
32527 if (_this._disposed) {
32530 var mesh = xmlHTTP.status === 200 ?
32531 Graph_1.MeshReader.read(new Buffer(xmlHTTP.response)) :
32532 { faces: [], vertices: [] };
32533 subscriber.next({ loaded: { loaded: pe.loaded, total: pe.total }, object: mesh });
32534 subscriber.complete();
32536 xmlHTTP.onprogress = function (pe) {
32537 if (_this._disposed) {
32540 subscriber.next({ loaded: { loaded: pe.loaded, total: pe.total }, object: null });
32542 xmlHTTP.onerror = function (e) {
32543 _this._meshRequest = null;
32544 console.error("Failed to cache mesh (" + key + ")");
32545 subscriber.next(_this._createEmptyMeshLoadStatus());
32546 subscriber.complete();
32548 xmlHTTP.ontimeout = function (e) {
32549 _this._meshRequest = null;
32550 console.error("Mesh request timed out (" + key + ")");
32551 subscriber.next(_this._createEmptyMeshLoadStatus());
32552 subscriber.complete();
32554 xmlHTTP.onabort = function (e) {
32555 _this._meshRequest = null;
32556 subscriber.error(new Error("Mesh request was aborted (" + key + ")"));
32558 _this._meshRequest = xmlHTTP;
32559 xmlHTTP.send(null);
32563 * Create a load status object with an empty mesh.
32565 * @returns {ILoadStatusObject<IMesh>} Load status object
32568 NodeCache.prototype._createEmptyMeshLoadStatus = function () {
32570 loaded: { loaded: 0, total: 0 },
32571 object: { faces: [], vertices: [] },
32574 NodeCache.prototype._disposeImage = function () {
32575 if (this._image != null) {
32576 window.URL.revokeObjectURL(this._image.src);
32578 this._image = null;
32582 exports.NodeCache = NodeCache;
32583 Object.defineProperty(exports, "__esModule", { value: true });
32584 exports.default = NodeCache;
32586 }).call(this,require("buffer").Buffer)
32588 },{"../Graph":228,"../Utils":233,"buffer":5,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/publishReplay":71}],313:[function(require,module,exports){
32589 /// <reference path="../../typings/index.d.ts" />
32591 var _ = require("underscore");
32595 * @classdesc Represents a sequence of ordered nodes.
32597 var Sequence = (function () {
32599 * Create a new sequene instance.
32601 * @param {ISequence} sequence - Raw sequence data.
32603 function Sequence(sequence) {
32604 this._key = sequence.key;
32605 this._keys = sequence.keys;
32607 Object.defineProperty(Sequence.prototype, "key", {
32611 * @returns {string} Unique sequence key.
32619 Object.defineProperty(Sequence.prototype, "keys", {
32623 * @returns {Array<string>} Array of ordered node keys in the sequence.
32632 * Dispose the sequence.
32634 * @description Disposes all cached assets.
32636 Sequence.prototype.dispose = function () {
32641 * Find the next node key in the sequence with respect to
32642 * the provided node key.
32644 * @param {string} key - Reference node key.
32645 * @returns {string} Next key in sequence if it exists, null otherwise.
32647 Sequence.prototype.findNextKey = function (key) {
32648 var i = _.indexOf(this._keys, key);
32649 if ((i + 1) >= this._keys.length || i === -1) {
32653 return this._keys[i + 1];
32657 * Find the previous node key in the sequence with respect to
32658 * the provided node key.
32660 * @param {string} key - Reference node key.
32661 * @returns {string} Previous key in sequence if it exists, null otherwise.
32663 Sequence.prototype.findPrevKey = function (key) {
32664 var i = _.indexOf(this._keys, key);
32665 if (i === 0 || i === -1) {
32669 return this._keys[i - 1];
32674 exports.Sequence = Sequence;
32675 Object.defineProperty(exports, "__esModule", { value: true });
32676 exports.default = Sequence;
32678 },{"underscore":175}],314:[function(require,module,exports){
32679 /// <reference path="../../../typings/index.d.ts" />
32681 var THREE = require("three");
32682 var Edge_1 = require("../../Edge");
32683 var Error_1 = require("../../Error");
32684 var Geo_1 = require("../../Geo");
32686 * @class EdgeCalculator
32688 * @classdesc Represents a class for calculating node edges.
32690 var EdgeCalculator = (function () {
32692 * Create a new edge calculator instance.
32694 * @param {EdgeCalculatorSettings} settings - Settings struct.
32695 * @param {EdgeCalculatorDirections} directions - Directions struct.
32696 * @param {EdgeCalculatorCoefficients} coefficients - Coefficients struct.
32698 function EdgeCalculator(settings, directions, coefficients) {
32699 this._spatial = new Geo_1.Spatial();
32700 this._geoCoords = new Geo_1.GeoCoords();
32701 this._settings = settings != null ? settings : new Edge_1.EdgeCalculatorSettings();
32702 this._directions = directions != null ? directions : new Edge_1.EdgeCalculatorDirections();
32703 this._coefficients = coefficients != null ? coefficients : new Edge_1.EdgeCalculatorCoefficients();
32706 * Returns the potential edges to destination nodes for a set
32707 * of nodes with respect to a source node.
32709 * @param {Node} node - Source node.
32710 * @param {Array<Node>} nodes - Potential destination nodes.
32711 * @param {Array<string>} fallbackKeys - Keys for destination nodes that should
32712 * be returned even if they do not meet the criteria for a potential edge.
32713 * @throws {ArgumentMapillaryError} If node is not full.
32715 EdgeCalculator.prototype.getPotentialEdges = function (node, potentialNodes, fallbackKeys) {
32717 throw new Error_1.ArgumentMapillaryError("Node has to be full.");
32719 if (!node.merged) {
32722 var currentDirection = this._spatial.viewingDirection(node.rotation);
32723 var currentVerticalDirection = this._spatial.angleToPlane(currentDirection.toArray(), [0, 0, 1]);
32724 var potentialEdges = [];
32725 for (var _i = 0, potentialNodes_1 = potentialNodes; _i < potentialNodes_1.length; _i++) {
32726 var potential = potentialNodes_1[_i];
32727 if (!potential.merged ||
32728 potential.key === node.key) {
32731 var enu = this._geoCoords.geodeticToEnu(potential.latLon.lat, potential.latLon.lon, potential.alt, node.latLon.lat, node.latLon.lon, node.alt);
32732 var motion = new THREE.Vector3(enu[0], enu[1], enu[2]);
32733 var distance = motion.length();
32734 if (distance > this._settings.maxDistance &&
32735 fallbackKeys.indexOf(potential.key) < 0) {
32738 var motionChange = this._spatial.angleBetweenVector2(currentDirection.x, currentDirection.y, motion.x, motion.y);
32739 var verticalMotion = this._spatial.angleToPlane(motion.toArray(), [0, 0, 1]);
32740 var direction = this._spatial.viewingDirection(potential.rotation);
32741 var directionChange = this._spatial.angleBetweenVector2(currentDirection.x, currentDirection.y, direction.x, direction.y);
32742 var verticalDirection = this._spatial.angleToPlane(direction.toArray(), [0, 0, 1]);
32743 var verticalDirectionChange = verticalDirection - currentVerticalDirection;
32744 var rotation = this._spatial.relativeRotationAngle(node.rotation, potential.rotation);
32745 var worldMotionAzimuth = this._spatial.angleBetweenVector2(1, 0, motion.x, motion.y);
32746 var sameSequence = potential.sequenceKey != null &&
32747 node.sequenceKey != null &&
32748 potential.sequenceKey === node.sequenceKey;
32749 var sameMergeCC = (potential.mergeCC == null && node.mergeCC == null) ||
32750 potential.mergeCC === node.mergeCC;
32751 var sameUser = potential.userKey === node.userKey;
32752 var potentialEdge = {
32753 capturedAt: potential.capturedAt,
32754 directionChange: directionChange,
32755 distance: distance,
32756 fullPano: potential.fullPano,
32757 key: potential.key,
32758 motionChange: motionChange,
32759 rotation: rotation,
32760 sameMergeCC: sameMergeCC,
32761 sameSequence: sameSequence,
32762 sameUser: sameUser,
32763 sequenceKey: potential.sequenceKey,
32764 verticalDirectionChange: verticalDirectionChange,
32765 verticalMotion: verticalMotion,
32766 worldMotionAzimuth: worldMotionAzimuth,
32768 potentialEdges.push(potentialEdge);
32770 return potentialEdges;
32773 * Computes the sequence edges for a node.
32775 * @param {Node} node - Source node.
32776 * @throws {ArgumentMapillaryError} If node is not full.
32778 EdgeCalculator.prototype.computeSequenceEdges = function (node, sequence) {
32780 throw new Error_1.ArgumentMapillaryError("Node has to be full.");
32782 if (node.sequenceKey !== sequence.key) {
32783 throw new Error_1.ArgumentMapillaryError("Node and sequence does not correspond.");
32786 var nextKey = sequence.findNextKey(node.key);
32787 if (nextKey != null) {
32790 direction: Edge_1.EdgeDirection.Next,
32791 worldMotionAzimuth: Number.NaN,
32797 var prevKey = sequence.findPrevKey(node.key);
32798 if (prevKey != null) {
32801 direction: Edge_1.EdgeDirection.Prev,
32802 worldMotionAzimuth: Number.NaN,
32811 * Computes the similar edges for a node.
32813 * @description Similar edges for perspective images and cropped panoramas
32814 * look roughly in the same direction and are positioned closed to the node.
32815 * Similar edges for full panoramas only target other full panoramas.
32817 * @param {Node} node - Source node.
32818 * @param {Array<IPotentialEdge>} potentialEdges - Potential edges.
32819 * @throws {ArgumentMapillaryError} If node is not full.
32821 EdgeCalculator.prototype.computeSimilarEdges = function (node, potentialEdges) {
32824 throw new Error_1.ArgumentMapillaryError("Node has to be full.");
32826 var nodeFullPano = node.fullPano;
32827 var sequenceGroups = {};
32828 for (var _i = 0, potentialEdges_1 = potentialEdges; _i < potentialEdges_1.length; _i++) {
32829 var potentialEdge = potentialEdges_1[_i];
32830 if (potentialEdge.sequenceKey == null) {
32833 if (potentialEdge.sameSequence ||
32834 !potentialEdge.sameMergeCC) {
32837 if (nodeFullPano) {
32838 if (!potentialEdge.fullPano) {
32843 if (!potentialEdge.fullPano &&
32844 Math.abs(potentialEdge.directionChange) > this._settings.similarMaxDirectionChange) {
32848 if (potentialEdge.distance > this._settings.similarMaxDistance) {
32851 if (potentialEdge.sameUser &&
32852 Math.abs(potentialEdge.capturedAt - node.capturedAt) <
32853 this._settings.similarMinTimeDifference) {
32856 if (sequenceGroups[potentialEdge.sequenceKey] == null) {
32857 sequenceGroups[potentialEdge.sequenceKey] = [];
32859 sequenceGroups[potentialEdge.sequenceKey].push(potentialEdge);
32861 var similarEdges = [];
32862 var calculateScore = node.fullPano ?
32863 function (potentialEdge) {
32864 return potentialEdge.distance;
32866 function (potentialEdge) {
32867 return _this._coefficients.similarDistance * potentialEdge.distance +
32868 _this._coefficients.similarRotation * potentialEdge.rotation;
32870 for (var sequenceKey in sequenceGroups) {
32871 if (!sequenceGroups.hasOwnProperty(sequenceKey)) {
32874 var lowestScore = Number.MAX_VALUE;
32875 var similarEdge = null;
32876 for (var _a = 0, _b = sequenceGroups[sequenceKey]; _a < _b.length; _a++) {
32877 var potentialEdge = _b[_a];
32878 var score = calculateScore(potentialEdge);
32879 if (score < lowestScore) {
32880 lowestScore = score;
32881 similarEdge = potentialEdge;
32884 if (similarEdge == null) {
32887 similarEdges.push(similarEdge);
32889 return similarEdges
32890 .map(function (potentialEdge) {
32893 direction: Edge_1.EdgeDirection.Similar,
32894 worldMotionAzimuth: potentialEdge.worldMotionAzimuth,
32897 to: potentialEdge.key,
32902 * Computes the step edges for a perspective node.
32904 * @param {Node} node - Source node.
32905 * @param {Array<IPotentialEdge>} potentialEdges - Potential edges.
32906 * @param {string} prevKey - Key of previous node in sequence.
32907 * @param {string} prevKey - Key of next node in sequence.
32908 * @throws {ArgumentMapillaryError} If node is not full.
32910 EdgeCalculator.prototype.computeStepEdges = function (node, potentialEdges, prevKey, nextKey) {
32912 throw new Error_1.ArgumentMapillaryError("Node has to be full.");
32915 if (node.fullPano) {
32918 for (var k in this._directions.steps) {
32919 if (!this._directions.steps.hasOwnProperty(k)) {
32922 var step = this._directions.steps[k];
32923 var lowestScore = Number.MAX_VALUE;
32925 var fallback = null;
32926 for (var _i = 0, potentialEdges_2 = potentialEdges; _i < potentialEdges_2.length; _i++) {
32927 var potential = potentialEdges_2[_i];
32928 if (potential.fullPano) {
32931 if (Math.abs(potential.directionChange) > this._settings.stepMaxDirectionChange) {
32934 var motionDifference = this._spatial.angleDifference(step.motionChange, potential.motionChange);
32935 var directionMotionDifference = this._spatial.angleDifference(potential.directionChange, motionDifference);
32936 var drift = Math.max(Math.abs(motionDifference), Math.abs(directionMotionDifference));
32937 if (Math.abs(drift) > this._settings.stepMaxDrift) {
32940 var potentialKey = potential.key;
32941 if (step.useFallback && (potentialKey === prevKey || potentialKey === nextKey)) {
32942 fallback = potential;
32944 if (potential.distance > this._settings.stepMaxDistance) {
32947 motionDifference = Math.sqrt(motionDifference * motionDifference +
32948 potential.verticalMotion * potential.verticalMotion);
32949 var score = this._coefficients.stepPreferredDistance *
32950 Math.abs(potential.distance - this._settings.stepPreferredDistance) /
32951 this._settings.stepMaxDistance +
32952 this._coefficients.stepMotion * motionDifference / this._settings.stepMaxDrift +
32953 this._coefficients.stepRotation * potential.rotation / this._settings.stepMaxDirectionChange +
32954 this._coefficients.stepSequencePenalty * (potential.sameSequence ? 0 : 1) +
32955 this._coefficients.stepMergeCCPenalty * (potential.sameMergeCC ? 0 : 1);
32956 if (score < lowestScore) {
32957 lowestScore = score;
32961 edge = edge == null ? fallback : edge;
32962 if (edge != null) {
32965 direction: step.direction,
32966 worldMotionAzimuth: edge.worldMotionAzimuth,
32976 * Computes the turn edges for a perspective node.
32978 * @param {Node} node - Source node.
32979 * @param {Array<IPotentialEdge>} potentialEdges - Potential edges.
32980 * @throws {ArgumentMapillaryError} If node is not full.
32982 EdgeCalculator.prototype.computeTurnEdges = function (node, potentialEdges) {
32984 throw new Error_1.ArgumentMapillaryError("Node has to be full.");
32987 if (node.fullPano) {
32990 for (var k in this._directions.turns) {
32991 if (!this._directions.turns.hasOwnProperty(k)) {
32994 var turn = this._directions.turns[k];
32995 var lowestScore = Number.MAX_VALUE;
32997 for (var _i = 0, potentialEdges_3 = potentialEdges; _i < potentialEdges_3.length; _i++) {
32998 var potential = potentialEdges_3[_i];
32999 if (potential.fullPano) {
33002 if (potential.distance > this._settings.turnMaxDistance) {
33005 var rig = turn.direction !== Edge_1.EdgeDirection.TurnU &&
33006 potential.distance < this._settings.turnMaxRigDistance &&
33007 Math.abs(potential.directionChange) > this._settings.turnMinRigDirectionChange;
33008 var directionDifference = this._spatial.angleDifference(turn.directionChange, potential.directionChange);
33009 var score = void 0;
33011 potential.directionChange * turn.directionChange > 0 &&
33012 Math.abs(potential.directionChange) < Math.abs(turn.directionChange)) {
33013 score = -Math.PI / 2 + Math.abs(potential.directionChange);
33016 if (Math.abs(directionDifference) > this._settings.turnMaxDirectionChange) {
33019 var motionDifference = turn.motionChange ?
33020 this._spatial.angleDifference(turn.motionChange, potential.motionChange) : 0;
33021 motionDifference = Math.sqrt(motionDifference * motionDifference +
33022 potential.verticalMotion * potential.verticalMotion);
33024 this._coefficients.turnDistance * potential.distance /
33025 this._settings.turnMaxDistance +
33026 this._coefficients.turnMotion * motionDifference / Math.PI +
33027 this._coefficients.turnSequencePenalty * (potential.sameSequence ? 0 : 1) +
33028 this._coefficients.turnMergeCCPenalty * (potential.sameMergeCC ? 0 : 1);
33030 if (score < lowestScore) {
33031 lowestScore = score;
33035 if (edge != null) {
33038 direction: turn.direction,
33039 worldMotionAzimuth: edge.worldMotionAzimuth,
33049 * Computes the pano edges for a perspective node.
33051 * @param {Node} node - Source node.
33052 * @param {Array<IPotentialEdge>} potentialEdges - Potential edges.
33053 * @throws {ArgumentMapillaryError} If node is not full.
33055 EdgeCalculator.prototype.computePerspectiveToPanoEdges = function (node, potentialEdges) {
33057 throw new Error_1.ArgumentMapillaryError("Node has to be full.");
33059 if (node.fullPano) {
33062 var lowestScore = Number.MAX_VALUE;
33064 for (var _i = 0, potentialEdges_4 = potentialEdges; _i < potentialEdges_4.length; _i++) {
33065 var potential = potentialEdges_4[_i];
33066 if (!potential.fullPano) {
33069 var score = this._coefficients.panoPreferredDistance *
33070 Math.abs(potential.distance - this._settings.panoPreferredDistance) /
33071 this._settings.panoMaxDistance +
33072 this._coefficients.panoMotion * Math.abs(potential.motionChange) / Math.PI +
33073 this._coefficients.panoMergeCCPenalty * (potential.sameMergeCC ? 0 : 1);
33074 if (score < lowestScore) {
33075 lowestScore = score;
33079 if (edge == null) {
33085 direction: Edge_1.EdgeDirection.Pano,
33086 worldMotionAzimuth: edge.worldMotionAzimuth,
33094 * Computes the pano and step edges for a pano node.
33096 * @param {Node} node - Source node.
33097 * @param {Array<IPotentialEdge>} potentialEdges - Potential edges.
33098 * @throws {ArgumentMapillaryError} If node is not full.
33100 EdgeCalculator.prototype.computePanoEdges = function (node, potentialEdges) {
33102 throw new Error_1.ArgumentMapillaryError("Node has to be full.");
33104 if (!node.fullPano) {
33107 var panoEdges = [];
33108 var potentialPanos = [];
33109 var potentialSteps = [];
33110 for (var _i = 0, potentialEdges_5 = potentialEdges; _i < potentialEdges_5.length; _i++) {
33111 var potential = potentialEdges_5[_i];
33112 if (potential.distance > this._settings.panoMaxDistance) {
33115 if (potential.fullPano) {
33116 if (potential.distance < this._settings.panoMinDistance) {
33119 potentialPanos.push(potential);
33122 for (var k in this._directions.panos) {
33123 if (!this._directions.panos.hasOwnProperty(k)) {
33126 var pano = this._directions.panos[k];
33127 var turn = this._spatial.angleDifference(potential.directionChange, potential.motionChange);
33128 var turnChange = this._spatial.angleDifference(pano.directionChange, turn);
33129 if (Math.abs(turnChange) > this._settings.panoMaxStepTurnChange) {
33132 potentialSteps.push([pano.direction, potential]);
33133 // break if step direction found
33138 var maxRotationDifference = Math.PI / this._settings.panoMaxItems;
33139 var occupiedAngles = [];
33140 var stepAngles = [];
33141 for (var index = 0; index < this._settings.panoMaxItems; index++) {
33142 var rotation = index / this._settings.panoMaxItems * 2 * Math.PI;
33143 var lowestScore = Number.MAX_VALUE;
33145 for (var _a = 0, potentialPanos_1 = potentialPanos; _a < potentialPanos_1.length; _a++) {
33146 var potential = potentialPanos_1[_a];
33147 var motionDifference = this._spatial.angleDifference(rotation, potential.motionChange);
33148 if (Math.abs(motionDifference) > maxRotationDifference) {
33151 var occupiedDifference = Number.MAX_VALUE;
33152 for (var _b = 0, occupiedAngles_1 = occupiedAngles; _b < occupiedAngles_1.length; _b++) {
33153 var occupiedAngle = occupiedAngles_1[_b];
33154 var difference = Math.abs(this._spatial.angleDifference(occupiedAngle, potential.motionChange));
33155 if (difference < occupiedDifference) {
33156 occupiedDifference = difference;
33159 if (occupiedDifference <= maxRotationDifference) {
33162 var score = this._coefficients.panoPreferredDistance *
33163 Math.abs(potential.distance - this._settings.panoPreferredDistance) /
33164 this._settings.panoMaxDistance +
33165 this._coefficients.panoMotion * Math.abs(motionDifference) / maxRotationDifference +
33166 this._coefficients.panoSequencePenalty * (potential.sameSequence ? 0 : 1) +
33167 this._coefficients.panoMergeCCPenalty * (potential.sameMergeCC ? 0 : 1);
33168 if (score < lowestScore) {
33169 lowestScore = score;
33173 if (edge != null) {
33174 occupiedAngles.push(edge.motionChange);
33177 direction: Edge_1.EdgeDirection.Pano,
33178 worldMotionAzimuth: edge.worldMotionAzimuth,
33185 stepAngles.push(rotation);
33188 var occupiedStepAngles = {};
33189 occupiedStepAngles[Edge_1.EdgeDirection.Pano] = occupiedAngles;
33190 occupiedStepAngles[Edge_1.EdgeDirection.StepForward] = [];
33191 occupiedStepAngles[Edge_1.EdgeDirection.StepLeft] = [];
33192 occupiedStepAngles[Edge_1.EdgeDirection.StepBackward] = [];
33193 occupiedStepAngles[Edge_1.EdgeDirection.StepRight] = [];
33194 for (var _c = 0, stepAngles_1 = stepAngles; _c < stepAngles_1.length; _c++) {
33195 var stepAngle = stepAngles_1[_c];
33196 var occupations = [];
33197 for (var k in this._directions.panos) {
33198 if (!this._directions.panos.hasOwnProperty(k)) {
33201 var pano = this._directions.panos[k];
33202 var allOccupiedAngles = occupiedStepAngles[Edge_1.EdgeDirection.Pano]
33203 .concat(occupiedStepAngles[pano.direction])
33204 .concat(occupiedStepAngles[pano.prev])
33205 .concat(occupiedStepAngles[pano.next]);
33206 var lowestScore = Number.MAX_VALUE;
33208 for (var _d = 0, potentialSteps_1 = potentialSteps; _d < potentialSteps_1.length; _d++) {
33209 var potential = potentialSteps_1[_d];
33210 if (potential[0] !== pano.direction) {
33213 var motionChange = this._spatial.angleDifference(stepAngle, potential[1].motionChange);
33214 if (Math.abs(motionChange) > maxRotationDifference) {
33217 var minOccupiedDifference = Number.MAX_VALUE;
33218 for (var _e = 0, allOccupiedAngles_1 = allOccupiedAngles; _e < allOccupiedAngles_1.length; _e++) {
33219 var occupiedAngle = allOccupiedAngles_1[_e];
33220 var occupiedDifference = Math.abs(this._spatial.angleDifference(occupiedAngle, potential[1].motionChange));
33221 if (occupiedDifference < minOccupiedDifference) {
33222 minOccupiedDifference = occupiedDifference;
33225 if (minOccupiedDifference <= maxRotationDifference) {
33228 var score = this._coefficients.panoPreferredDistance *
33229 Math.abs(potential[1].distance - this._settings.panoPreferredDistance) /
33230 this._settings.panoMaxDistance +
33231 this._coefficients.panoMotion * Math.abs(motionChange) / maxRotationDifference +
33232 this._coefficients.panoMergeCCPenalty * (potential[1].sameMergeCC ? 0 : 1);
33233 if (score < lowestScore) {
33234 lowestScore = score;
33238 if (edge != null) {
33239 occupations.push(edge);
33242 direction: edge[0],
33243 worldMotionAzimuth: edge[1].worldMotionAzimuth,
33250 for (var _f = 0, occupations_1 = occupations; _f < occupations_1.length; _f++) {
33251 var occupation = occupations_1[_f];
33252 occupiedStepAngles[occupation[0]].push(occupation[1].motionChange);
33257 return EdgeCalculator;
33259 exports.EdgeCalculator = EdgeCalculator;
33260 Object.defineProperty(exports, "__esModule", { value: true });
33261 exports.default = EdgeCalculator;
33263 },{"../../Edge":225,"../../Error":226,"../../Geo":227,"three":174}],315:[function(require,module,exports){
33265 var EdgeCalculatorCoefficients = (function () {
33266 function EdgeCalculatorCoefficients() {
33267 this.panoPreferredDistance = 2;
33268 this.panoMotion = 2;
33269 this.panoSequencePenalty = 1;
33270 this.panoMergeCCPenalty = 4;
33271 this.stepPreferredDistance = 4;
33272 this.stepMotion = 3;
33273 this.stepRotation = 4;
33274 this.stepSequencePenalty = 2;
33275 this.stepMergeCCPenalty = 6;
33276 this.similarDistance = 2;
33277 this.similarRotation = 3;
33278 this.turnDistance = 4;
33279 this.turnMotion = 2;
33280 this.turnSequencePenalty = 1;
33281 this.turnMergeCCPenalty = 4;
33283 return EdgeCalculatorCoefficients;
33285 exports.EdgeCalculatorCoefficients = EdgeCalculatorCoefficients;
33286 Object.defineProperty(exports, "__esModule", { value: true });
33287 exports.default = EdgeCalculatorCoefficients;
33289 },{}],316:[function(require,module,exports){
33291 var Edge_1 = require("../../Edge");
33292 var EdgeCalculatorDirections = (function () {
33293 function EdgeCalculatorDirections() {
33297 this.steps[Edge_1.EdgeDirection.StepForward] = {
33298 direction: Edge_1.EdgeDirection.StepForward,
33302 this.steps[Edge_1.EdgeDirection.StepBackward] = {
33303 direction: Edge_1.EdgeDirection.StepBackward,
33304 motionChange: Math.PI,
33307 this.steps[Edge_1.EdgeDirection.StepLeft] = {
33308 direction: Edge_1.EdgeDirection.StepLeft,
33309 motionChange: Math.PI / 2,
33310 useFallback: false,
33312 this.steps[Edge_1.EdgeDirection.StepRight] = {
33313 direction: Edge_1.EdgeDirection.StepRight,
33314 motionChange: -Math.PI / 2,
33315 useFallback: false,
33317 this.turns[Edge_1.EdgeDirection.TurnLeft] = {
33318 direction: Edge_1.EdgeDirection.TurnLeft,
33319 directionChange: Math.PI / 2,
33320 motionChange: Math.PI / 4,
33322 this.turns[Edge_1.EdgeDirection.TurnRight] = {
33323 direction: Edge_1.EdgeDirection.TurnRight,
33324 directionChange: -Math.PI / 2,
33325 motionChange: -Math.PI / 4,
33327 this.turns[Edge_1.EdgeDirection.TurnU] = {
33328 direction: Edge_1.EdgeDirection.TurnU,
33329 directionChange: Math.PI,
33330 motionChange: null,
33332 this.panos[Edge_1.EdgeDirection.StepForward] = {
33333 direction: Edge_1.EdgeDirection.StepForward,
33334 directionChange: 0,
33335 next: Edge_1.EdgeDirection.StepLeft,
33336 prev: Edge_1.EdgeDirection.StepRight,
33338 this.panos[Edge_1.EdgeDirection.StepBackward] = {
33339 direction: Edge_1.EdgeDirection.StepBackward,
33340 directionChange: Math.PI,
33341 next: Edge_1.EdgeDirection.StepRight,
33342 prev: Edge_1.EdgeDirection.StepLeft,
33344 this.panos[Edge_1.EdgeDirection.StepLeft] = {
33345 direction: Edge_1.EdgeDirection.StepLeft,
33346 directionChange: Math.PI / 2,
33347 next: Edge_1.EdgeDirection.StepBackward,
33348 prev: Edge_1.EdgeDirection.StepForward,
33350 this.panos[Edge_1.EdgeDirection.StepRight] = {
33351 direction: Edge_1.EdgeDirection.StepRight,
33352 directionChange: -Math.PI / 2,
33353 next: Edge_1.EdgeDirection.StepForward,
33354 prev: Edge_1.EdgeDirection.StepBackward,
33357 return EdgeCalculatorDirections;
33359 exports.EdgeCalculatorDirections = EdgeCalculatorDirections;
33361 },{"../../Edge":225}],317:[function(require,module,exports){
33363 var EdgeCalculatorSettings = (function () {
33364 function EdgeCalculatorSettings() {
33365 this.panoMinDistance = 0.1;
33366 this.panoMaxDistance = 20;
33367 this.panoPreferredDistance = 5;
33368 this.panoMaxItems = 4;
33369 this.panoMaxStepTurnChange = Math.PI / 8;
33370 this.rotationMaxDistance = this.turnMaxRigDistance;
33371 this.rotationMaxDirectionChange = Math.PI / 6;
33372 this.rotationMaxVerticalDirectionChange = Math.PI / 8;
33373 this.similarMaxDirectionChange = Math.PI / 8;
33374 this.similarMaxDistance = 12;
33375 this.similarMinTimeDifference = 12 * 3600 * 1000;
33376 this.stepMaxDistance = 20;
33377 this.stepMaxDirectionChange = Math.PI / 6;
33378 this.stepMaxDrift = Math.PI / 6;
33379 this.stepPreferredDistance = 4;
33380 this.turnMaxDistance = 15;
33381 this.turnMaxDirectionChange = 2 * Math.PI / 9;
33382 this.turnMaxRigDistance = 0.65;
33383 this.turnMinRigDirectionChange = Math.PI / 6;
33385 Object.defineProperty(EdgeCalculatorSettings.prototype, "maxDistance", {
33387 return Math.max(this.panoMaxDistance, this.similarMaxDistance, this.stepMaxDistance, this.turnMaxDistance);
33392 return EdgeCalculatorSettings;
33394 exports.EdgeCalculatorSettings = EdgeCalculatorSettings;
33395 Object.defineProperty(exports, "__esModule", { value: true });
33396 exports.default = EdgeCalculatorSettings;
33398 },{}],318:[function(require,module,exports){
33401 * Enumeration for edge directions
33404 * @description Directions for edges in node graph describing
33405 * sequence, spatial and node type relations between nodes.
33408 (function (EdgeDirection) {
33410 * Next node in the sequence.
33412 EdgeDirection[EdgeDirection["Next"] = 0] = "Next";
33414 * Previous node in the sequence.
33416 EdgeDirection[EdgeDirection["Prev"] = 1] = "Prev";
33418 * Step to the left keeping viewing direction.
33420 EdgeDirection[EdgeDirection["StepLeft"] = 2] = "StepLeft";
33422 * Step to the right keeping viewing direction.
33424 EdgeDirection[EdgeDirection["StepRight"] = 3] = "StepRight";
33426 * Step forward keeping viewing direction.
33428 EdgeDirection[EdgeDirection["StepForward"] = 4] = "StepForward";
33430 * Step backward keeping viewing direction.
33432 EdgeDirection[EdgeDirection["StepBackward"] = 5] = "StepBackward";
33434 * Turn 90 degrees counter clockwise.
33436 EdgeDirection[EdgeDirection["TurnLeft"] = 6] = "TurnLeft";
33438 * Turn 90 degrees clockwise.
33440 EdgeDirection[EdgeDirection["TurnRight"] = 7] = "TurnRight";
33442 * Turn 180 degrees.
33444 EdgeDirection[EdgeDirection["TurnU"] = 8] = "TurnU";
33446 * Panorama in general direction.
33448 EdgeDirection[EdgeDirection["Pano"] = 9] = "Pano";
33450 * Looking in roughly the same direction at rougly the same position.
33452 EdgeDirection[EdgeDirection["Similar"] = 10] = "Similar";
33453 })(EdgeDirection = exports.EdgeDirection || (exports.EdgeDirection = {}));
33456 },{}],319:[function(require,module,exports){
33457 /// <reference path="../../typings/index.d.ts" />
33459 var _ = require("underscore");
33460 var vd = require("virtual-dom");
33461 var Subject_1 = require("rxjs/Subject");
33462 require("rxjs/add/operator/combineLatest");
33463 require("rxjs/add/operator/distinctUntilChanged");
33464 require("rxjs/add/operator/filter");
33465 require("rxjs/add/operator/map");
33466 require("rxjs/add/operator/pluck");
33467 require("rxjs/add/operator/scan");
33468 var Render_1 = require("../Render");
33469 var DOMRenderer = (function () {
33470 function DOMRenderer(element, renderService, currentFrame$) {
33471 this._adaptiveOperation$ = new Subject_1.Subject();
33472 this._render$ = new Subject_1.Subject();
33473 this._renderAdaptive$ = new Subject_1.Subject();
33474 this._renderService = renderService;
33475 this._currentFrame$ = currentFrame$;
33476 var rootNode = vd.create(vd.h("div.domRenderer", []));
33477 element.appendChild(rootNode);
33478 this._offset$ = this._adaptiveOperation$
33479 .scan(function (adaptive, operation) {
33480 return operation(adaptive);
33482 elementHeight: element.offsetHeight,
33483 elementWidth: element.offsetWidth,
33485 renderMode: Render_1.RenderMode.Fill,
33487 .filter(function (adaptive) {
33488 return adaptive.imageAspect > 0 && adaptive.elementWidth > 0 && adaptive.elementHeight > 0;
33490 .map(function (adaptive) {
33491 var elementAspect = adaptive.elementWidth / adaptive.elementHeight;
33492 var ratio = adaptive.imageAspect / elementAspect;
33493 var verticalOffset = 0;
33494 var horizontalOffset = 0;
33495 if (adaptive.renderMode === Render_1.RenderMode.Letterbox) {
33496 if (adaptive.imageAspect > elementAspect) {
33497 verticalOffset = adaptive.elementHeight * (1 - 1 / ratio) / 2;
33500 horizontalOffset = adaptive.elementWidth * (1 - ratio) / 2;
33504 if (adaptive.imageAspect > elementAspect) {
33505 horizontalOffset = -adaptive.elementWidth * (ratio - 1) / 2;
33508 verticalOffset = -adaptive.elementHeight * (1 / ratio - 1) / 2;
33512 bottom: verticalOffset,
33513 left: horizontalOffset,
33514 right: horizontalOffset,
33515 top: verticalOffset,
33518 this._currentFrame$
33519 .filter(function (frame) {
33520 return frame.state.currentNode != null;
33522 .distinctUntilChanged(function (k1, k2) {
33524 }, function (frame) {
33525 return frame.state.currentNode.key;
33527 .map(function (frame) {
33528 return frame.state.currentTransform.basicAspect;
33530 .map(function (aspect) {
33531 return function (adaptive) {
33532 adaptive.imageAspect = aspect;
33536 .subscribe(this._adaptiveOperation$);
33537 this._renderAdaptive$
33538 .scan(function (vNodeHashes, vNodeHash) {
33539 if (vNodeHash.vnode == null) {
33540 delete vNodeHashes[vNodeHash.name];
33543 vNodeHashes[vNodeHash.name] = vNodeHash.vnode;
33545 return vNodeHashes;
33547 .combineLatest(this._offset$)
33548 .map(function (vo) {
33549 var vNodes = _.values(vo[0]);
33550 var offset = vo[1];
33553 bottom: offset.bottom + "px",
33554 left: offset.left + "px",
33555 "pointer-events": "none",
33556 position: "absolute",
33557 right: offset.right + "px",
33558 top: offset.top + "px",
33562 name: "adaptiveDomRenderer",
33563 vnode: vd.h("div.adaptiveDomRenderer", properties, vNodes),
33566 .subscribe(this._render$);
33567 this._vNode$ = this._render$
33568 .scan(function (vNodeHashes, vNodeHash) {
33569 if (vNodeHash.vnode == null) {
33570 delete vNodeHashes[vNodeHash.name];
33573 vNodeHashes[vNodeHash.name] = vNodeHash.vnode;
33575 return vNodeHashes;
33577 .map(function (vNodeHashes) {
33578 var vNodes = _.values(vNodeHashes);
33579 return vd.h("div.domRenderer", vNodes);
33581 this._vPatch$ = this._vNode$
33582 .scan(function (nodePatch, vNode) {
33583 nodePatch.vpatch = vd.diff(nodePatch.vnode, vNode);
33584 nodePatch.vnode = vNode;
33586 }, { vnode: vd.h("div.domRenderer", []), vpatch: null })
33588 this._element$ = this._vPatch$
33589 .scan(function (oldElement, vPatch) {
33590 return vd.patch(oldElement, vPatch);
33594 this._element$.subscribe(function () { });
33595 this._renderService.size$
33596 .map(function (size) {
33597 return function (adaptive) {
33598 adaptive.elementWidth = size.width;
33599 adaptive.elementHeight = size.height;
33603 .subscribe(this._adaptiveOperation$);
33604 this._renderService.renderMode$
33605 .map(function (renderMode) {
33606 return function (adaptive) {
33607 adaptive.renderMode = renderMode;
33611 .subscribe(this._adaptiveOperation$);
33613 Object.defineProperty(DOMRenderer.prototype, "element$", {
33615 return this._element$;
33620 Object.defineProperty(DOMRenderer.prototype, "render$", {
33622 return this._render$;
33627 Object.defineProperty(DOMRenderer.prototype, "renderAdaptive$", {
33629 return this._renderAdaptive$;
33634 DOMRenderer.prototype.clear = function (name) {
33635 this._renderAdaptive$.next({ name: name, vnode: null });
33636 this._render$.next({ name: name, vnode: null });
33638 return DOMRenderer;
33640 exports.DOMRenderer = DOMRenderer;
33641 Object.defineProperty(exports, "__esModule", { value: true });
33642 exports.default = DOMRenderer;
33644 },{"../Render":230,"rxjs/Subject":33,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/pluck":69,"rxjs/add/operator/scan":72,"underscore":175,"virtual-dom":180}],320:[function(require,module,exports){
33647 (function (GLRenderStage) {
33648 GLRenderStage[GLRenderStage["Background"] = 0] = "Background";
33649 GLRenderStage[GLRenderStage["Foreground"] = 1] = "Foreground";
33650 })(GLRenderStage = exports.GLRenderStage || (exports.GLRenderStage = {}));
33651 Object.defineProperty(exports, "__esModule", { value: true });
33652 exports.default = GLRenderStage;
33654 },{}],321:[function(require,module,exports){
33655 /// <reference path="../../typings/index.d.ts" />
33657 var THREE = require("three");
33658 var Observable_1 = require("rxjs/Observable");
33659 var Subject_1 = require("rxjs/Subject");
33660 require("rxjs/add/observable/combineLatest");
33661 require("rxjs/add/operator/distinctUntilChanged");
33662 require("rxjs/add/operator/filter");
33663 require("rxjs/add/operator/first");
33664 require("rxjs/add/operator/map");
33665 require("rxjs/add/operator/merge");
33666 require("rxjs/add/operator/mergeMap");
33667 require("rxjs/add/operator/scan");
33668 require("rxjs/add/operator/share");
33669 require("rxjs/add/operator/startWith");
33670 var Render_1 = require("../Render");
33671 var GLRenderer = (function () {
33672 function GLRenderer(canvasContainer, renderService) {
33674 this._renderFrame$ = new Subject_1.Subject();
33675 this._renderCameraOperation$ = new Subject_1.Subject();
33676 this._render$ = new Subject_1.Subject();
33677 this._clear$ = new Subject_1.Subject();
33678 this._renderOperation$ = new Subject_1.Subject();
33679 this._rendererOperation$ = new Subject_1.Subject();
33680 this._eraserOperation$ = new Subject_1.Subject();
33681 this._renderService = renderService;
33682 this._renderer$ = this._rendererOperation$
33683 .scan(function (renderer, operation) {
33684 return operation(renderer);
33685 }, { needsRender: false, renderer: null });
33686 this._renderCollection$ = this._renderOperation$
33687 .scan(function (hashes, operation) {
33688 return operation(hashes);
33691 this._renderCamera$ = this._renderCameraOperation$
33692 .scan(function (rc, operation) {
33693 return operation(rc);
33694 }, { frameId: -1, needsRender: false, perspective: null });
33695 this._eraser$ = this._eraserOperation$
33696 .startWith(function (eraser) {
33699 .scan(function (eraser, operation) {
33700 return operation(eraser);
33701 }, { needsRender: false });
33702 Observable_1.Observable
33703 .combineLatest([this._renderer$, this._renderCollection$, this._renderCamera$, this._eraser$], function (renderer, hashes, rc, eraser) {
33704 var renders = Object.keys(hashes)
33705 .map(function (key) {
33706 return hashes[key];
33708 return { camera: rc, eraser: eraser, renderer: renderer, renders: renders };
33710 .filter(function (co) {
33711 var needsRender = co.renderer.needsRender ||
33712 co.camera.needsRender ||
33713 co.eraser.needsRender;
33714 var frameId = co.camera.frameId;
33715 for (var _i = 0, _a = co.renders; _i < _a.length; _i++) {
33716 var render = _a[_i];
33717 if (render.frameId !== frameId) {
33720 needsRender = needsRender || render.needsRender;
33722 return needsRender;
33724 .distinctUntilChanged(function (n1, n2) {
33727 return co.eraser.needsRender ? -1 : co.camera.frameId;
33729 .subscribe(function (co) {
33730 co.renderer.needsRender = false;
33731 co.camera.needsRender = false;
33732 co.eraser.needsRender = false;
33733 var perspectiveCamera = co.camera.perspective;
33734 var backgroundRenders = [];
33735 var foregroundRenders = [];
33736 for (var _i = 0, _a = co.renders; _i < _a.length; _i++) {
33737 var render = _a[_i];
33738 if (render.stage === Render_1.GLRenderStage.Background) {
33739 backgroundRenders.push(render.render);
33741 else if (render.stage === Render_1.GLRenderStage.Foreground) {
33742 foregroundRenders.push(render.render);
33745 var renderer = co.renderer.renderer;
33747 for (var _b = 0, backgroundRenders_1 = backgroundRenders; _b < backgroundRenders_1.length; _b++) {
33748 var render = backgroundRenders_1[_b];
33749 render(perspectiveCamera, renderer);
33751 renderer.clearDepth();
33752 for (var _c = 0, foregroundRenders_1 = foregroundRenders; _c < foregroundRenders_1.length; _c++) {
33753 var render = foregroundRenders_1[_c];
33754 render(perspectiveCamera, renderer);
33758 .map(function (rc) {
33759 return function (irc) {
33760 irc.frameId = rc.frameId;
33761 irc.perspective = rc.perspective;
33762 if (rc.changed === true) {
33763 irc.needsRender = true;
33768 .subscribe(this._renderCameraOperation$);
33769 this._renderFrameSubscribe();
33770 var renderHash$ = this._render$
33771 .map(function (hash) {
33772 return function (hashes) {
33773 hashes[hash.name] = hash.render;
33777 var clearHash$ = this._clear$
33778 .map(function (name) {
33779 return function (hashes) {
33780 delete hashes[name];
33784 Observable_1.Observable
33785 .merge(renderHash$, clearHash$)
33786 .subscribe(this._renderOperation$);
33787 this._webGLRenderer$ = this._render$
33789 .map(function (hash) {
33790 var element = renderService.element;
33791 var webGLRenderer = new THREE.WebGLRenderer();
33792 webGLRenderer.setPixelRatio(window.devicePixelRatio);
33793 webGLRenderer.setSize(element.offsetWidth, element.offsetHeight);
33794 webGLRenderer.setClearColor(new THREE.Color(0x202020), 1.0);
33795 webGLRenderer.autoClear = false;
33796 webGLRenderer.domElement.style.position = "absolute";
33797 canvasContainer.appendChild(webGLRenderer.domElement);
33798 return webGLRenderer;
33802 this._webGLRenderer$.subscribe(function () { });
33803 var createRenderer$ = this._webGLRenderer$
33805 .map(function (webGLRenderer) {
33806 return function (renderer) {
33807 renderer.needsRender = true;
33808 renderer.renderer = webGLRenderer;
33812 var resizeRenderer$ = this._renderService.size$
33813 .map(function (size) {
33814 return function (renderer) {
33815 if (renderer.renderer == null) {
33818 renderer.renderer.setSize(size.width, size.height);
33819 renderer.needsRender = true;
33823 var clearRenderer$ = this._clear$
33824 .map(function (name) {
33825 return function (renderer) {
33826 if (renderer.renderer == null) {
33829 renderer.needsRender = true;
33833 Observable_1.Observable
33834 .merge(createRenderer$, resizeRenderer$, clearRenderer$)
33835 .subscribe(this._rendererOperation$);
33836 var renderCollectionEmpty$ = this._renderCollection$
33837 .filter(function (hashes) {
33838 return Object.keys(hashes).length === 0;
33841 renderCollectionEmpty$
33842 .subscribe(function (hashes) {
33843 if (_this._renderFrameSubscription == null) {
33846 _this._renderFrameSubscription.unsubscribe();
33847 _this._renderFrameSubscription = null;
33848 _this._renderFrameSubscribe();
33850 renderCollectionEmpty$
33851 .map(function (hashes) {
33852 return function (eraser) {
33853 eraser.needsRender = true;
33857 .subscribe(this._eraserOperation$);
33859 Object.defineProperty(GLRenderer.prototype, "render$", {
33861 return this._render$;
33866 Object.defineProperty(GLRenderer.prototype, "webGLRenderer$", {
33868 return this._webGLRenderer$;
33873 GLRenderer.prototype.clear = function (name) {
33874 this._clear$.next(name);
33876 GLRenderer.prototype._renderFrameSubscribe = function () {
33880 .map(function (renderHash) {
33881 return function (irc) {
33882 irc.needsRender = true;
33886 .subscribe(function (operation) {
33887 _this._renderCameraOperation$.next(operation);
33889 this._renderFrameSubscription = this._render$
33891 .mergeMap(function (hash) {
33892 return _this._renderService.renderCameraFrame$;
33894 .subscribe(this._renderFrame$);
33898 exports.GLRenderer = GLRenderer;
33899 Object.defineProperty(exports, "__esModule", { value: true });
33900 exports.default = GLRenderer;
33902 },{"../Render":230,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/startWith":77,"three":174}],322:[function(require,module,exports){
33903 /// <reference path="../../typings/index.d.ts" />
33905 var THREE = require("three");
33906 var Geo_1 = require("../Geo");
33907 var Render_1 = require("../Render");
33908 var RenderCamera = (function () {
33909 function RenderCamera(perspectiveCameraAspect, renderMode) {
33912 this._frameId = -1;
33913 this._changed = false;
33914 this._changedForFrame = -1;
33915 this.currentAspect = 1;
33916 this.currentPano = false;
33917 this.previousAspect = 1;
33918 this.previousPano = false;
33919 this.renderMode = renderMode;
33920 this._spatial = new Geo_1.Spatial();
33921 this._camera = new Geo_1.Camera();
33922 this._perspective = new THREE.PerspectiveCamera(50, perspectiveCameraAspect, 0.4, 10000);
33923 this._perspective.matrixAutoUpdate = false;
33924 this._rotation = { phi: 0, theta: 0 };
33926 Object.defineProperty(RenderCamera.prototype, "camera", {
33928 return this._camera;
33933 Object.defineProperty(RenderCamera.prototype, "changed", {
33935 return this.frameId === this._changedForFrame;
33940 Object.defineProperty(RenderCamera.prototype, "frameId", {
33942 return this._frameId;
33944 set: function (value) {
33945 this._frameId = value;
33946 if (this._changed) {
33947 this._changed = false;
33948 this._changedForFrame = value;
33954 Object.defineProperty(RenderCamera.prototype, "perspective", {
33956 return this._perspective;
33961 Object.defineProperty(RenderCamera.prototype, "rotation", {
33963 return this._rotation;
33968 RenderCamera.prototype.updateProjection = function () {
33969 var currentAspect = this._getAspect(this.currentAspect, this.currentPano, this.perspective.aspect);
33970 var previousAspect = this._getAspect(this.previousAspect, this.previousPano, this.perspective.aspect);
33971 var aspect = (1 - this.alpha) * previousAspect + this.alpha * currentAspect;
33972 var verticalFov = this._getVerticalFov(aspect, this._camera.focal, this.zoom);
33973 this._perspective.fov = verticalFov;
33974 this._perspective.updateProjectionMatrix();
33975 this._changed = true;
33977 RenderCamera.prototype.updatePerspective = function (camera) {
33978 this._perspective.up.copy(camera.up);
33979 this._perspective.position.copy(camera.position);
33980 this._perspective.lookAt(camera.lookat);
33981 this._perspective.updateMatrix();
33982 this._perspective.updateMatrixWorld(false);
33983 this._changed = true;
33985 RenderCamera.prototype.updateRotation = function (camera) {
33986 this._rotation = this._getRotation(camera);
33988 RenderCamera.prototype._getVerticalFov = function (aspect, focal, zoom) {
33989 return 2 * Math.atan(0.5 / (Math.pow(2, zoom) * aspect * focal)) * 180 / Math.PI;
33991 RenderCamera.prototype._getAspect = function (nodeAspect, pano, perspectiveCameraAspect) {
33995 var coeff = Math.max(1, 1 / nodeAspect);
33996 var usePerspective = this.renderMode === Render_1.RenderMode.Letterbox ?
33997 nodeAspect > perspectiveCameraAspect :
33998 nodeAspect < perspectiveCameraAspect;
33999 var aspect = usePerspective ?
34000 coeff * perspectiveCameraAspect :
34001 coeff * nodeAspect;
34004 RenderCamera.prototype._getRotation = function (camera) {
34005 var direction = camera.lookat.clone().sub(camera.position);
34006 var up = camera.up.clone();
34007 var upProjection = direction.clone().dot(up);
34008 var planeProjection = direction.clone().sub(up.clone().multiplyScalar(upProjection));
34009 var phi = Math.atan2(planeProjection.y, planeProjection.x);
34010 var theta = Math.PI / 2 - this._spatial.angleToPlane(direction.toArray(), [0, 0, 1]);
34011 return { phi: phi, theta: theta };
34013 return RenderCamera;
34015 exports.RenderCamera = RenderCamera;
34016 Object.defineProperty(exports, "__esModule", { value: true });
34017 exports.default = RenderCamera;
34019 },{"../Geo":227,"../Render":230,"three":174}],323:[function(require,module,exports){
34022 * Enumeration for render mode
34025 * @description Modes for specifying how rendering is done
34026 * in the viewer. All modes preserves the original aspect
34027 * ratio of the images.
34030 (function (RenderMode) {
34032 * Displays all content within the viewer.
34034 * @description Black bars shown on both
34035 * sides of the content. Bars are shown
34036 * either below and above or to the left
34037 * and right of the content depending on
34038 * the aspect ratio relation between the
34039 * image and the viewer.
34041 RenderMode[RenderMode["Letterbox"] = 0] = "Letterbox";
34043 * Fills the viewer by cropping content.
34045 * @description Cropping is done either
34046 * in horizontal or vertical direction
34047 * depending on the aspect ratio relation
34048 * between the image and the viewer.
34050 RenderMode[RenderMode["Fill"] = 1] = "Fill";
34051 })(RenderMode = exports.RenderMode || (exports.RenderMode = {}));
34052 Object.defineProperty(exports, "__esModule", { value: true });
34053 exports.default = RenderMode;
34055 },{}],324:[function(require,module,exports){
34056 /// <reference path="../../typings/index.d.ts" />
34058 var Subject_1 = require("rxjs/Subject");
34059 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
34060 require("rxjs/add/observable/combineLatest");
34061 require("rxjs/add/operator/do");
34062 require("rxjs/add/operator/filter");
34063 require("rxjs/add/operator/map");
34064 require("rxjs/add/operator/publishReplay");
34065 require("rxjs/add/operator/scan");
34066 require("rxjs/add/operator/skip");
34067 require("rxjs/add/operator/startWith");
34068 require("rxjs/add/operator/withLatestFrom");
34069 var Geo_1 = require("../Geo");
34070 var Render_1 = require("../Render");
34071 var RenderService = (function () {
34072 function RenderService(element, currentFrame$, renderMode) {
34074 this._element = element;
34075 this._currentFrame$ = currentFrame$;
34076 this._spatial = new Geo_1.Spatial();
34077 renderMode = renderMode != null ? renderMode : Render_1.RenderMode.Fill;
34078 this._resize$ = new Subject_1.Subject();
34079 this._renderCameraOperation$ = new Subject_1.Subject();
34081 new BehaviorSubject_1.BehaviorSubject({
34082 height: this._element.offsetHeight,
34083 width: this._element.offsetWidth,
34087 return { height: _this._element.offsetHeight, width: _this._element.offsetWidth };
34089 .subscribe(this._size$);
34090 this._renderMode$ = new BehaviorSubject_1.BehaviorSubject(renderMode);
34091 this._renderCameraHolder$ = this._renderCameraOperation$
34092 .startWith(function (rc) {
34095 .scan(function (rc, operation) {
34096 return operation(rc);
34097 }, new Render_1.RenderCamera(this._element.offsetWidth / this._element.offsetHeight, renderMode))
34100 this._renderCameraFrame$ = this._currentFrame$
34101 .withLatestFrom(this._renderCameraHolder$, function (frame, renderCamera) {
34102 return [frame, renderCamera];
34104 .do(function (args) {
34105 var frame = args[0];
34107 var camera = frame.state.camera;
34108 if (rc.alpha !== frame.state.alpha ||
34109 rc.zoom !== frame.state.zoom ||
34110 rc.camera.diff(camera) > 1e-9) {
34111 var currentTransform = frame.state.currentTransform;
34112 var previousTransform = frame.state.previousTransform != null ?
34113 frame.state.previousTransform :
34114 frame.state.currentTransform;
34115 var previousNode = frame.state.previousNode != null ?
34116 frame.state.previousNode :
34117 frame.state.currentNode;
34118 rc.currentAspect = currentTransform.basicAspect;
34119 rc.currentPano = frame.state.currentNode.pano;
34120 rc.previousAspect = previousTransform.basicAspect;
34121 rc.previousPano = previousNode.pano;
34122 rc.alpha = frame.state.alpha;
34123 rc.zoom = frame.state.zoom;
34124 rc.camera.copy(camera);
34125 rc.updatePerspective(camera);
34126 rc.updateRotation(camera);
34127 rc.updateProjection();
34129 rc.frameId = frame.id;
34131 .map(function (args) {
34136 this._renderCamera$ = this._renderCameraFrame$
34137 .filter(function (rc) {
34142 this._bearing$ = this._renderCamera$
34143 .map(function (renderCamera) {
34144 var bearing = _this._spatial.radToDeg(_this._spatial.azimuthalToBearing(renderCamera.rotation.phi));
34145 return _this._spatial.wrap(bearing, 0, 360);
34151 .map(function (size) {
34152 return function (rc) {
34153 rc.perspective.aspect = size.width / size.height;
34154 rc.updateProjection();
34158 .subscribe(this._renderCameraOperation$);
34161 .map(function (rm) {
34162 return function (rc) {
34163 rc.renderMode = rm;
34164 rc.updateProjection();
34168 .subscribe(this._renderCameraOperation$);
34169 this._bearing$.subscribe(function () { });
34170 this._renderCameraHolder$.subscribe(function () { });
34171 this._size$.subscribe(function () { });
34172 this._renderMode$.subscribe(function () { });
34173 this._renderCamera$.subscribe(function () { });
34174 this._renderCameraFrame$.subscribe(function () { });
34176 Object.defineProperty(RenderService.prototype, "bearing$", {
34178 return this._bearing$;
34183 Object.defineProperty(RenderService.prototype, "element", {
34185 return this._element;
34190 Object.defineProperty(RenderService.prototype, "resize$", {
34192 return this._resize$;
34197 Object.defineProperty(RenderService.prototype, "size$", {
34199 return this._size$;
34204 Object.defineProperty(RenderService.prototype, "renderMode$", {
34206 return this._renderMode$;
34211 Object.defineProperty(RenderService.prototype, "renderCameraFrame$", {
34213 return this._renderCameraFrame$;
34218 Object.defineProperty(RenderService.prototype, "renderCamera$", {
34220 return this._renderCamera$;
34225 return RenderService;
34227 exports.RenderService = RenderService;
34228 Object.defineProperty(exports, "__esModule", { value: true });
34229 exports.default = RenderService;
34231 },{"../Geo":227,"../Render":230,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/skip":74,"rxjs/add/operator/startWith":77,"rxjs/add/operator/withLatestFrom":82}],325:[function(require,module,exports){
34234 (function (State) {
34235 State[State["Traversing"] = 0] = "Traversing";
34236 State[State["Waiting"] = 1] = "Waiting";
34237 })(State = exports.State || (exports.State = {}));
34238 Object.defineProperty(exports, "__esModule", { value: true });
34239 exports.default = State;
34241 },{}],326:[function(require,module,exports){
34243 var State_1 = require("../State");
34244 var Geo_1 = require("../Geo");
34245 var StateContext = (function () {
34246 function StateContext() {
34247 this._state = new State_1.TraversingState({
34249 camera: new Geo_1.Camera(),
34251 reference: { alt: 0, lat: 0, lon: 0 },
34256 StateContext.prototype.traverse = function () {
34257 this._state = this._state.traverse();
34259 StateContext.prototype.wait = function () {
34260 this._state = this._state.wait();
34262 Object.defineProperty(StateContext.prototype, "state", {
34264 if (this._state instanceof State_1.TraversingState) {
34265 return State_1.State.Traversing;
34267 else if (this._state instanceof State_1.WaitingState) {
34268 return State_1.State.Waiting;
34270 throw new Error("Invalid state");
34275 Object.defineProperty(StateContext.prototype, "reference", {
34277 return this._state.reference;
34282 Object.defineProperty(StateContext.prototype, "alpha", {
34284 return this._state.alpha;
34289 Object.defineProperty(StateContext.prototype, "camera", {
34291 return this._state.camera;
34296 Object.defineProperty(StateContext.prototype, "zoom", {
34298 return this._state.zoom;
34303 Object.defineProperty(StateContext.prototype, "currentNode", {
34305 return this._state.currentNode;
34310 Object.defineProperty(StateContext.prototype, "previousNode", {
34312 return this._state.previousNode;
34317 Object.defineProperty(StateContext.prototype, "currentCamera", {
34319 return this._state.currentCamera;
34324 Object.defineProperty(StateContext.prototype, "currentTransform", {
34326 return this._state.currentTransform;
34331 Object.defineProperty(StateContext.prototype, "previousTransform", {
34333 return this._state.previousTransform;
34338 Object.defineProperty(StateContext.prototype, "trajectory", {
34340 return this._state.trajectory;
34345 Object.defineProperty(StateContext.prototype, "currentIndex", {
34347 return this._state.currentIndex;
34352 Object.defineProperty(StateContext.prototype, "lastNode", {
34354 return this._state.trajectory[this._state.trajectory.length - 1];
34359 Object.defineProperty(StateContext.prototype, "nodesAhead", {
34361 return this._state.trajectory.length - 1 - this._state.currentIndex;
34366 Object.defineProperty(StateContext.prototype, "motionless", {
34368 return this._state.motionless;
34373 StateContext.prototype.getCenter = function () {
34374 return this._state.getCenter();
34376 StateContext.prototype.setCenter = function (center) {
34377 this._state.setCenter(center);
34379 StateContext.prototype.setZoom = function (zoom) {
34380 this._state.setZoom(zoom);
34382 StateContext.prototype.update = function (fps) {
34383 this._state.update(fps);
34385 StateContext.prototype.append = function (nodes) {
34386 this._state.append(nodes);
34388 StateContext.prototype.prepend = function (nodes) {
34389 this._state.prepend(nodes);
34391 StateContext.prototype.remove = function (n) {
34392 this._state.remove(n);
34394 StateContext.prototype.clear = function () {
34395 this._state.clear();
34397 StateContext.prototype.clearPrior = function () {
34398 this._state.clearPrior();
34400 StateContext.prototype.cut = function () {
34403 StateContext.prototype.set = function (nodes) {
34404 this._state.set(nodes);
34406 StateContext.prototype.rotate = function (delta) {
34407 this._state.rotate(delta);
34409 StateContext.prototype.rotateBasic = function (basicRotation) {
34410 this._state.rotateBasic(basicRotation);
34412 StateContext.prototype.rotateBasicUnbounded = function (basicRotation) {
34413 this._state.rotateBasicUnbounded(basicRotation);
34415 StateContext.prototype.rotateToBasic = function (basic) {
34416 this._state.rotateToBasic(basic);
34418 StateContext.prototype.move = function (delta) {
34419 this._state.move(delta);
34421 StateContext.prototype.moveTo = function (delta) {
34422 this._state.moveTo(delta);
34424 StateContext.prototype.zoomIn = function (delta, reference) {
34425 this._state.zoomIn(delta, reference);
34427 return StateContext;
34429 exports.StateContext = StateContext;
34431 },{"../Geo":227,"../State":231}],327:[function(require,module,exports){
34433 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
34434 var Subject_1 = require("rxjs/Subject");
34435 var AnimationFrame_1 = require("rxjs/util/AnimationFrame");
34436 require("rxjs/add/operator/bufferCount");
34437 require("rxjs/add/operator/distinctUntilChanged");
34438 require("rxjs/add/operator/do");
34439 require("rxjs/add/operator/filter");
34440 require("rxjs/add/operator/first");
34441 require("rxjs/add/operator/map");
34442 require("rxjs/add/operator/pairwise");
34443 require("rxjs/add/operator/publishReplay");
34444 require("rxjs/add/operator/scan");
34445 require("rxjs/add/operator/startWith");
34446 require("rxjs/add/operator/switchMap");
34447 require("rxjs/add/operator/withLatestFrom");
34448 var State_1 = require("../State");
34449 var StateService = (function () {
34450 function StateService() {
34452 this._appendNode$ = new Subject_1.Subject();
34453 this._start$ = new Subject_1.Subject();
34454 this._frame$ = new Subject_1.Subject();
34455 this._fpsSampleRate = 30;
34456 this._contextOperation$ = new BehaviorSubject_1.BehaviorSubject(function (context) {
34459 this._context$ = this._contextOperation$
34460 .scan(function (context, operation) {
34461 return operation(context);
34462 }, new State_1.StateContext())
34465 this._state$ = this._context$
34466 .map(function (context) {
34467 return context.state;
34469 .distinctUntilChanged()
34472 this._fps$ = this._start$
34473 .switchMap(function () {
34474 return _this._frame$
34475 .bufferCount(1, _this._fpsSampleRate)
34476 .map(function (frameIds) {
34477 return new Date().getTime();
34480 .map(function (times) {
34481 return Math.max(20, 1000 * _this._fpsSampleRate / (times[1] - times[0]));
34486 this._currentState$ = this._frame$
34487 .withLatestFrom(this._fps$, this._context$, function (frameId, fps, context) {
34488 return [frameId, fps, context];
34490 .filter(function (fc) {
34491 return fc[2].currentNode != null;
34493 .do(function (fc) {
34494 fc[2].update(fc[1]);
34496 .map(function (fc) {
34497 return { fps: fc[1], id: fc[0], state: fc[2] };
34500 this._lastState$ = this._currentState$
34503 var nodeChanged$ = this._currentState$
34504 .distinctUntilChanged(undefined, function (f) {
34505 return f.state.currentNode.key;
34509 var nodeChangedSubject$ = new Subject_1.Subject();
34511 .subscribe(nodeChangedSubject$);
34512 this._currentKey$ = new BehaviorSubject_1.BehaviorSubject(null);
34513 nodeChangedSubject$
34514 .map(function (f) {
34515 return f.state.currentNode.key;
34517 .subscribe(this._currentKey$);
34518 this._currentNode$ = nodeChangedSubject$
34519 .map(function (f) {
34520 return f.state.currentNode;
34524 this._currentCamera$ = nodeChangedSubject$
34525 .map(function (f) {
34526 return f.state.currentCamera;
34530 this._currentTransform$ = nodeChangedSubject$
34531 .map(function (f) {
34532 return f.state.currentTransform;
34536 this._reference$ = nodeChangedSubject$
34537 .map(function (f) {
34538 return f.state.reference;
34540 .distinctUntilChanged(function (r1, r2) {
34541 return r1.lat === r2.lat && r1.lon === r2.lon;
34542 }, function (reference) {
34543 return { lat: reference.lat, lon: reference.lon };
34547 this._currentNodeExternal$ = nodeChanged$
34548 .map(function (f) {
34549 return f.state.currentNode;
34554 .map(function (node) {
34555 return function (context) {
34556 context.append([node]);
34560 .subscribe(this._contextOperation$);
34561 this._inMotionOperation$ = new Subject_1.Subject();
34563 .map(function (frame) {
34566 .subscribe(this._inMotionOperation$);
34567 this._inMotionOperation$
34568 .distinctUntilChanged()
34569 .filter(function (moving) {
34572 .switchMap(function (moving) {
34573 return _this._currentState$
34574 .filter(function (frame) {
34575 return frame.state.nodesAhead === 0;
34577 .map(function (frame) {
34578 return [frame.state.camera.clone(), frame.state.zoom];
34581 .map(function (pair) {
34582 var c1 = pair[0][0];
34583 var c2 = pair[1][0];
34584 var z1 = pair[0][1];
34585 var z2 = pair[1][1];
34586 return c1.diff(c2) > 1e-5 || Math.abs(z1 - z2) > 1e-5;
34588 .first(function (changed) {
34592 .subscribe(this._inMotionOperation$);
34593 this._inMotion$ = this._inMotionOperation$
34594 .distinctUntilChanged()
34597 this._inTranslationOperation$ = new Subject_1.Subject();
34599 .map(function (frame) {
34602 .subscribe(this._inTranslationOperation$);
34603 this._inTranslationOperation$
34604 .distinctUntilChanged()
34605 .filter(function (inTranslation) {
34606 return inTranslation;
34608 .switchMap(function (inTranslation) {
34609 return _this._currentState$
34610 .filter(function (frame) {
34611 return frame.state.nodesAhead === 0;
34613 .map(function (frame) {
34614 return frame.state.camera.position.clone();
34617 .map(function (pair) {
34618 return pair[0].distanceToSquared(pair[1]) !== 0;
34620 .first(function (changed) {
34624 .subscribe(this._inTranslationOperation$);
34625 this._inTranslation$ = this._inTranslationOperation$
34626 .distinctUntilChanged()
34629 this._state$.subscribe(function () { });
34630 this._currentNode$.subscribe(function () { });
34631 this._currentCamera$.subscribe(function () { });
34632 this._currentTransform$.subscribe(function () { });
34633 this._reference$.subscribe(function () { });
34634 this._currentNodeExternal$.subscribe(function () { });
34635 this._lastState$.subscribe(function () { });
34636 this._inMotion$.subscribe(function () { });
34637 this._inTranslation$.subscribe(function () { });
34638 this._frameId = null;
34639 this._frameGenerator = new AnimationFrame_1.RequestAnimationFrameDefinition(window);
34641 Object.defineProperty(StateService.prototype, "currentState$", {
34643 return this._currentState$;
34648 Object.defineProperty(StateService.prototype, "currentNode$", {
34650 return this._currentNode$;
34655 Object.defineProperty(StateService.prototype, "currentKey$", {
34657 return this._currentKey$;
34662 Object.defineProperty(StateService.prototype, "currentNodeExternal$", {
34664 return this._currentNodeExternal$;
34669 Object.defineProperty(StateService.prototype, "currentCamera$", {
34671 return this._currentCamera$;
34676 Object.defineProperty(StateService.prototype, "currentTransform$", {
34678 return this._currentTransform$;
34683 Object.defineProperty(StateService.prototype, "state$", {
34685 return this._state$;
34690 Object.defineProperty(StateService.prototype, "reference$", {
34692 return this._reference$;
34697 Object.defineProperty(StateService.prototype, "inMotion$", {
34699 return this._inMotion$;
34704 Object.defineProperty(StateService.prototype, "inTranslation$", {
34706 return this._inTranslation$;
34711 Object.defineProperty(StateService.prototype, "appendNode$", {
34713 return this._appendNode$;
34718 StateService.prototype.traverse = function () {
34719 this._inMotionOperation$.next(true);
34720 this._invokeContextOperation(function (context) { context.traverse(); });
34722 StateService.prototype.wait = function () {
34723 this._invokeContextOperation(function (context) { context.wait(); });
34725 StateService.prototype.appendNodes = function (nodes) {
34726 this._invokeContextOperation(function (context) { context.append(nodes); });
34728 StateService.prototype.prependNodes = function (nodes) {
34729 this._invokeContextOperation(function (context) { context.prepend(nodes); });
34731 StateService.prototype.removeNodes = function (n) {
34732 this._invokeContextOperation(function (context) { context.remove(n); });
34734 StateService.prototype.clearNodes = function () {
34735 this._invokeContextOperation(function (context) { context.clear(); });
34737 StateService.prototype.clearPriorNodes = function () {
34738 this._invokeContextOperation(function (context) { context.clearPrior(); });
34740 StateService.prototype.cutNodes = function () {
34741 this._invokeContextOperation(function (context) { context.cut(); });
34743 StateService.prototype.setNodes = function (nodes) {
34744 this._invokeContextOperation(function (context) { context.set(nodes); });
34746 StateService.prototype.rotate = function (delta) {
34747 this._inMotionOperation$.next(true);
34748 this._invokeContextOperation(function (context) { context.rotate(delta); });
34750 StateService.prototype.rotateBasic = function (basicRotation) {
34751 this._inMotionOperation$.next(true);
34752 this._invokeContextOperation(function (context) { context.rotateBasic(basicRotation); });
34754 StateService.prototype.rotateBasicUnbounded = function (basicRotation) {
34755 this._inMotionOperation$.next(true);
34756 this._invokeContextOperation(function (context) { context.rotateBasicUnbounded(basicRotation); });
34758 StateService.prototype.rotateToBasic = function (basic) {
34759 this._inMotionOperation$.next(true);
34760 this._invokeContextOperation(function (context) { context.rotateToBasic(basic); });
34762 StateService.prototype.move = function (delta) {
34763 this._inMotionOperation$.next(true);
34764 this._invokeContextOperation(function (context) { context.move(delta); });
34766 StateService.prototype.moveTo = function (position) {
34767 this._inMotionOperation$.next(true);
34768 this._invokeContextOperation(function (context) { context.moveTo(position); });
34771 * Change zoom level while keeping the reference point position approximately static.
34773 * @parameter {number} delta - Change in zoom level.
34774 * @parameter {Array<number>} reference - Reference point in basic coordinates.
34776 StateService.prototype.zoomIn = function (delta, reference) {
34777 this._inMotionOperation$.next(true);
34778 this._invokeContextOperation(function (context) { context.zoomIn(delta, reference); });
34780 StateService.prototype.getCenter = function () {
34781 return this._lastState$
34783 .map(function (frame) {
34784 return frame.state.getCenter();
34787 StateService.prototype.getZoom = function () {
34788 return this._lastState$
34790 .map(function (frame) {
34791 return frame.state.zoom;
34794 StateService.prototype.setCenter = function (center) {
34795 this._inMotionOperation$.next(true);
34796 this._invokeContextOperation(function (context) { context.setCenter(center); });
34798 StateService.prototype.setZoom = function (zoom) {
34799 this._inMotionOperation$.next(true);
34800 this._invokeContextOperation(function (context) { context.setZoom(zoom); });
34802 StateService.prototype.start = function () {
34803 if (this._frameId == null) {
34804 this._start$.next(null);
34805 this._frameId = this._frameGenerator.requestAnimationFrame(this._frame.bind(this));
34806 this._frame$.next(this._frameId);
34809 StateService.prototype.stop = function () {
34810 if (this._frameId != null) {
34811 this._frameGenerator.cancelAnimationFrame(this._frameId);
34812 this._frameId = null;
34815 StateService.prototype._invokeContextOperation = function (action) {
34816 this._contextOperation$
34817 .next(function (context) {
34822 StateService.prototype._frame = function (time) {
34823 this._frameId = this._frameGenerator.requestAnimationFrame(this._frame.bind(this));
34824 this._frame$.next(this._frameId);
34826 return StateService;
34828 exports.StateService = StateService;
34830 },{"../State":231,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/pairwise":68,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82,"rxjs/util/AnimationFrame":155}],328:[function(require,module,exports){
34831 /// <reference path="../../../typings/index.d.ts" />
34833 var Error_1 = require("../../Error");
34834 var Geo_1 = require("../../Geo");
34835 var StateBase = (function () {
34836 function StateBase(state) {
34837 this._spatial = new Geo_1.Spatial();
34838 this._geoCoords = new Geo_1.GeoCoords();
34839 this._referenceThreshold = 0.01;
34840 this._reference = state.reference;
34841 this._alpha = state.alpha;
34842 this._camera = state.camera.clone();
34843 this._zoom = state.zoom;
34844 this._currentIndex = state.currentIndex;
34845 this._trajectory = state.trajectory.slice();
34846 this._trajectoryTransforms = [];
34847 this._trajectoryCameras = [];
34848 for (var _i = 0, _a = this._trajectory; _i < _a.length; _i++) {
34850 var translation = this._nodeToTranslation(node);
34851 var transform = new Geo_1.Transform(node, node.image, translation);
34852 this._trajectoryTransforms.push(transform);
34853 this._trajectoryCameras.push(new Geo_1.Camera(transform));
34855 this._currentNode = this._trajectory.length > 0 ?
34856 this._trajectory[this._currentIndex] :
34858 this._previousNode = this._trajectory.length > 1 && this.currentIndex > 0 ?
34859 this._trajectory[this._currentIndex - 1] :
34861 this._currentCamera = this._trajectoryCameras.length > 0 ?
34862 this._trajectoryCameras[this._currentIndex].clone() :
34863 new Geo_1.Camera();
34864 this._previousCamera = this._trajectoryCameras.length > 1 && this.currentIndex > 0 ?
34865 this._trajectoryCameras[this._currentIndex - 1].clone() :
34866 this._currentCamera.clone();
34868 Object.defineProperty(StateBase.prototype, "reference", {
34870 return this._reference;
34875 Object.defineProperty(StateBase.prototype, "alpha", {
34877 return this._getAlpha();
34882 Object.defineProperty(StateBase.prototype, "camera", {
34884 return this._camera;
34889 Object.defineProperty(StateBase.prototype, "zoom", {
34896 Object.defineProperty(StateBase.prototype, "trajectory", {
34898 return this._trajectory;
34903 Object.defineProperty(StateBase.prototype, "currentIndex", {
34905 return this._currentIndex;
34910 Object.defineProperty(StateBase.prototype, "currentNode", {
34912 return this._currentNode;
34917 Object.defineProperty(StateBase.prototype, "previousNode", {
34919 return this._previousNode;
34924 Object.defineProperty(StateBase.prototype, "currentCamera", {
34926 return this._currentCamera;
34931 Object.defineProperty(StateBase.prototype, "currentTransform", {
34933 return this._trajectoryTransforms.length > 0 ?
34934 this._trajectoryTransforms[this.currentIndex] : null;
34939 Object.defineProperty(StateBase.prototype, "previousTransform", {
34941 return this._trajectoryTransforms.length > 1 && this.currentIndex > 0 ?
34942 this._trajectoryTransforms[this.currentIndex - 1] : null;
34947 Object.defineProperty(StateBase.prototype, "motionless", {
34949 return this._motionless;
34954 StateBase.prototype.append = function (nodes) {
34955 if (nodes.length < 1) {
34956 throw Error("Trajectory can not be empty");
34958 if (this._currentIndex < 0) {
34962 this._trajectory = this._trajectory.concat(nodes);
34963 this._appendToTrajectories(nodes);
34966 StateBase.prototype.prepend = function (nodes) {
34967 if (nodes.length < 1) {
34968 throw Error("Trajectory can not be empty");
34970 this._trajectory = nodes.slice().concat(this._trajectory);
34971 this._currentIndex += nodes.length;
34972 this._setCurrentNode();
34973 var referenceReset = this._setReference(this._currentNode);
34974 if (referenceReset) {
34975 this._setTrajectories();
34978 this._prependToTrajectories(nodes);
34980 this._setCurrentCamera();
34982 StateBase.prototype.remove = function (n) {
34984 throw Error("n must be a positive integer");
34986 if (this._currentIndex - 1 < n) {
34987 throw Error("Current and previous nodes can not be removed");
34989 for (var i = 0; i < n; i++) {
34990 this._trajectory.shift();
34991 this._trajectoryTransforms.shift();
34992 this._trajectoryCameras.shift();
34993 this._currentIndex--;
34995 this._setCurrentNode();
34997 StateBase.prototype.clearPrior = function () {
34998 if (this._currentIndex > 0) {
34999 this.remove(this._currentIndex - 1);
35002 StateBase.prototype.clear = function () {
35004 if (this._currentIndex > 0) {
35005 this.remove(this._currentIndex - 1);
35008 StateBase.prototype.cut = function () {
35009 while (this._trajectory.length - 1 > this._currentIndex) {
35010 this._trajectory.pop();
35011 this._trajectoryTransforms.pop();
35012 this._trajectoryCameras.pop();
35015 StateBase.prototype.set = function (nodes) {
35016 this._setTrajectory(nodes);
35017 this._setCurrentNode();
35018 this._setReference(this._currentNode);
35019 this._setTrajectories();
35020 this._setCurrentCamera();
35022 StateBase.prototype.getCenter = function () {
35023 return this._currentNode != null ?
35024 this.currentTransform.projectBasic(this._camera.lookat.toArray()) :
35027 StateBase.prototype._setCurrent = function () {
35028 this._setCurrentNode();
35029 var referenceReset = this._setReference(this._currentNode);
35030 if (referenceReset) {
35031 this._setTrajectories();
35033 this._setCurrentCamera();
35035 StateBase.prototype._setCurrentCamera = function () {
35036 this._currentCamera = this._trajectoryCameras[this._currentIndex].clone();
35037 this._previousCamera = this._currentIndex > 0 ?
35038 this._trajectoryCameras[this._currentIndex - 1].clone() :
35039 this._currentCamera.clone();
35041 StateBase.prototype._motionlessTransition = function () {
35042 var nodesSet = this._currentNode != null && this._previousNode != null;
35043 return nodesSet && !(this._currentNode.merged &&
35044 this._previousNode.merged &&
35045 this._withinOriginalDistance() &&
35046 this._sameConnectedComponent());
35048 StateBase.prototype._setReference = function (node) {
35049 // do not reset reference if node is within threshold distance
35050 if (Math.abs(node.latLon.lat - this.reference.lat) < this._referenceThreshold &&
35051 Math.abs(node.latLon.lon - this.reference.lon) < this._referenceThreshold) {
35054 // do not reset reference if previous node exist and transition is with motion
35055 if (this._previousNode != null && !this._motionlessTransition()) {
35058 this._reference.lat = node.latLon.lat;
35059 this._reference.lon = node.latLon.lon;
35060 this._reference.alt = node.alt;
35063 StateBase.prototype._setCurrentNode = function () {
35064 this._currentNode = this._trajectory.length > 0 ?
35065 this._trajectory[this._currentIndex] :
35067 this._previousNode = this._currentIndex > 0 ?
35068 this._trajectory[this._currentIndex - 1] :
35071 StateBase.prototype._setTrajectory = function (nodes) {
35072 if (nodes.length < 1) {
35073 throw new Error_1.ArgumentMapillaryError("Trajectory can not be empty");
35075 if (this._currentNode != null) {
35076 this._trajectory = [this._currentNode].concat(nodes);
35077 this._currentIndex = 1;
35080 this._trajectory = nodes.slice();
35081 this._currentIndex = 0;
35084 StateBase.prototype._setTrajectories = function () {
35085 this._trajectoryTransforms.length = 0;
35086 this._trajectoryCameras.length = 0;
35087 this._appendToTrajectories(this._trajectory);
35089 StateBase.prototype._appendToTrajectories = function (nodes) {
35090 for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
35091 var node = nodes_1[_i];
35092 if (!node.assetsCached) {
35093 throw new Error_1.ArgumentMapillaryError("Assets must be cached when node is added to trajectory");
35095 var translation = this._nodeToTranslation(node);
35096 var transform = new Geo_1.Transform(node, node.image, translation);
35097 this._trajectoryTransforms.push(transform);
35098 this._trajectoryCameras.push(new Geo_1.Camera(transform));
35101 StateBase.prototype._prependToTrajectories = function (nodes) {
35102 for (var _i = 0, _a = nodes.reverse(); _i < _a.length; _i++) {
35104 if (!node.assetsCached) {
35105 throw new Error_1.ArgumentMapillaryError("Assets must be cached when added to trajectory");
35107 var translation = this._nodeToTranslation(node);
35108 var transform = new Geo_1.Transform(node, node.image, translation);
35109 this._trajectoryTransforms.unshift(transform);
35110 this._trajectoryCameras.unshift(new Geo_1.Camera(transform));
35113 StateBase.prototype._nodeToTranslation = function (node) {
35114 var C = this._geoCoords.geodeticToEnu(node.latLon.lat, node.latLon.lon, node.alt, this._reference.lat, this._reference.lon, this._reference.alt);
35115 var RC = this._spatial.rotate(C, node.rotation);
35116 return [-RC.x, -RC.y, -RC.z];
35118 StateBase.prototype._sameConnectedComponent = function () {
35119 var current = this._currentNode;
35120 var previous = this._previousNode;
35122 !current.mergeCC ||
35124 !previous.mergeCC) {
35127 return current.mergeCC === previous.mergeCC;
35129 StateBase.prototype._withinOriginalDistance = function () {
35130 var current = this._currentNode;
35131 var previous = this._previousNode;
35132 if (!current || !previous) {
35135 // 50 km/h moves 28m in 2s
35136 var distance = this._spatial.distanceFromLatLon(current.originalLatLon.lat, current.originalLatLon.lon, previous.originalLatLon.lat, previous.originalLatLon.lon);
35137 return distance < 25;
35141 exports.StateBase = StateBase;
35143 },{"../../Error":226,"../../Geo":227}],329:[function(require,module,exports){
35144 /// <reference path="../../../typings/index.d.ts" />
35146 var __extends = (this && this.__extends) || function (d, b) {
35147 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
35148 function __() { this.constructor = d; }
35149 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
35151 var THREE = require("three");
35152 var UnitBezier = require("unitbezier");
35153 var State_1 = require("../../State");
35154 var RotationDelta = (function () {
35155 function RotationDelta(phi, theta) {
35157 this._theta = theta;
35159 Object.defineProperty(RotationDelta.prototype, "phi", {
35163 set: function (value) {
35169 Object.defineProperty(RotationDelta.prototype, "theta", {
35171 return this._theta;
35173 set: function (value) {
35174 this._theta = value;
35179 Object.defineProperty(RotationDelta.prototype, "isZero", {
35181 return this._phi === 0 && this._theta === 0;
35186 RotationDelta.prototype.copy = function (delta) {
35187 this._phi = delta.phi;
35188 this._theta = delta.theta;
35190 RotationDelta.prototype.lerp = function (other, alpha) {
35191 this._phi = (1 - alpha) * this._phi + alpha * other.phi;
35192 this._theta = (1 - alpha) * this._theta + alpha * other.theta;
35194 RotationDelta.prototype.multiply = function (value) {
35195 this._phi *= value;
35196 this._theta *= value;
35198 RotationDelta.prototype.threshold = function (value) {
35199 this._phi = Math.abs(this._phi) > value ? this._phi : 0;
35200 this._theta = Math.abs(this._theta) > value ? this._theta : 0;
35202 RotationDelta.prototype.lengthSquared = function () {
35203 return this._phi * this._phi + this._theta * this._theta;
35205 RotationDelta.prototype.reset = function () {
35209 return RotationDelta;
35211 var TraversingState = (function (_super) {
35212 __extends(TraversingState, _super);
35213 function TraversingState(state) {
35214 var _this = _super.call(this, state) || this;
35215 _this._adjustCameras();
35216 _this._motionless = _this._motionlessTransition();
35217 _this._baseAlpha = _this._alpha;
35218 _this._animationSpeed = 0.025;
35219 _this._unitBezier = new UnitBezier(0.74, 0.67, 0.38, 0.96);
35220 _this._useBezier = false;
35221 _this._rotationDelta = new RotationDelta(0, 0);
35222 _this._requestedRotationDelta = null;
35223 _this._basicRotation = [0, 0];
35224 _this._requestedBasicRotation = null;
35225 _this._requestedBasicRotationUnbounded = null;
35226 _this._rotationAcceleration = 0.86;
35227 _this._rotationIncreaseAlpha = 0.97;
35228 _this._rotationDecreaseAlpha = 0.9;
35229 _this._rotationThreshold = 1e-3;
35230 _this._unboundedRotationAlpha = 0.8;
35231 _this._desiredZoom = state.zoom;
35232 _this._minZoom = 0;
35233 _this._maxZoom = 3;
35234 _this._lookatDepth = 10;
35235 _this._desiredLookat = null;
35236 _this._desiredCenter = null;
35239 TraversingState.prototype.traverse = function () {
35240 throw new Error("Not implemented");
35242 TraversingState.prototype.wait = function () {
35243 return new State_1.WaitingState(this);
35245 TraversingState.prototype.append = function (nodes) {
35246 var emptyTrajectory = this._trajectory.length === 0;
35247 if (emptyTrajectory) {
35248 this._resetTransition();
35250 _super.prototype.append.call(this, nodes);
35251 if (emptyTrajectory) {
35252 this._setDesiredCenter();
35253 this._setDesiredZoom();
35256 TraversingState.prototype.prepend = function (nodes) {
35257 var emptyTrajectory = this._trajectory.length === 0;
35258 if (emptyTrajectory) {
35259 this._resetTransition();
35261 _super.prototype.prepend.call(this, nodes);
35262 if (emptyTrajectory) {
35263 this._setDesiredCenter();
35264 this._setDesiredZoom();
35267 TraversingState.prototype.set = function (nodes) {
35268 _super.prototype.set.call(this, nodes);
35269 this._desiredLookat = null;
35270 this._resetTransition();
35271 this._clearRotation();
35272 this._setDesiredCenter();
35273 this._setDesiredZoom();
35274 if (this._trajectory.length < 3) {
35275 this._useBezier = true;
35278 TraversingState.prototype.move = function (delta) {
35279 throw new Error("Not implemented");
35281 TraversingState.prototype.moveTo = function (delta) {
35282 throw new Error("Not implemented");
35284 TraversingState.prototype.rotate = function (rotationDelta) {
35285 if (this._currentNode == null) {
35288 this._desiredZoom = this._zoom;
35289 this._desiredLookat = null;
35290 this._requestedBasicRotation = null;
35291 if (this._requestedRotationDelta != null) {
35292 this._requestedRotationDelta.phi = this._requestedRotationDelta.phi + rotationDelta.phi;
35293 this._requestedRotationDelta.theta = this._requestedRotationDelta.theta + rotationDelta.theta;
35296 this._requestedRotationDelta = new RotationDelta(rotationDelta.phi, rotationDelta.theta);
35299 TraversingState.prototype.rotateBasic = function (basicRotation) {
35300 if (this._currentNode == null) {
35303 this._desiredZoom = this._zoom;
35304 this._desiredLookat = null;
35305 this._requestedRotationDelta = null;
35306 if (this._requestedBasicRotation != null) {
35307 this._requestedBasicRotation[0] += basicRotation[0];
35308 this._requestedBasicRotation[1] += basicRotation[1];
35309 var threshold = 0.05 / Math.pow(2, this._zoom);
35310 this._requestedBasicRotation[0] =
35311 this._spatial.clamp(this._requestedBasicRotation[0], -threshold, threshold);
35312 this._requestedBasicRotation[1] =
35313 this._spatial.clamp(this._requestedBasicRotation[1], -threshold, threshold);
35316 this._requestedBasicRotation = basicRotation.slice();
35319 TraversingState.prototype.rotateBasicUnbounded = function (basicRotation) {
35320 if (this._currentNode == null) {
35323 if (this._requestedBasicRotationUnbounded != null) {
35324 this._requestedBasicRotationUnbounded[0] += basicRotation[0];
35325 this._requestedBasicRotationUnbounded[1] += basicRotation[1];
35328 this._requestedBasicRotationUnbounded = basicRotation.slice();
35331 TraversingState.prototype.rotateToBasic = function (basic) {
35332 if (this._currentNode == null) {
35335 this._desiredZoom = this._zoom;
35336 this._desiredLookat = null;
35337 basic[0] = this._spatial.clamp(basic[0], 0, 1);
35338 basic[1] = this._spatial.clamp(basic[1], 0, 1);
35339 var lookat = this.currentTransform.unprojectBasic(basic, this._lookatDepth);
35340 this._currentCamera.lookat.fromArray(lookat);
35342 TraversingState.prototype.zoomIn = function (delta, reference) {
35343 if (this._currentNode == null) {
35346 this._desiredZoom = Math.max(this._minZoom, Math.min(this._maxZoom, this._desiredZoom + delta));
35347 var currentCenter = this.currentTransform.projectBasic(this._currentCamera.lookat.toArray());
35348 var currentCenterX = currentCenter[0];
35349 var currentCenterY = currentCenter[1];
35350 var zoom0 = Math.pow(2, this._zoom);
35351 var zoom1 = Math.pow(2, this._desiredZoom);
35352 var refX = reference[0];
35353 var refY = reference[1];
35354 if (this.currentTransform.gpano != null &&
35355 this.currentTransform.gpano.CroppedAreaImageWidthPixels === this.currentTransform.gpano.FullPanoWidthPixels) {
35356 if (refX - currentCenterX > 0.5) {
35359 else if (currentCenterX - refX > 0.5) {
35363 var newCenterX = refX - zoom0 / zoom1 * (refX - currentCenterX);
35364 var newCenterY = refY - zoom0 / zoom1 * (refY - currentCenterY);
35365 var gpano = this.currentTransform.gpano;
35366 if (this._currentNode.fullPano) {
35367 newCenterX = this._spatial.wrap(newCenterX + this._basicRotation[0], 0, 1);
35368 newCenterY = this._spatial.clamp(newCenterY + this._basicRotation[1], 0.05, 0.95);
35370 else if (gpano != null &&
35371 this.currentTransform.gpano.CroppedAreaImageWidthPixels === this.currentTransform.gpano.FullPanoWidthPixels) {
35372 newCenterX = this._spatial.wrap(newCenterX + this._basicRotation[0], 0, 1);
35373 newCenterY = this._spatial.clamp(newCenterY + this._basicRotation[1], 0, 1);
35376 newCenterX = this._spatial.clamp(newCenterX, 0, 1);
35377 newCenterY = this._spatial.clamp(newCenterY, 0, 1);
35379 this._desiredLookat = new THREE.Vector3()
35380 .fromArray(this.currentTransform.unprojectBasic([newCenterX, newCenterY], this._lookatDepth));
35382 TraversingState.prototype.setCenter = function (center) {
35383 this._desiredLookat = null;
35384 this._requestedRotationDelta = null;
35385 this._requestedBasicRotation = null;
35386 this._desiredZoom = this._zoom;
35388 this._spatial.clamp(center[0], 0, 1),
35389 this._spatial.clamp(center[1], 0, 1),
35391 if (this._currentNode == null) {
35392 this._desiredCenter = clamped;
35395 this._desiredCenter = null;
35396 var currentLookat = new THREE.Vector3()
35397 .fromArray(this.currentTransform.unprojectBasic(clamped, this._lookatDepth));
35398 var previousTransform = this.previousTransform != null ?
35399 this.previousTransform :
35400 this.currentTransform;
35401 var previousLookat = new THREE.Vector3()
35402 .fromArray(previousTransform.unprojectBasic(clamped, this._lookatDepth));
35403 this._currentCamera.lookat.copy(currentLookat);
35404 this._previousCamera.lookat.copy(previousLookat);
35406 TraversingState.prototype.setZoom = function (zoom) {
35407 this._desiredLookat = null;
35408 this._requestedRotationDelta = null;
35409 this._requestedBasicRotation = null;
35410 this._zoom = this._spatial.clamp(zoom, this._minZoom, this._maxZoom);
35411 this._desiredZoom = this._zoom;
35413 TraversingState.prototype.update = function (fps) {
35414 if (this._alpha === 1 && this._currentIndex + this._alpha < this._trajectory.length) {
35415 this._currentIndex += 1;
35416 this._useBezier = this._trajectory.length < 3 &&
35417 this._currentIndex + 1 === this._trajectory.length;
35418 this._setCurrent();
35419 this._resetTransition();
35420 this._clearRotation();
35421 this._desiredZoom = this._currentNode.fullPano ? this._zoom : 0;
35422 this._desiredLookat = null;
35424 var animationSpeed = this._animationSpeed * (60 / fps);
35425 this._baseAlpha = Math.min(1, this._baseAlpha + animationSpeed);
35426 if (this._useBezier) {
35427 this._alpha = this._unitBezier.solve(this._baseAlpha);
35430 this._alpha = this._baseAlpha;
35432 this._updateRotation();
35433 if (!this._rotationDelta.isZero) {
35434 this._applyRotation(this._previousCamera);
35435 this._applyRotation(this._currentCamera);
35437 this._updateRotationBasic();
35438 if (this._basicRotation[0] !== 0 || this._basicRotation[1] !== 0) {
35439 this._applyRotationBasic();
35441 this._updateZoom(animationSpeed);
35442 this._updateLookat(animationSpeed);
35443 this._camera.lerpCameras(this._previousCamera, this._currentCamera, this.alpha);
35445 TraversingState.prototype._getAlpha = function () {
35446 return this._motionless ? Math.ceil(this._alpha) : this._alpha;
35448 TraversingState.prototype._setCurrentCamera = function () {
35449 _super.prototype._setCurrentCamera.call(this);
35450 this._adjustCameras();
35452 TraversingState.prototype._adjustCameras = function () {
35453 if (this._previousNode == null) {
35456 var lookat = this._camera.lookat.clone().sub(this._camera.position);
35457 this._previousCamera.lookat.copy(lookat.clone().add(this._previousCamera.position));
35458 if (this._currentNode.fullPano) {
35459 this._currentCamera.lookat.copy(lookat.clone().add(this._currentCamera.position));
35462 TraversingState.prototype._resetTransition = function () {
35464 this._baseAlpha = 0;
35465 this._motionless = this._motionlessTransition();
35467 TraversingState.prototype._applyRotation = function (camera) {
35468 if (camera == null) {
35471 var q = new THREE.Quaternion().setFromUnitVectors(camera.up, new THREE.Vector3(0, 0, 1));
35472 var qInverse = q.clone().inverse();
35473 var offset = new THREE.Vector3();
35474 offset.copy(camera.lookat).sub(camera.position);
35475 offset.applyQuaternion(q);
35476 var length = offset.length();
35477 var phi = Math.atan2(offset.y, offset.x);
35478 phi += this._rotationDelta.phi;
35479 var theta = Math.atan2(Math.sqrt(offset.x * offset.x + offset.y * offset.y), offset.z);
35480 theta += this._rotationDelta.theta;
35481 theta = Math.max(0.1, Math.min(Math.PI - 0.1, theta));
35482 offset.x = Math.sin(theta) * Math.cos(phi);
35483 offset.y = Math.sin(theta) * Math.sin(phi);
35484 offset.z = Math.cos(theta);
35485 offset.applyQuaternion(qInverse);
35486 camera.lookat.copy(camera.position).add(offset.multiplyScalar(length));
35488 TraversingState.prototype._applyRotationBasic = function () {
35489 var currentNode = this._currentNode;
35490 var previousNode = this._previousNode != null ?
35491 this.previousNode :
35493 var currentCamera = this._currentCamera;
35494 var previousCamera = this._previousCamera;
35495 var currentTransform = this.currentTransform;
35496 var previousTransform = this.previousTransform != null ?
35497 this.previousTransform :
35498 this.currentTransform;
35499 var currentBasic = currentTransform.projectBasic(currentCamera.lookat.toArray());
35500 var previousBasic = previousTransform.projectBasic(previousCamera.lookat.toArray());
35501 var currentGPano = currentTransform.gpano;
35502 var previousGPano = previousTransform.gpano;
35503 if (currentNode.fullPano) {
35504 currentBasic[0] = this._spatial.wrap(currentBasic[0] + this._basicRotation[0], 0, 1);
35505 currentBasic[1] = this._spatial.clamp(currentBasic[1] + this._basicRotation[1], 0.05, 0.95);
35507 else if (currentGPano != null &&
35508 currentTransform.gpano.CroppedAreaImageWidthPixels === currentTransform.gpano.FullPanoWidthPixels) {
35509 currentBasic[0] = this._spatial.wrap(currentBasic[0] + this._basicRotation[0], 0, 1);
35510 currentBasic[1] = this._spatial.clamp(currentBasic[1] + this._basicRotation[1], 0, 1);
35513 currentBasic[0] = this._spatial.clamp(currentBasic[0] + this._basicRotation[0], 0, 1);
35514 currentBasic[1] = this._spatial.clamp(currentBasic[1] + this._basicRotation[1], 0, 1);
35516 if (previousNode.fullPano) {
35517 previousBasic[0] = this._spatial.wrap(previousBasic[0] + this._basicRotation[0], 0, 1);
35518 previousBasic[1] = this._spatial.clamp(previousBasic[1] + this._basicRotation[1], 0.05, 0.95);
35520 else if (previousGPano != null &&
35521 previousTransform.gpano.CroppedAreaImageWidthPixels === previousTransform.gpano.FullPanoWidthPixels) {
35522 previousBasic[0] = this._spatial.wrap(previousBasic[0] + this._basicRotation[0], 0, 1);
35523 previousBasic[1] = this._spatial.clamp(previousBasic[1] + this._basicRotation[1], 0, 1);
35526 previousBasic[0] = this._spatial.clamp(previousBasic[0] + this._basicRotation[0], 0, 1);
35527 previousBasic[1] = this._spatial.clamp(currentBasic[1] + this._basicRotation[1], 0, 1);
35529 var currentLookat = currentTransform.unprojectBasic(currentBasic, this._lookatDepth);
35530 currentCamera.lookat.fromArray(currentLookat);
35531 var previousLookat = previousTransform.unprojectBasic(previousBasic, this._lookatDepth);
35532 previousCamera.lookat.fromArray(previousLookat);
35534 TraversingState.prototype._updateZoom = function (animationSpeed) {
35535 var diff = this._desiredZoom - this._zoom;
35536 var sign = diff > 0 ? 1 : diff < 0 ? -1 : 0;
35540 else if (Math.abs(diff) < 2e-3) {
35541 this._zoom = this._desiredZoom;
35542 if (this._desiredLookat != null) {
35543 this._desiredLookat = null;
35547 this._zoom += sign * Math.max(Math.abs(5 * animationSpeed * diff), 2e-3);
35550 TraversingState.prototype._updateLookat = function (animationSpeed) {
35551 if (this._desiredLookat === null) {
35554 var diff = this._desiredLookat.distanceToSquared(this._currentCamera.lookat);
35555 if (Math.abs(diff) < 1e-6) {
35556 this._currentCamera.lookat.copy(this._desiredLookat);
35557 this._desiredLookat = null;
35560 this._currentCamera.lookat.lerp(this._desiredLookat, 5 * animationSpeed);
35563 TraversingState.prototype._updateRotation = function () {
35564 if (this._requestedRotationDelta != null) {
35565 var length_1 = this._rotationDelta.lengthSquared();
35566 var requestedLength = this._requestedRotationDelta.lengthSquared();
35567 if (requestedLength > length_1) {
35568 this._rotationDelta.lerp(this._requestedRotationDelta, this._rotationIncreaseAlpha);
35571 this._rotationDelta.lerp(this._requestedRotationDelta, this._rotationDecreaseAlpha);
35573 this._requestedRotationDelta = null;
35576 if (this._rotationDelta.isZero) {
35579 this._rotationDelta.multiply(this._rotationAcceleration);
35580 this._rotationDelta.threshold(this._rotationThreshold);
35582 TraversingState.prototype._updateRotationBasic = function () {
35583 if (this._requestedBasicRotation != null) {
35584 var x = this._basicRotation[0];
35585 var y = this._basicRotation[1];
35586 var reqX = this._requestedBasicRotation[0];
35587 var reqY = this._requestedBasicRotation[1];
35588 if (Math.abs(reqX) > Math.abs(x)) {
35589 this._basicRotation[0] = (1 - this._rotationIncreaseAlpha) * x + this._rotationIncreaseAlpha * reqX;
35592 this._basicRotation[0] = (1 - this._rotationDecreaseAlpha) * x + this._rotationDecreaseAlpha * reqX;
35594 if (Math.abs(reqY) > Math.abs(y)) {
35595 this._basicRotation[1] = (1 - this._rotationIncreaseAlpha) * y + this._rotationIncreaseAlpha * reqY;
35598 this._basicRotation[1] = (1 - this._rotationDecreaseAlpha) * y + this._rotationDecreaseAlpha * reqY;
35600 this._requestedBasicRotation = null;
35603 if (this._requestedBasicRotationUnbounded != null) {
35604 var reqX = this._requestedBasicRotationUnbounded[0];
35605 var reqY = this._requestedBasicRotationUnbounded[1];
35606 if (Math.abs(reqX) > 0) {
35607 this._basicRotation[0] = (1 - this._unboundedRotationAlpha) * this._basicRotation[0] + this._unboundedRotationAlpha * reqX;
35609 if (Math.abs(reqY) > 0) {
35610 this._basicRotation[1] = (1 - this._unboundedRotationAlpha) * this._basicRotation[1] + this._unboundedRotationAlpha * reqY;
35612 if (this._desiredLookat != null) {
35613 var desiredBasicLookat = this.currentTransform.projectBasic(this._desiredLookat.toArray());
35614 desiredBasicLookat[0] += reqX;
35615 desiredBasicLookat[1] += reqY;
35616 this._desiredLookat = new THREE.Vector3()
35617 .fromArray(this.currentTransform.unprojectBasic(desiredBasicLookat, this._lookatDepth));
35619 this._requestedBasicRotationUnbounded = null;
35621 if (this._basicRotation[0] === 0 && this._basicRotation[1] === 0) {
35624 this._basicRotation[0] = this._rotationAcceleration * this._basicRotation[0];
35625 this._basicRotation[1] = this._rotationAcceleration * this._basicRotation[1];
35626 if (Math.abs(this._basicRotation[0]) < this._rotationThreshold / Math.pow(2, this._zoom) &&
35627 Math.abs(this._basicRotation[1]) < this._rotationThreshold / Math.pow(2, this._zoom)) {
35628 this._basicRotation = [0, 0];
35631 TraversingState.prototype._clearRotation = function () {
35632 if (this._currentNode.fullPano) {
35635 if (this._requestedRotationDelta != null) {
35636 this._requestedRotationDelta = null;
35638 if (!this._rotationDelta.isZero) {
35639 this._rotationDelta.reset();
35641 if (this._requestedBasicRotation != null) {
35642 this._requestedBasicRotation = null;
35644 if (this._basicRotation[0] > 0 || this._basicRotation[1] > 0) {
35645 this._basicRotation = [0, 0];
35648 TraversingState.prototype._setDesiredCenter = function () {
35649 if (this._desiredCenter == null) {
35652 var lookatDirection = new THREE.Vector3()
35653 .fromArray(this.currentTransform.unprojectBasic(this._desiredCenter, this._lookatDepth))
35654 .sub(this._currentCamera.position);
35655 this._currentCamera.lookat.copy(this._currentCamera.position.clone().add(lookatDirection));
35656 this._previousCamera.lookat.copy(this._previousCamera.position.clone().add(lookatDirection));
35657 this._desiredCenter = null;
35659 TraversingState.prototype._setDesiredZoom = function () {
35660 this._desiredZoom =
35661 this._currentNode.fullPano || this._previousNode == null ?
35664 return TraversingState;
35665 }(State_1.StateBase));
35666 exports.TraversingState = TraversingState;
35668 },{"../../State":231,"three":174,"unitbezier":176}],330:[function(require,module,exports){
35670 var __extends = (this && this.__extends) || function (d, b) {
35671 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
35672 function __() { this.constructor = d; }
35673 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
35675 var State_1 = require("../../State");
35676 var WaitingState = (function (_super) {
35677 __extends(WaitingState, _super);
35678 function WaitingState(state) {
35679 var _this = _super.call(this, state) || this;
35680 _this._adjustCameras();
35681 _this._motionless = _this._motionlessTransition();
35684 WaitingState.prototype.traverse = function () {
35685 return new State_1.TraversingState(this);
35687 WaitingState.prototype.wait = function () {
35688 throw new Error("Not implemented");
35690 WaitingState.prototype.prepend = function (nodes) {
35691 _super.prototype.prepend.call(this, nodes);
35692 this._motionless = this._motionlessTransition();
35694 WaitingState.prototype.set = function (nodes) {
35695 _super.prototype.set.call(this, nodes);
35696 this._motionless = this._motionlessTransition();
35698 WaitingState.prototype.rotate = function (delta) { return; };
35699 WaitingState.prototype.rotateBasic = function (basicRotation) { return; };
35700 WaitingState.prototype.rotateBasicUnbounded = function (basicRotation) { return; };
35701 WaitingState.prototype.rotateToBasic = function (basic) { return; };
35702 WaitingState.prototype.zoomIn = function (delta, reference) { return; };
35703 WaitingState.prototype.move = function (delta) {
35704 this._alpha = Math.max(0, Math.min(1, this._alpha + delta));
35706 WaitingState.prototype.moveTo = function (position) {
35707 this._alpha = Math.max(0, Math.min(1, position));
35709 WaitingState.prototype.update = function (fps) {
35710 this._camera.lerpCameras(this._previousCamera, this._currentCamera, this.alpha);
35712 WaitingState.prototype.setCenter = function (center) { return; };
35713 WaitingState.prototype.setZoom = function (zoom) { return; };
35714 WaitingState.prototype._getAlpha = function () {
35715 return this._motionless ? Math.round(this._alpha) : this._alpha;
35718 WaitingState.prototype._setCurrentCamera = function () {
35719 _super.prototype._setCurrentCamera.call(this);
35720 this._adjustCameras();
35722 WaitingState.prototype._adjustCameras = function () {
35723 if (this._previousNode == null) {
35726 if (this._currentNode.fullPano) {
35727 var lookat = this._camera.lookat.clone().sub(this._camera.position);
35728 this._currentCamera.lookat.copy(lookat.clone().add(this._currentCamera.position));
35730 if (this._previousNode.fullPano) {
35731 var lookat = this._currentCamera.lookat.clone().sub(this._currentCamera.position);
35732 this._previousCamera.lookat.copy(lookat.clone().add(this._previousCamera.position));
35735 return WaitingState;
35736 }(State_1.StateBase));
35737 exports.WaitingState = WaitingState;
35739 },{"../../State":231}],331:[function(require,module,exports){
35741 var Observable_1 = require("rxjs/Observable");
35743 * @class ImageTileLoader
35745 * @classdesc Represents a loader of image tiles.
35747 var ImageTileLoader = (function () {
35749 * Create a new node image tile loader instance.
35751 * @param {string} scheme - The URI scheme.
35752 * @param {string} host - The URI host.
35753 * @param {string} [origin] - The origin query param.
35755 function ImageTileLoader(scheme, host, origin) {
35756 this._scheme = scheme;
35758 this._origin = origin != null ? "?origin=" + origin : "";
35761 * Retrieve an image tile.
35763 * @description Retrieve an image tile by specifying the area
35764 * as well as the scaled size.
35766 * @param {string} identifier - The identifier of the image.
35767 * @param {number} x - The top left x pixel coordinate for the tile
35768 * in the original image.
35769 * @param {number} y - The top left y pixel coordinate for the tile
35770 * in the original image.
35771 * @param {number} w - The pixel width of the tile in the original image.
35772 * @param {number} h - The pixel height of the tile in the original image.
35773 * @param {number} scaledW - The scaled width of the returned tile.
35774 * @param {number} scaledH - The scaled height of the returned tile.
35776 ImageTileLoader.prototype.getTile = function (identifier, x, y, w, h, scaledW, scaledH) {
35777 var characteristics = "/" + identifier + "/" + x + "," + y + "," + w + "," + h + "/" + scaledW + "," + scaledH + "/0/default.jpg";
35778 var url = this._scheme +
35783 var xmlHTTP = null;
35784 return [Observable_1.Observable.create(function (subscriber) {
35785 xmlHTTP = new XMLHttpRequest();
35786 xmlHTTP.open("GET", url, true);
35787 xmlHTTP.responseType = "arraybuffer";
35788 xmlHTTP.timeout = 15000;
35789 xmlHTTP.onload = function (event) {
35790 if (xmlHTTP.status !== 200) {
35791 subscriber.error(new Error("Failed to fetch tile (" + identifier + ": " + x + "," + y + "," + w + "," + h + "). " +
35792 ("Status: " + xmlHTTP.status + ", " + xmlHTTP.statusText)));
35795 var image = new Image();
35796 image.crossOrigin = "Anonymous";
35797 image.onload = function (e) {
35798 subscriber.next(image);
35799 subscriber.complete();
35801 image.onerror = function (error) {
35802 subscriber.error(new Error("Failed to load tile image (" + identifier + ": " + x + "," + y + "," + w + "," + h + ")"));
35804 var blob = new Blob([xmlHTTP.response]);
35805 image.src = window.URL.createObjectURL(blob);
35807 xmlHTTP.onerror = function (error) {
35808 subscriber.error(new Error("Failed to fetch tile (" + identifier + ": " + x + "," + y + "," + w + "," + h + ")"));
35810 xmlHTTP.ontimeout = function (error) {
35811 subscriber.error(new Error("Tile request timed out (" + identifier + ": " + x + "," + y + "," + w + "," + h + ")"));
35813 xmlHTTP.onabort = function (event) {
35814 subscriber.error(new Error("Tile request was aborted (" + identifier + ": " + x + "," + y + "," + w + "," + h + ")"));
35816 xmlHTTP.send(null);
35819 if (xmlHTTP != null) {
35825 return ImageTileLoader;
35827 exports.ImageTileLoader = ImageTileLoader;
35828 Object.defineProperty(exports, "__esModule", { value: true });
35829 exports.default = ImageTileLoader;
35831 },{"rxjs/Observable":28}],332:[function(require,module,exports){
35834 * @class ImageTileStore
35836 * @classdesc Represents a store for image tiles.
35838 var ImageTileStore = (function () {
35840 * Create a new node image tile store instance.
35842 function ImageTileStore() {
35846 * Add an image tile to the store.
35848 * @param {HTMLImageElement} image - The image tile.
35849 * @param {string} key - The identifier for the tile.
35850 * @param {number} level - The level of the tile.
35852 ImageTileStore.prototype.addImage = function (image, key, level) {
35853 if (!(level in this._images)) {
35854 this._images[level] = {};
35856 this._images[level][key] = image;
35859 * Dispose the store.
35861 * @description Disposes all cached assets.
35863 ImageTileStore.prototype.dispose = function () {
35864 for (var _i = 0, _a = Object.keys(this._images); _i < _a.length; _i++) {
35865 var level = _a[_i];
35866 var levelImages = this._images[level];
35867 for (var _b = 0, _c = Object.keys(levelImages); _b < _c.length; _b++) {
35869 window.URL.revokeObjectURL(levelImages[key].src);
35870 delete levelImages[key];
35872 delete this._images[level];
35876 * Get an image tile from the store.
35878 * @param {string} key - The identifier for the tile.
35879 * @param {number} level - The level of the tile.
35881 ImageTileStore.prototype.getImage = function (key, level) {
35882 return this._images[level][key];
35885 * Check if an image tile exist in the store.
35887 * @param {string} key - The identifier for the tile.
35888 * @param {number} level - The level of the tile.
35890 ImageTileStore.prototype.hasImage = function (key, level) {
35891 return level in this._images && key in this._images[level];
35893 return ImageTileStore;
35895 exports.ImageTileStore = ImageTileStore;
35896 Object.defineProperty(exports, "__esModule", { value: true });
35897 exports.default = ImageTileStore;
35899 },{}],333:[function(require,module,exports){
35900 /// <reference path="../../typings/index.d.ts" />
35902 var Geo_1 = require("../Geo");
35904 * @class RegionOfInterestCalculator
35906 * @classdesc Represents a calculator for regions of interest.
35908 var RegionOfInterestCalculator = (function () {
35909 function RegionOfInterestCalculator() {
35910 this._viewportCoords = new Geo_1.ViewportCoords();
35913 * Compute a region of interest based on the current render camera
35914 * and the viewport size.
35916 * @param {RenderCamera} renderCamera - Render camera used for unprojections.
35917 * @param {ISize} size - Viewport size in pixels.
35918 * @param {Transform} transform - Transform used for projections.
35920 * @returns {IRegionOfInterest} A region of interest.
35922 RegionOfInterestCalculator.prototype.computeRegionOfInterest = function (renderCamera, size, transform) {
35923 var viewportBoundaryPoints = this._viewportBoundaryPoints(4);
35924 var bbox = this._viewportPointsBoundingBox(viewportBoundaryPoints, renderCamera, transform);
35925 this._clipBoundingBox(bbox);
35926 var viewportPixelWidth = 2 / size.width;
35927 var viewportPixelHeight = 2 / size.height;
35928 var centralViewportPixel = [
35929 [-0.5 * viewportPixelWidth, 0.5 * viewportPixelHeight],
35930 [0.5 * viewportPixelWidth, 0.5 * viewportPixelHeight],
35931 [0.5 * viewportPixelWidth, -0.5 * viewportPixelHeight],
35932 [-0.5 * viewportPixelWidth, -0.5 * viewportPixelHeight],
35934 var cpbox = this._viewportPointsBoundingBox(centralViewportPixel, renderCamera, transform);
35937 pixelHeight: cpbox.maxY - cpbox.minY,
35938 pixelWidth: cpbox.maxX - cpbox.minX + (cpbox.minX < cpbox.maxX ? 0 : 1),
35941 RegionOfInterestCalculator.prototype._viewportBoundaryPoints = function (pointsPerSide) {
35943 var os = [[-1, 1], [1, 1], [1, -1], [-1, -1]];
35944 var ds = [[2, 0], [0, -2], [-2, 0], [0, 2]];
35945 for (var side = 0; side < 4; ++side) {
35948 for (var i = 0; i < pointsPerSide; ++i) {
35949 points.push([o[0] + d[0] * i / pointsPerSide,
35950 o[1] + d[1] * i / pointsPerSide]);
35955 RegionOfInterestCalculator.prototype._viewportPointsBoundingBox = function (viewportPoints, renderCamera, transform) {
35957 var basicPoints = viewportPoints
35958 .map(function (point) {
35959 return _this._viewportCoords
35960 .viewportToBasic(point[0], point[1], transform, renderCamera.perspective);
35962 if (transform.gpano != null) {
35963 return this._boundingBoxPano(basicPoints);
35966 return this._boundingBox(basicPoints);
35969 RegionOfInterestCalculator.prototype._boundingBox = function (points) {
35971 maxX: Number.NEGATIVE_INFINITY,
35972 maxY: Number.NEGATIVE_INFINITY,
35973 minX: Number.POSITIVE_INFINITY,
35974 minY: Number.POSITIVE_INFINITY,
35976 for (var i = 0; i < points.length; ++i) {
35977 bbox.minX = Math.min(bbox.minX, points[i][0]);
35978 bbox.maxX = Math.max(bbox.maxX, points[i][0]);
35979 bbox.minY = Math.min(bbox.minY, points[i][1]);
35980 bbox.maxY = Math.max(bbox.maxY, points[i][1]);
35984 RegionOfInterestCalculator.prototype._boundingBoxPano = function (points) {
35988 for (var i = 0; i < points.length; ++i) {
35989 xs.push(points[i][0]);
35990 ys.push(points[i][1]);
35992 xs.sort(function (a, b) { return _this._sign(a - b); });
35993 ys.sort(function (a, b) { return _this._sign(a - b); });
35994 var intervalX = this._intervalPano(xs);
35996 maxX: intervalX[1],
35997 maxY: ys[ys.length - 1],
35998 minX: intervalX[0],
36003 * Find the max interval between consecutive numbers.
36004 * Assumes numbers are between 0 and 1, sorted and that
36005 * x is equivalent to x + 1.
36007 RegionOfInterestCalculator.prototype._intervalPano = function (xs) {
36010 for (var i = 0; i < xs.length - 1; ++i) {
36011 var dx = xs[i + 1] - xs[i];
36017 var loopdx = xs[0] + 1 - xs[xs.length - 1];
36018 if (loopdx > maxdx) {
36019 return [xs[0], xs[xs.length - 1]];
36022 return [xs[maxi + 1], xs[maxi]];
36025 RegionOfInterestCalculator.prototype._clipBoundingBox = function (bbox) {
36026 bbox.minX = Math.max(0, Math.min(1, bbox.minX));
36027 bbox.maxX = Math.max(0, Math.min(1, bbox.maxX));
36028 bbox.minY = Math.max(0, Math.min(1, bbox.minY));
36029 bbox.maxY = Math.max(0, Math.min(1, bbox.maxY));
36031 RegionOfInterestCalculator.prototype._sign = function (n) {
36032 return n > 0 ? 1 : n < 0 ? -1 : 0;
36034 return RegionOfInterestCalculator;
36036 exports.RegionOfInterestCalculator = RegionOfInterestCalculator;
36037 Object.defineProperty(exports, "__esModule", { value: true });
36038 exports.default = RegionOfInterestCalculator;
36040 },{"../Geo":227}],334:[function(require,module,exports){
36041 /// <reference path="../../typings/index.d.ts" />
36043 var THREE = require("three");
36044 var Subject_1 = require("rxjs/Subject");
36046 * @class TextureProvider
36048 * @classdesc Represents a provider of textures.
36050 var TextureProvider = (function () {
36052 * Create a new node texture provider instance.
36054 * @param {string} key - The identifier of the image for which to request tiles.
36055 * @param {number} width - The full width of the original image.
36056 * @param {number} height - The full height of the original image.
36057 * @param {number} tileSize - The size used when requesting tiles.
36058 * @param {HTMLImageElement} background - Image to use as background.
36059 * @param {ImageTileLoader} imageTileLoader - Loader for retrieving tiles.
36060 * @param {ImageTileStore} imageTileStore - Store for saving tiles.
36061 * @param {THREE.WebGLRenderer} renderer - Renderer used for rendering tiles to texture.
36063 function TextureProvider(key, width, height, tileSize, background, imageTileLoader, imageTileStore, renderer) {
36064 this._disposed = false;
36066 if (width <= 0 || height <= 0) {
36067 console.warn("Original image size (" + width + ", " + height + ") is invalid (" + key + "). Tiles will not be loaded.");
36069 this._width = width;
36070 this._height = height;
36071 this._maxLevel = Math.ceil(Math.log(Math.max(height, width)) / Math.log(2));
36072 this._currentLevel = -1;
36073 this._tileSize = tileSize;
36074 this._updated$ = new Subject_1.Subject();
36075 this._createdSubject$ = new Subject_1.Subject();
36076 this._created$ = this._createdSubject$
36079 this._createdSubscription = this._created$.subscribe(function () { });
36080 this._hasSubject$ = new Subject_1.Subject();
36081 this._has$ = this._hasSubject$
36085 this._hasSubscription = this._has$.subscribe(function () { });
36086 this._abortFunctions = [];
36087 this._tileSubscriptions = {};
36088 this._renderedCurrentLevelTiles = {};
36089 this._renderedTiles = {};
36090 this._background = background;
36091 this._camera = null;
36092 this._imageTileLoader = imageTileLoader;
36093 this._imageTileStore = imageTileStore;
36094 this._renderer = renderer;
36095 this._renderTarget = null;
36098 Object.defineProperty(TextureProvider.prototype, "disposed", {
36102 * @returns {boolean} Value indicating whether provider has
36106 return this._disposed;
36111 Object.defineProperty(TextureProvider.prototype, "hasTexture$", {
36115 * @returns {Observable<boolean>} Observable emitting
36116 * values indicating when the existance of a texture
36125 Object.defineProperty(TextureProvider.prototype, "key", {
36129 * @returns {boolean} The identifier of the image for
36130 * which to render textures.
36138 Object.defineProperty(TextureProvider.prototype, "textureUpdated$", {
36140 * Get textureUpdated$.
36142 * @returns {Observable<boolean>} Observable emitting
36143 * values when an existing texture has been updated.
36146 return this._updated$;
36151 Object.defineProperty(TextureProvider.prototype, "textureCreated$", {
36153 * Get textureCreated$.
36155 * @returns {Observable<boolean>} Observable emitting
36156 * values when a new texture has been created.
36159 return this._created$;
36165 * Abort all outstanding image tile requests.
36167 TextureProvider.prototype.abort = function () {
36168 for (var key in this._tileSubscriptions) {
36169 if (!this._tileSubscriptions.hasOwnProperty(key)) {
36172 this._tileSubscriptions[key].unsubscribe();
36174 this._tileSubscriptions = {};
36175 for (var _i = 0, _a = this._abortFunctions; _i < _a.length; _i++) {
36176 var abort = _a[_i];
36179 this._abortFunctions = [];
36182 * Dispose the provider.
36184 * @description Disposes all cached assets and
36185 * aborts all outstanding image tile requests.
36187 TextureProvider.prototype.dispose = function () {
36188 if (this._disposed) {
36189 console.warn("Texture already disposed (" + this._key + ")");
36193 if (this._renderTarget != null) {
36194 this._renderTarget.dispose();
36195 this._renderTarget = null;
36197 this._imageTileStore.dispose();
36198 this._imageTileStore = null;
36199 this._background = null;
36200 this._camera = null;
36201 this._imageTileLoader = null;
36202 this._renderer = null;
36204 this._createdSubscription.unsubscribe();
36205 this._hasSubscription.unsubscribe();
36206 this._disposed = true;
36209 * Set the region of interest.
36211 * @description When the region of interest is set the
36212 * the tile level is determined and tiles for the region
36213 * are fetched from the store or the loader and renderedLevel
36216 * @param {IRegionOfInterest} roi - Spatial edges to cache.
36218 TextureProvider.prototype.setRegionOfInterest = function (roi) {
36219 if (this._width <= 0 || this._height <= 0) {
36223 var width = 1 / this._roi.pixelWidth;
36224 var height = 1 / this._roi.pixelHeight;
36225 var size = Math.max(height, width);
36226 var currentLevel = Math.max(0, Math.min(this._maxLevel, Math.round(Math.log(size) / Math.log(2))));
36227 if (currentLevel !== this._currentLevel) {
36229 this._currentLevel = currentLevel;
36230 if (!(this._currentLevel in this._renderedTiles)) {
36231 this._renderedTiles[this._currentLevel] = [];
36233 this._renderedCurrentLevelTiles = {};
36234 for (var _i = 0, _a = this._renderedTiles[this._currentLevel]; _i < _a.length; _i++) {
36236 this._renderedCurrentLevelTiles[this._tileKey(tile)] = true;
36239 var topLeft = this._getTileCoords([this._roi.bbox.minX, this._roi.bbox.minY]);
36240 var bottomRight = this._getTileCoords([this._roi.bbox.maxX, this._roi.bbox.maxY]);
36241 var tiles = this._getTiles(topLeft, bottomRight);
36242 if (this._camera == null) {
36243 this._camera = new THREE.OrthographicCamera(-this._width / 2, this._width / 2, this._height / 2, -this._height / 2, -1, 1);
36244 this._camera.position.z = 1;
36245 var gl = this._renderer.getContext();
36246 var maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
36247 var backgroundSize = Math.max(this._width, this._height);
36248 var scale = maxTextureSize > backgroundSize ? 1 : maxTextureSize / backgroundSize;
36249 var targetWidth = Math.floor(scale * this._width);
36250 var targetHeight = Math.floor(scale * this._height);
36251 this._renderTarget = new THREE.WebGLRenderTarget(targetWidth, targetHeight, {
36252 depthBuffer: false,
36253 format: THREE.RGBFormat,
36254 magFilter: THREE.LinearFilter,
36255 minFilter: THREE.LinearFilter,
36256 stencilBuffer: false,
36258 this._renderToTarget(0, 0, this._width, this._height, this._background);
36259 this._createdSubject$.next(this._renderTarget.texture);
36260 this._hasSubject$.next(true);
36262 this._fetchTiles(tiles);
36265 * Update the image used as background for the texture.
36267 * @param {HTMLImageElement} background - The background image.
36269 TextureProvider.prototype.updateBackground = function (background) {
36270 this._background = background;
36273 * Retrieve an image tile.
36275 * @description Retrieve an image tile and render it to the
36276 * texture. Add the tile to the store and emit to the updated
36279 * @param {Array<number>} tile - The tile coordinates.
36280 * @param {number} level - The tile level.
36281 * @param {number} x - The top left x pixel coordinate of the tile.
36282 * @param {number} y - The top left y pixel coordinate of the tile.
36283 * @param {number} w - The pixel width of the tile.
36284 * @param {number} h - The pixel height of the tile.
36285 * @param {number} scaledW - The scaled width of the returned tile.
36286 * @param {number} scaledH - The scaled height of the returned tile.
36288 TextureProvider.prototype._fetchTile = function (tile, level, x, y, w, h, scaledX, scaledY) {
36290 var getTile = this._imageTileLoader.getTile(this._key, x, y, w, h, scaledX, scaledY);
36291 var tile$ = getTile[0];
36292 var abort = getTile[1];
36293 this._abortFunctions.push(abort);
36294 var tileKey = this._tileKey(tile);
36295 var subscription = tile$
36296 .subscribe(function (image) {
36297 _this._renderToTarget(x, y, w, h, image);
36298 _this._removeFromDictionary(tileKey, _this._tileSubscriptions);
36299 _this._removeFromArray(abort, _this._abortFunctions);
36300 _this._setTileRendered(tile, _this._currentLevel);
36301 _this._imageTileStore.addImage(image, tileKey, level);
36302 _this._updated$.next(true);
36303 }, function (error) {
36304 _this._removeFromDictionary(tileKey, _this._tileSubscriptions);
36305 _this._removeFromArray(abort, _this._abortFunctions);
36306 console.error(error);
36308 if (!subscription.closed) {
36309 this._tileSubscriptions[tileKey] = subscription;
36313 * Retrieve image tiles.
36315 * @description Retrieve a image tiles and render them to the
36316 * texture. Retrieve from store if it exists, otherwise Retrieve
36319 * @param {Array<Array<number>>} tiles - Array of tile coordinates to
36322 TextureProvider.prototype._fetchTiles = function (tiles) {
36323 var tileSize = this._tileSize * Math.pow(2, this._maxLevel - this._currentLevel);
36324 for (var _i = 0, tiles_1 = tiles; _i < tiles_1.length; _i++) {
36325 var tile = tiles_1[_i];
36326 var tileKey = this._tileKey(tile);
36327 if (tileKey in this._renderedCurrentLevelTiles ||
36328 tileKey in this._tileSubscriptions) {
36331 var tileX = tileSize * tile[0];
36332 var tileY = tileSize * tile[1];
36333 var tileWidth = tileX + tileSize > this._width ? this._width - tileX : tileSize;
36334 var tileHeight = tileY + tileSize > this._height ? this._height - tileY : tileSize;
36335 if (this._imageTileStore.hasImage(tileKey, this._currentLevel)) {
36336 this._renderToTarget(tileX, tileY, tileWidth, tileHeight, this._imageTileStore.getImage(tileKey, this._currentLevel));
36337 this._setTileRendered(tile, this._currentLevel);
36338 this._updated$.next(true);
36341 var scaledX = Math.floor(tileWidth / tileSize * this._tileSize);
36342 var scaledY = Math.floor(tileHeight / tileSize * this._tileSize);
36343 this._fetchTile(tile, this._currentLevel, tileX, tileY, tileWidth, tileHeight, scaledX, scaledY);
36347 * Get tile coordinates for a point using the current level.
36349 * @param {Array<number>} point - Point in basic coordinates.
36351 * @returns {Array<number>} x and y tile coodinates.
36353 TextureProvider.prototype._getTileCoords = function (point) {
36354 var tileSize = this._tileSize * Math.pow(2, this._maxLevel - this._currentLevel);
36355 var maxX = Math.ceil(this._width / tileSize) - 1;
36356 var maxY = Math.ceil(this._height / tileSize) - 1;
36358 Math.min(Math.floor(this._width * point[0] / tileSize), maxX),
36359 Math.min(Math.floor(this._height * point[1] / tileSize), maxY),
36363 * Get tile coordinates for all tiles contained in a bounding
36366 * @param {Array<number>} topLeft - Top left tile coordinate of bounding box.
36367 * @param {Array<number>} bottomRight - Bottom right tile coordinate of bounding box.
36369 * @returns {Array<Array<number>>} Array of x, y tile coodinates.
36371 TextureProvider.prototype._getTiles = function (topLeft, bottomRight) {
36373 if (topLeft[0] > bottomRight[0]) {
36374 var tileSize = this._tileSize * Math.pow(2, this._maxLevel - this._currentLevel);
36375 var maxX = Math.ceil(this._width / tileSize) - 1;
36376 for (var x = topLeft[0]; x <= maxX; x++) {
36379 for (var x = 0; x <= bottomRight[0]; x++) {
36384 for (var x = topLeft[0]; x <= bottomRight[0]; x++) {
36389 for (var _i = 0, xs_1 = xs; _i < xs_1.length; _i++) {
36391 for (var y = topLeft[1]; y <= bottomRight[1]; y++) {
36392 tiles.push([x, y]);
36398 * Remove an item from an array if it exists in array.
36400 * @param {T} item - Item to remove.
36401 * @param {Array<T>} array - Array from which item should be removed.
36403 TextureProvider.prototype._removeFromArray = function (item, array) {
36404 var index = array.indexOf(item);
36405 if (index !== -1) {
36406 array.splice(index, 1);
36410 * Remove an item from a dictionary.
36412 * @param {string} key - Key of the item to remove.
36413 * @param {Object} dict - Dictionary from which item should be removed.
36415 TextureProvider.prototype._removeFromDictionary = function (key, dict) {
36421 * Render an image tile to the target texture.
36423 * @param {number} x - The top left x pixel coordinate of the tile.
36424 * @param {number} y - The top left y pixel coordinate of the tile.
36425 * @param {number} w - The pixel width of the tile.
36426 * @param {number} h - The pixel height of the tile.
36427 * @param {HTMLImageElement} background - The image tile to render.
36429 TextureProvider.prototype._renderToTarget = function (x, y, w, h, image) {
36430 var texture = new THREE.Texture(image);
36431 texture.minFilter = THREE.LinearFilter;
36432 texture.needsUpdate = true;
36433 var geometry = new THREE.PlaneGeometry(w, h);
36434 var material = new THREE.MeshBasicMaterial({ map: texture, side: THREE.FrontSide });
36435 var mesh = new THREE.Mesh(geometry, material);
36436 mesh.position.x = -this._width / 2 + x + w / 2;
36437 mesh.position.y = this._height / 2 - y - h / 2;
36438 var scene = new THREE.Scene();
36440 this._renderer.render(scene, this._camera, this._renderTarget);
36441 this._renderer.setRenderTarget(undefined);
36442 scene.remove(mesh);
36443 geometry.dispose();
36444 material.dispose();
36448 * Mark a tile as rendered.
36450 * @description Clears tiles marked as rendered in other
36451 * levels of the tile pyramid if they were rendered on
36452 * top of or below the tile.
36454 * @param {Arrary<number>} tile - The tile coordinates.
36455 * @param {number} level - Tile level of the tile coordinates.
36457 TextureProvider.prototype._setTileRendered = function (tile, level) {
36458 var otherLevels = Object.keys(this._renderedTiles)
36459 .map(function (key) {
36460 return parseInt(key, 10);
36462 .filter(function (renderedLevel) {
36463 return renderedLevel !== level;
36465 for (var _i = 0, otherLevels_1 = otherLevels; _i < otherLevels_1.length; _i++) {
36466 var otherLevel = otherLevels_1[_i];
36467 var scale = Math.pow(2, otherLevel - level);
36468 if (otherLevel < level) {
36469 var x = Math.floor(scale * tile[0]);
36470 var y = Math.floor(scale * tile[1]);
36471 for (var _a = 0, _b = this._renderedTiles[otherLevel].slice(); _a < _b.length; _a++) {
36472 var otherTile = _b[_a];
36473 if (otherTile[0] === x && otherTile[1] === y) {
36474 var index = this._renderedTiles[otherLevel].indexOf(otherTile);
36475 this._renderedTiles[otherLevel].splice(index, 1);
36480 var startX = scale * tile[0];
36481 var endX = startX + scale - 1;
36482 var startY = scale * tile[1];
36483 var endY = startY + scale - 1;
36484 for (var _c = 0, _d = this._renderedTiles[otherLevel].slice(); _c < _d.length; _c++) {
36485 var otherTile = _d[_c];
36486 if (otherTile[0] >= startX && otherTile[0] <= endX &&
36487 otherTile[1] >= startY && otherTile[1] <= endY) {
36488 var index = this._renderedTiles[otherLevel].indexOf(otherTile);
36489 this._renderedTiles[otherLevel].splice(index, 1);
36493 if (this._renderedTiles[otherLevel].length === 0) {
36494 delete this._renderedTiles[otherLevel];
36497 this._renderedTiles[level].push(tile);
36498 this._renderedCurrentLevelTiles[this._tileKey(tile)] = true;
36501 * Create a tile key from a tile coordinates.
36503 * @description Tile keys are used as a hash for
36504 * storing the tile in a dictionary.
36506 * @param {Arrary<number>} tile - The tile coordinates.
36508 TextureProvider.prototype._tileKey = function (tile) {
36509 return tile[0] + "-" + tile[1];
36511 return TextureProvider;
36513 exports.TextureProvider = TextureProvider;
36514 Object.defineProperty(exports, "__esModule", { value: true });
36515 exports.default = TextureProvider;
36517 },{"rxjs/Subject":33,"three":174}],335:[function(require,module,exports){
36519 var EventEmitter = (function () {
36520 function EventEmitter() {
36524 * Subscribe to an event by its name.
36525 * @param {string }eventType - The name of the event to subscribe to.
36526 * @param {any} fn - The handler called when the event occurs.
36528 EventEmitter.prototype.on = function (eventType, fn) {
36529 this._events[eventType] = this._events[eventType] || [];
36530 this._events[eventType].push(fn);
36534 * Unsubscribe from an event by its name.
36535 * @param {string} eventType - The name of the event to subscribe to.
36536 * @param {any} fn - The handler to remove.
36538 EventEmitter.prototype.off = function (eventType, fn) {
36543 if (!this._listens(eventType)) {
36544 var idx = this._events[eventType].indexOf(fn);
36546 this._events[eventType].splice(idx, 1);
36548 if (this._events[eventType].length) {
36549 delete this._events[eventType];
36553 delete this._events[eventType];
36557 EventEmitter.prototype.fire = function (eventType, data) {
36558 if (!this._listens(eventType)) {
36561 for (var _i = 0, _a = this._events[eventType]; _i < _a.length; _i++) {
36563 fn.call(this, data);
36567 EventEmitter.prototype._listens = function (eventType) {
36568 return !!(this._events && this._events[eventType]);
36570 return EventEmitter;
36572 exports.EventEmitter = EventEmitter;
36573 Object.defineProperty(exports, "__esModule", { value: true });
36574 exports.default = EventEmitter;
36576 },{}],336:[function(require,module,exports){
36578 var Viewer_1 = require("../Viewer");
36579 var Settings = (function () {
36580 function Settings() {
36582 Settings.setOptions = function (options) {
36583 Settings._baseImageSize = options.baseImageSize != null ?
36584 options.baseImageSize :
36585 Viewer_1.ImageSize.Size640;
36586 Settings._basePanoramaSize = options.basePanoramaSize != null ?
36587 options.basePanoramaSize :
36588 Viewer_1.ImageSize.Size2048;
36589 Settings._maxImageSize = options.maxImageSize != null ?
36590 options.maxImageSize :
36591 Viewer_1.ImageSize.Size2048;
36593 Object.defineProperty(Settings, "baseImageSize", {
36595 return Settings._baseImageSize;
36600 Object.defineProperty(Settings, "basePanoramaSize", {
36602 return Settings._basePanoramaSize;
36607 Object.defineProperty(Settings, "maxImageSize", {
36609 return Settings._maxImageSize;
36616 exports.Settings = Settings;
36617 Object.defineProperty(exports, "__esModule", { value: true });
36618 exports.default = Settings;
36620 },{"../Viewer":234}],337:[function(require,module,exports){
36622 var Urls = (function () {
36625 Object.defineProperty(Urls, "tileScheme", {
36632 Object.defineProperty(Urls, "tileDomain", {
36634 return "d2qb1440i7l50o.cloudfront.net";
36639 Object.defineProperty(Urls, "origin", {
36641 return "mapillary.webgl";
36646 Urls.thumbnail = function (key, size) {
36647 return "https://d1cuyjsrcm0gby.cloudfront.net/" + key + "/thumb-" + size + ".jpg?origin=" + this.origin;
36649 Urls.falcorModel = function (clientId) {
36650 return "https://a.mapillary.com/v3/model.json?client_id=" + clientId;
36652 Urls.protoMesh = function (key) {
36653 return "https://d1brzeo354iq2l.cloudfront.net/v2/mesh/" + key;
36657 exports.Urls = Urls;
36658 Object.defineProperty(exports, "__esModule", { value: true });
36659 exports.default = Urls;
36661 },{}],338:[function(require,module,exports){
36663 require("rxjs/add/operator/bufferCount");
36664 require("rxjs/add/operator/delay");
36665 require("rxjs/add/operator/distinctUntilChanged");
36666 require("rxjs/add/operator/map");
36667 require("rxjs/add/operator/switchMap");
36668 var CacheService = (function () {
36669 function CacheService(graphService, stateService) {
36670 this._graphService = graphService;
36671 this._stateService = stateService;
36672 this._started = false;
36674 Object.defineProperty(CacheService.prototype, "started", {
36676 return this._started;
36681 CacheService.prototype.start = function () {
36683 if (this._started) {
36686 this._uncacheSubscription = this._stateService.currentState$
36687 .distinctUntilChanged(undefined, function (frame) {
36688 return frame.state.currentNode.key;
36690 .map(function (frame) {
36691 return frame.state.trajectory
36692 .map(function (n) {
36697 .switchMap(function (keepKeysBuffer) {
36698 var keepKeys = keepKeysBuffer[0];
36699 return _this._graphService.uncache$(keepKeys);
36701 .subscribe(function () { });
36702 this._started = true;
36704 CacheService.prototype.stop = function () {
36705 if (!this._started) {
36708 this._uncacheSubscription.unsubscribe();
36709 this._uncacheSubscription = null;
36710 this._started = false;
36712 return CacheService;
36714 exports.CacheService = CacheService;
36715 Object.defineProperty(exports, "__esModule", { value: true });
36716 exports.default = CacheService;
36718 },{"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/delay":55,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/switchMap":78}],339:[function(require,module,exports){
36720 var Component_1 = require("../Component");
36721 var ComponentController = (function () {
36722 function ComponentController(container, navigator, observer, key, options) {
36724 this._container = container;
36725 this._observer = observer;
36726 this._navigator = navigator;
36727 this._options = options != null ? options : {};
36729 this._componentService = new Component_1.ComponentService(this._container, this._navigator);
36730 this._coverComponent = this._componentService.getCover();
36731 this._initializeComponents();
36733 this._initilizeCoverComponent();
36734 this._subscribeCoverComponent();
36737 this._navigator.movedToKey$
36738 .first(function (k) {
36741 .subscribe(function (k) {
36743 _this._componentService.deactivateCover();
36744 _this._coverComponent.configure({ key: _this._key, loading: false, visible: false });
36745 _this._subscribeCoverComponent();
36746 _this._navigator.stateService.start();
36747 _this._observer.startEmit();
36751 ComponentController.prototype.get = function (name) {
36752 return this._componentService.get(name);
36754 ComponentController.prototype.activate = function (name) {
36755 this._componentService.activate(name);
36757 ComponentController.prototype.activateCover = function () {
36758 this._coverComponent.configure({ loading: false, visible: true });
36760 ComponentController.prototype.deactivate = function (name) {
36761 this._componentService.deactivate(name);
36763 ComponentController.prototype.deactivateCover = function () {
36764 this._coverComponent.configure({ loading: true, visible: true });
36766 ComponentController.prototype.resize = function () {
36767 this._componentService.resize();
36769 ComponentController.prototype._initializeComponents = function () {
36770 var options = this._options;
36771 this._uFalse(options.background, "background");
36772 this._uFalse(options.debug, "debug");
36773 this._uFalse(options.image, "image");
36774 this._uFalse(options.marker, "marker");
36775 this._uFalse(options.navigation, "navigation");
36776 this._uFalse(options.route, "route");
36777 this._uFalse(options.slider, "slider");
36778 this._uFalse(options.tag, "tag");
36779 this._uTrue(options.attribution, "attribution");
36780 this._uTrue(options.bearing, "bearing");
36781 this._uTrue(options.cache, "cache");
36782 this._uTrue(options.direction, "direction");
36783 this._uTrue(options.imagePlane, "imagePlane");
36784 this._uTrue(options.keyboard, "keyboard");
36785 this._uTrue(options.loading, "loading");
36786 this._uTrue(options.mouse, "mouse");
36787 this._uTrue(options.sequence, "sequence");
36788 this._uTrue(options.stats, "stats");
36790 ComponentController.prototype._initilizeCoverComponent = function () {
36791 var options = this._options;
36792 this._coverComponent.configure({ key: this._key });
36793 if (options.cover === undefined || options.cover) {
36794 this.activateCover();
36797 this.deactivateCover();
36800 ComponentController.prototype._subscribeCoverComponent = function () {
36802 this._coverComponent.configuration$.subscribe(function (conf) {
36803 if (conf.loading) {
36804 _this._navigator.stateService.currentKey$
36806 .switchMap(function (key) {
36807 return key == null || key !== conf.key ?
36808 _this._navigator.moveToKey$(conf.key) :
36809 _this._navigator.stateService.currentNode$
36812 .subscribe(function (node) {
36813 _this._navigator.stateService.start();
36814 _this._observer.startEmit();
36815 _this._coverComponent.configure({ loading: false, visible: false });
36816 _this._componentService.deactivateCover();
36817 }, function (error) {
36818 console.error("Failed to deactivate cover.", error);
36819 _this._coverComponent.configure({ loading: false, visible: true });
36822 else if (conf.visible) {
36823 _this._observer.stopEmit();
36824 _this._navigator.stateService.stop();
36825 _this._componentService.activateCover();
36829 ComponentController.prototype._uFalse = function (option, name) {
36830 if (option === undefined) {
36831 this._componentService.deactivate(name);
36834 if (typeof option === "boolean") {
36836 this._componentService.activate(name);
36839 this._componentService.deactivate(name);
36843 this._componentService.configure(name, option);
36844 this._componentService.activate(name);
36846 ComponentController.prototype._uTrue = function (option, name) {
36847 if (option === undefined) {
36848 this._componentService.activate(name);
36851 if (typeof option === "boolean") {
36853 this._componentService.activate(name);
36856 this._componentService.deactivate(name);
36860 this._componentService.configure(name, option);
36861 this._componentService.activate(name);
36863 return ComponentController;
36865 exports.ComponentController = ComponentController;
36867 },{"../Component":224}],340:[function(require,module,exports){
36869 var Render_1 = require("../Render");
36870 var Viewer_1 = require("../Viewer");
36871 var Container = (function () {
36872 function Container(id, stateService, options) {
36874 this._container = document.getElementById(id);
36875 this._container.classList.add("mapillary-js");
36876 this._canvasContainer = document.createElement("div");
36877 this._canvasContainer.className = "mapillary-js-interactive";
36878 this._container.appendChild(this._canvasContainer);
36879 this.renderService = new Render_1.RenderService(this._container, stateService.currentState$, options.renderMode);
36880 this.glRenderer = new Render_1.GLRenderer(this._canvasContainer, this.renderService);
36881 this.domRenderer = new Render_1.DOMRenderer(this._container, this.renderService, stateService.currentState$);
36882 this.mouseService = new Viewer_1.MouseService(this._canvasContainer, this._container);
36883 this.touchService = new Viewer_1.TouchService(this._canvasContainer);
36884 this.spriteService = new Viewer_1.SpriteService(options.sprite);
36886 Object.defineProperty(Container.prototype, "element", {
36888 return this._container;
36893 Object.defineProperty(Container.prototype, "canvasContainer", {
36895 return this.canvasContainer;
36902 exports.Container = Container;
36903 Object.defineProperty(exports, "__esModule", { value: true });
36904 exports.default = Container;
36906 },{"../Render":230,"../Viewer":234}],341:[function(require,module,exports){
36909 * Enumeration for image sizes
36912 * @description Image sizes in pixels for the long side of the image.
36915 (function (ImageSize) {
36917 * 320 pixels image size
36919 ImageSize[ImageSize["Size320"] = 320] = "Size320";
36921 * 640 pixels image size
36923 ImageSize[ImageSize["Size640"] = 640] = "Size640";
36925 * 1024 pixels image size
36927 ImageSize[ImageSize["Size1024"] = 1024] = "Size1024";
36929 * 2048 pixels image size
36931 ImageSize[ImageSize["Size2048"] = 2048] = "Size2048";
36932 })(ImageSize = exports.ImageSize || (exports.ImageSize = {}));
36934 },{}],342:[function(require,module,exports){
36935 /// <reference path="../../typings/index.d.ts" />
36937 var _ = require("underscore");
36938 var Subject_1 = require("rxjs/Subject");
36939 require("rxjs/add/operator/debounceTime");
36940 require("rxjs/add/operator/distinctUntilChanged");
36941 require("rxjs/add/operator/map");
36942 require("rxjs/add/operator/publishReplay");
36943 require("rxjs/add/operator/scan");
36944 require("rxjs/add/operator/startWith");
36945 var LoadingService = (function () {
36946 function LoadingService() {
36947 this._loadersSubject$ = new Subject_1.Subject();
36948 this._loaders$ = this._loadersSubject$
36949 .scan(function (loaders, loader) {
36950 if (loader.task !== undefined) {
36951 loaders[loader.task] = loader.loading;
36959 Object.defineProperty(LoadingService.prototype, "loading$", {
36961 return this._loaders$
36962 .map(function (loaders) {
36963 return _.reduce(loaders, function (loader, acc) {
36964 return (loader || acc);
36968 .distinctUntilChanged();
36973 LoadingService.prototype.taskLoading$ = function (task) {
36974 return this._loaders$
36975 .map(function (loaders) {
36976 return !!loaders[task];
36979 .distinctUntilChanged();
36981 LoadingService.prototype.startLoading = function (task) {
36982 this._loadersSubject$.next({ loading: true, task: task });
36984 LoadingService.prototype.stopLoading = function (task) {
36985 this._loadersSubject$.next({ loading: false, task: task });
36987 return LoadingService;
36989 exports.LoadingService = LoadingService;
36990 Object.defineProperty(exports, "__esModule", { value: true });
36991 exports.default = LoadingService;
36993 },{"rxjs/Subject":33,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,"underscore":175}],343:[function(require,module,exports){
36995 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
36996 var Observable_1 = require("rxjs/Observable");
36997 var Subject_1 = require("rxjs/Subject");
36998 require("rxjs/add/observable/fromEvent");
36999 require("rxjs/add/operator/distinctUntilChanged");
37000 require("rxjs/add/operator/filter");
37001 require("rxjs/add/operator/map");
37002 require("rxjs/add/operator/merge");
37003 require("rxjs/add/operator/mergeMap");
37004 require("rxjs/add/operator/publishReplay");
37005 require("rxjs/add/operator/scan");
37006 require("rxjs/add/operator/switchMap");
37007 require("rxjs/add/operator/withLatestFrom");
37008 var Geo_1 = require("../Geo");
37009 var MouseService = (function () {
37010 function MouseService(canvasContainer, container, viewportCoords) {
37012 this._canvasContainer = canvasContainer;
37013 this._container = container;
37014 this._viewportCoords = viewportCoords != null ? viewportCoords : new Geo_1.ViewportCoords();
37015 this._activeSubject$ = new BehaviorSubject_1.BehaviorSubject(false);
37016 this._active$ = this._activeSubject$
37017 .distinctUntilChanged()
37020 this._claimMouse$ = new Subject_1.Subject();
37021 this._documentMouseDown$ = Observable_1.Observable.fromEvent(document, "mousedown")
37022 .filter(function (event) {
37023 return _this._viewportCoords.insideElement(event, _this._container);
37026 this._documentMouseMove$ = Observable_1.Observable.fromEvent(document, "mousemove");
37027 this._documentMouseUp$ = Observable_1.Observable.fromEvent(document, "mouseup");
37028 this._documentCanvasMouseMove$ = this._documentMouseMove$
37029 .filter(function (event) {
37030 return _this._viewportCoords.insideElement(event, _this._container);
37033 this._mouseDown$ = Observable_1.Observable.fromEvent(canvasContainer, "mousedown");
37034 this._mouseLeave$ = Observable_1.Observable.fromEvent(canvasContainer, "mouseleave");
37035 this._mouseMove$ = Observable_1.Observable.fromEvent(canvasContainer, "mousemove");
37036 this._mouseUp$ = Observable_1.Observable.fromEvent(canvasContainer, "mouseup");
37037 this._mouseOut$ = Observable_1.Observable.fromEvent(canvasContainer, "mouseout");
37038 this._mouseOver$ = Observable_1.Observable.fromEvent(canvasContainer, "mouseover");
37039 this._click$ = Observable_1.Observable.fromEvent(canvasContainer, "click");
37040 this._dblClick$ = Observable_1.Observable.fromEvent(canvasContainer, "dblclick");
37042 .subscribe(function (event) {
37043 event.preventDefault();
37045 this._contextMenu$ = Observable_1.Observable.fromEvent(canvasContainer, "contextmenu");
37047 .subscribe(function (event) {
37048 event.preventDefault();
37050 this._mouseWheel$ = Observable_1.Observable.fromEvent(document, "wheel")
37051 .filter(function (event) {
37052 return _this._viewportCoords.insideElement(event, _this._container);
37055 this._consistentContextMenu$ = Observable_1.Observable
37056 .merge(this._mouseDown$, this._mouseMove$, this._mouseOut$, this._mouseUp$, this._contextMenu$)
37058 .filter(function (events) {
37059 // fire context menu on mouse up both on mac and windows
37060 return events[0].type === "mousedown" &&
37061 events[1].type === "contextmenu" &&
37062 events[2].type === "mouseup";
37064 .map(function (events) {
37068 var dragStop$ = Observable_1.Observable
37069 .merge(this._documentMouseUp$.filter(function (e) {
37070 return e.button === 0;
37073 var leftButtonDown$ = this._mouseDown$
37074 .filter(function (e) {
37075 return e.button === 0;
37078 this._mouseDragStart$ = leftButtonDown$
37079 .mergeMap(function (e) {
37080 return _this._documentMouseMove$
37081 .takeUntil(dragStop$)
37084 this._mouseDrag$ = leftButtonDown$
37085 .mergeMap(function (e) {
37086 return _this._documentMouseMove$
37088 .takeUntil(dragStop$);
37090 this._mouseDragEnd$ = this._mouseDragStart$
37091 .mergeMap(function (e) {
37092 return dragStop$.first();
37094 this._documentCanvasMouseDown$ = this._documentMouseDown$
37095 .filter(function (e) {
37096 return _this._viewportCoords.insideElement(e, _this._container);
37099 var documentCanvasLeftButtonDown$ = this._documentCanvasMouseDown$
37100 .filter(function (e) {
37101 return e.button === 0;
37104 this._documentCanvasMouseDragStart$ = documentCanvasLeftButtonDown$
37105 .mergeMap(function (e) {
37106 return _this._documentCanvasMouseMove$
37107 .takeUntil(dragStop$)
37110 this._documentCanvasMouseDrag$ = documentCanvasLeftButtonDown$
37111 .mergeMap(function (e) {
37112 return _this._documentCanvasMouseMove$
37114 .takeUntil(dragStop$);
37116 this._documentCanvasMouseDragEnd$ = this._documentCanvasMouseDragStart$
37117 .mergeMap(function (e) {
37118 return dragStop$.first();
37120 this._staticClick$ = this._mouseDown$
37121 .switchMap(function (e) {
37122 return _this._click$
37123 .takeUntil(_this._mouseMove$)
37126 this._mouseOwner$ = this._claimMouse$
37127 .scan(function (claims, mouseClaim) {
37128 if (mouseClaim.zindex == null) {
37129 delete claims[mouseClaim.name];
37132 claims[mouseClaim.name] = mouseClaim.zindex;
37136 .map(function (claims) {
37139 for (var name_1 in claims) {
37140 if (claims.hasOwnProperty(name_1)) {
37141 if (claims[name_1] > curZ) {
37142 curZ = claims[name_1];
37151 this._mouseOwner$.subscribe(function () { });
37153 Object.defineProperty(MouseService.prototype, "active$", {
37155 return this._active$;
37160 Object.defineProperty(MouseService.prototype, "activate$", {
37162 return this._activeSubject$;
37167 Object.defineProperty(MouseService.prototype, "documentCanvasMouseDown$", {
37169 return this._documentCanvasMouseDown$;
37174 Object.defineProperty(MouseService.prototype, "documentCanvasMouseMove$", {
37176 return this._documentCanvasMouseMove$;
37181 Object.defineProperty(MouseService.prototype, "documentCanvasMouseDragStart$", {
37183 return this._documentCanvasMouseDragStart$;
37188 Object.defineProperty(MouseService.prototype, "documentCanvasMouseDrag$", {
37190 return this._documentCanvasMouseDrag$;
37195 Object.defineProperty(MouseService.prototype, "documentCanvasMouseDragEnd$", {
37197 return this._documentCanvasMouseDragEnd$;
37202 Object.defineProperty(MouseService.prototype, "documentMouseMove$", {
37204 return this._documentMouseMove$;
37209 Object.defineProperty(MouseService.prototype, "documentMouseUp$", {
37211 return this._documentMouseUp$;
37216 Object.defineProperty(MouseService.prototype, "mouseOwner$", {
37218 return this._mouseOwner$;
37223 Object.defineProperty(MouseService.prototype, "mouseDown$", {
37225 return this._mouseDown$;
37230 Object.defineProperty(MouseService.prototype, "mouseMove$", {
37232 return this._mouseMove$;
37237 Object.defineProperty(MouseService.prototype, "mouseLeave$", {
37239 return this._mouseLeave$;
37244 Object.defineProperty(MouseService.prototype, "mouseOut$", {
37246 return this._mouseOut$;
37251 Object.defineProperty(MouseService.prototype, "mouseOver$", {
37253 return this._mouseOver$;
37258 Object.defineProperty(MouseService.prototype, "mouseUp$", {
37260 return this._mouseUp$;
37265 Object.defineProperty(MouseService.prototype, "click$", {
37267 return this._click$;
37272 Object.defineProperty(MouseService.prototype, "dblClick$", {
37274 return this._dblClick$;
37279 Object.defineProperty(MouseService.prototype, "contextMenu$", {
37281 return this._consistentContextMenu$;
37286 Object.defineProperty(MouseService.prototype, "mouseWheel$", {
37288 return this._mouseWheel$;
37293 Object.defineProperty(MouseService.prototype, "mouseDragStart$", {
37295 return this._mouseDragStart$;
37300 Object.defineProperty(MouseService.prototype, "mouseDrag$", {
37302 return this._mouseDrag$;
37307 Object.defineProperty(MouseService.prototype, "mouseDragEnd$", {
37309 return this._mouseDragEnd$;
37314 Object.defineProperty(MouseService.prototype, "staticClick$", {
37316 return this._staticClick$;
37321 MouseService.prototype.claimMouse = function (name, zindex) {
37322 this._claimMouse$.next({ name: name, zindex: zindex });
37324 MouseService.prototype.unclaimMouse = function (name) {
37325 this._claimMouse$.next({ name: name, zindex: null });
37327 MouseService.prototype.filtered$ = function (name, observable$) {
37329 .withLatestFrom(this.mouseOwner$, function (event, owner) {
37330 return [event, owner];
37332 .filter(function (eo) {
37333 return eo[1] === name;
37335 .map(function (eo) {
37339 return MouseService;
37341 exports.MouseService = MouseService;
37342 Object.defineProperty(exports, "__esModule", { value: true });
37343 exports.default = MouseService;
37345 },{"../Geo":227,"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/fromEvent":41,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82}],344:[function(require,module,exports){
37346 /// <reference path="../../typings/index.d.ts" />
37348 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
37349 var Observable_1 = require("rxjs/Observable");
37350 require("rxjs/add/observable/throw");
37351 require("rxjs/add/operator/do");
37352 require("rxjs/add/operator/finally");
37353 require("rxjs/add/operator/first");
37354 require("rxjs/add/operator/map");
37355 require("rxjs/add/operator/mergeMap");
37356 var API_1 = require("../API");
37357 var Graph_1 = require("../Graph");
37358 var Edge_1 = require("../Edge");
37359 var State_1 = require("../State");
37360 var Viewer_1 = require("../Viewer");
37361 var Navigator = (function () {
37362 function Navigator(clientId, token, apiV3, graphService, imageLoadingService, loadingService, stateService, cacheService) {
37363 this._apiV3 = apiV3 != null ? apiV3 : new API_1.APIv3(clientId, token);
37364 this._imageLoadingService = imageLoadingService != null ? imageLoadingService : new Graph_1.ImageLoadingService();
37365 this._graphService = graphService != null ?
37367 new Graph_1.GraphService(new Graph_1.Graph(this.apiV3), this._imageLoadingService);
37368 this._loadingService = loadingService != null ? loadingService : new Viewer_1.LoadingService();
37369 this._loadingName = "navigator";
37370 this._stateService = stateService != null ? stateService : new State_1.StateService();
37371 this._cacheService = cacheService != null ?
37373 new Viewer_1.CacheService(this._graphService, this._stateService);
37374 this._cacheService.start();
37375 this._keyRequested$ = new BehaviorSubject_1.BehaviorSubject(null);
37376 this._movedToKey$ = new BehaviorSubject_1.BehaviorSubject(null);
37377 this._dirRequested$ = new BehaviorSubject_1.BehaviorSubject(null);
37378 this._latLonRequested$ = new BehaviorSubject_1.BehaviorSubject(null);
37380 Object.defineProperty(Navigator.prototype, "apiV3", {
37382 return this._apiV3;
37387 Object.defineProperty(Navigator.prototype, "graphService", {
37389 return this._graphService;
37394 Object.defineProperty(Navigator.prototype, "imageLoadingService", {
37396 return this._imageLoadingService;
37401 Object.defineProperty(Navigator.prototype, "keyRequested$", {
37403 return this._keyRequested$;
37408 Object.defineProperty(Navigator.prototype, "loadingService", {
37410 return this._loadingService;
37415 Object.defineProperty(Navigator.prototype, "movedToKey$", {
37417 return this._movedToKey$;
37422 Object.defineProperty(Navigator.prototype, "stateService", {
37424 return this._stateService;
37429 Navigator.prototype.moveToKey$ = function (key) {
37431 this.loadingService.startLoading(this._loadingName);
37432 this._keyRequested$.next(key);
37433 return this._graphService.cacheNode$(key)
37434 .do(function (node) {
37435 _this.stateService.setNodes([node]);
37436 _this._movedToKey$.next(node.key);
37438 .finally(function () {
37439 _this.loadingService.stopLoading(_this._loadingName);
37442 Navigator.prototype.moveDir$ = function (direction) {
37444 this.loadingService.startLoading(this._loadingName);
37445 this._dirRequested$.next(direction);
37446 return this.stateService.currentNode$
37448 .mergeMap(function (node) {
37449 return ([Edge_1.EdgeDirection.Next, Edge_1.EdgeDirection.Prev].indexOf(direction) > -1 ?
37450 node.sequenceEdges$ :
37451 node.spatialEdges$)
37453 .map(function (status) {
37454 for (var _i = 0, _a = status.edges; _i < _a.length; _i++) {
37456 if (edge.data.direction === direction) {
37463 .mergeMap(function (directionKey) {
37464 if (directionKey == null) {
37465 _this.loadingService.stopLoading(_this._loadingName);
37466 return Observable_1.Observable
37467 .throw(new Error("Direction (" + direction + ") does not exist for current node."));
37469 return _this.moveToKey$(directionKey);
37472 Navigator.prototype.moveCloseTo$ = function (lat, lon) {
37474 this.loadingService.startLoading(this._loadingName);
37475 this._latLonRequested$.next({ lat: lat, lon: lon });
37476 return this.apiV3.imageCloseTo$(lat, lon)
37477 .mergeMap(function (fullNode) {
37478 if (fullNode == null) {
37479 _this.loadingService.stopLoading(_this._loadingName);
37480 return Observable_1.Observable
37481 .throw(new Error("No image found close to lat " + lat + ", lon " + lon + "."));
37483 return _this.moveToKey$(fullNode.key);
37486 Navigator.prototype.setFilter$ = function (filter) {
37488 this._stateService.clearNodes();
37489 return this._movedToKey$
37491 .mergeMap(function (key) {
37493 return _this._trajectoryKeys$()
37494 .mergeMap(function (keys) {
37495 return _this._graphService.setFilter$(filter)
37496 .mergeMap(function (graph) {
37497 return _this._cacheKeys$(keys);
37502 return _this._keyRequested$
37503 .mergeMap(function (requestedKey) {
37504 if (requestedKey != null) {
37505 return _this._graphService.setFilter$(filter)
37506 .mergeMap(function (graph) {
37507 return _this._graphService.cacheNode$(requestedKey);
37510 return _this._graphService.setFilter$(filter)
37511 .map(function (graph) {
37516 .map(function (node) {
37520 Navigator.prototype.setToken$ = function (token) {
37522 this._stateService.clearNodes();
37523 return this._movedToKey$
37525 .do(function (key) {
37526 _this._apiV3.setToken(token);
37528 .mergeMap(function (key) {
37529 return key == null ?
37530 _this._graphService.reset$([])
37531 .map(function (graph) {
37534 _this._trajectoryKeys$()
37535 .mergeMap(function (keys) {
37536 return _this._graphService.reset$(keys)
37537 .mergeMap(function (graph) {
37538 return _this._cacheKeys$(keys);
37542 .map(function (node) {
37547 Navigator.prototype._cacheKeys$ = function (keys) {
37549 var cacheNodes$ = keys
37550 .map(function (key) {
37551 return _this._graphService.cacheNode$(key);
37553 return Observable_1.Observable
37557 Navigator.prototype._trajectoryKeys$ = function () {
37558 return this._stateService.currentState$
37560 .map(function (frame) {
37561 return frame.state.trajectory
37562 .map(function (node) {
37569 exports.Navigator = Navigator;
37570 Object.defineProperty(exports, "__esModule", { value: true });
37571 exports.default = Navigator;
37573 },{"../API":223,"../Edge":225,"../Graph":228,"../State":231,"../Viewer":234,"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/add/observable/throw":45,"rxjs/add/operator/do":58,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67}],345:[function(require,module,exports){
37575 var Observable_1 = require("rxjs/Observable");
37576 require("rxjs/add/observable/combineLatest");
37577 require("rxjs/add/operator/distinctUntilChanged");
37578 require("rxjs/add/operator/map");
37579 require("rxjs/add/operator/throttleTime");
37580 var Viewer_1 = require("../Viewer");
37581 var Observer = (function () {
37582 function Observer(eventEmitter, navigator, container) {
37583 this._container = container;
37584 this._eventEmitter = eventEmitter;
37585 this._navigator = navigator;
37586 this._projection = new Viewer_1.Projection();
37587 this._started = false;
37589 Object.defineProperty(Observer.prototype, "started", {
37591 return this._started;
37596 Observer.prototype.startEmit = function () {
37598 if (this._started) {
37601 this._started = true;
37602 this._loadingSubscription = this._navigator.loadingService.loading$
37603 .subscribe(function (loading) {
37604 _this._eventEmitter.fire(Viewer_1.Viewer.loadingchanged, loading);
37606 this._currentNodeSubscription = this._navigator.stateService.currentNodeExternal$
37607 .subscribe(function (node) {
37608 _this._eventEmitter.fire(Viewer_1.Viewer.nodechanged, node);
37610 this._sequenceEdgesSubscription = this._navigator.stateService.currentNodeExternal$
37611 .switchMap(function (node) {
37612 return node.sequenceEdges$;
37614 .subscribe(function (status) {
37615 _this._eventEmitter.fire(Viewer_1.Viewer.sequenceedgeschanged, status);
37617 this._spatialEdgesSubscription = this._navigator.stateService.currentNodeExternal$
37618 .switchMap(function (node) {
37619 return node.spatialEdges$;
37621 .subscribe(function (status) {
37622 _this._eventEmitter.fire(Viewer_1.Viewer.spatialedgeschanged, status);
37624 this._moveSubscription = Observable_1.Observable
37625 .combineLatest(this._navigator.stateService.inMotion$, this._container.mouseService.active$, this._container.touchService.active$)
37626 .map(function (values) {
37627 return values[0] || values[1] || values[2];
37629 .distinctUntilChanged()
37630 .subscribe(function (started) {
37632 _this._eventEmitter.fire(Viewer_1.Viewer.movestart, null);
37635 _this._eventEmitter.fire(Viewer_1.Viewer.moveend, null);
37638 this._bearingSubscription = this._container.renderService.bearing$
37640 .distinctUntilChanged(function (b1, b2) {
37641 return Math.abs(b2 - b1) < 1;
37643 .subscribe(function (bearing) {
37644 _this._eventEmitter.fire(Viewer_1.Viewer.bearingchanged, bearing);
37646 var mouseMove$ = this._container.mouseService.active$
37647 .switchMap(function (active) {
37649 Observable_1.Observable.empty() :
37650 _this._container.mouseService.mouseMove$;
37652 this._viewerMouseEventSubscription = Observable_1.Observable
37653 .merge(this._mapMouseEvent$(Viewer_1.Viewer.click, this._container.mouseService.staticClick$), this._mapMouseEvent$(Viewer_1.Viewer.contextmenu, this._container.mouseService.contextMenu$), this._mapMouseEvent$(Viewer_1.Viewer.dblclick, this._container.mouseService.dblClick$), this._mapMouseEvent$(Viewer_1.Viewer.mousedown, this._container.mouseService.mouseDown$), this._mapMouseEvent$(Viewer_1.Viewer.mousemove, mouseMove$), this._mapMouseEvent$(Viewer_1.Viewer.mouseout, this._container.mouseService.mouseOut$), this._mapMouseEvent$(Viewer_1.Viewer.mouseover, this._container.mouseService.mouseOver$), this._mapMouseEvent$(Viewer_1.Viewer.mouseup, this._container.mouseService.mouseUp$))
37654 .withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.reference$, this._navigator.stateService.currentTransform$)
37655 .map(function (_a) {
37656 var _b = _a[0], type = _b[0], event = _b[1], render = _a[1], reference = _a[2], transform = _a[3];
37657 var unprojection = _this._projection.unprojectFromEvent(event, _this._container.element, render, reference, transform);
37659 basicPoint: unprojection.basicPoint,
37660 latLon: unprojection.latLon,
37661 originalEvent: event,
37662 pixelPoint: unprojection.pixelPoint,
37663 target: _this._eventEmitter,
37667 .subscribe(function (event) {
37668 _this._eventEmitter.fire(event.type, event);
37671 Observer.prototype.stopEmit = function () {
37672 if (!this.started) {
37675 this._started = false;
37676 this._bearingSubscription.unsubscribe();
37677 this._loadingSubscription.unsubscribe();
37678 this._currentNodeSubscription.unsubscribe();
37679 this._moveSubscription.unsubscribe();
37680 this._sequenceEdgesSubscription.unsubscribe();
37681 this._spatialEdgesSubscription.unsubscribe();
37682 this._viewerMouseEventSubscription.unsubscribe();
37683 this._bearingSubscription = null;
37684 this._loadingSubscription = null;
37685 this._currentNodeSubscription = null;
37686 this._moveSubscription = null;
37687 this._sequenceEdgesSubscription = null;
37688 this._spatialEdgesSubscription = null;
37689 this._viewerMouseEventSubscription = null;
37691 Observer.prototype.unproject$ = function (pixelPoint) {
37693 return Observable_1.Observable
37694 .combineLatest(this._container.renderService.renderCamera$, this._navigator.stateService.reference$, this._navigator.stateService.currentTransform$)
37696 .map(function (_a) {
37697 var render = _a[0], reference = _a[1], transform = _a[2];
37698 var unprojection = _this._projection.unprojectFromCanvas(pixelPoint, _this._container.element, render, reference, transform);
37699 return unprojection.latLon;
37702 Observer.prototype._mapMouseEvent$ = function (type, mouseEvent$) {
37703 return mouseEvent$.map(function (event) {
37704 return [type, event];
37709 exports.Observer = Observer;
37710 Object.defineProperty(exports, "__esModule", { value: true });
37711 exports.default = Observer;
37713 },{"../Viewer":234,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/throttleTime":81}],346:[function(require,module,exports){
37714 /// <reference path="../../typings/index.d.ts" />
37716 var THREE = require("three");
37717 var Geo_1 = require("../Geo");
37718 var Projection = (function () {
37719 function Projection(geoCoords, viewportCoords) {
37720 this._geoCoords = !!geoCoords ? geoCoords : new Geo_1.GeoCoords();
37721 this._viewportCoords = !!viewportCoords ? viewportCoords : new Geo_1.ViewportCoords();
37723 Projection.prototype.unprojectFromEvent = function (event, container, renderCamera, reference, transform) {
37724 var pixelPoint = this._viewportCoords.canvasPosition(event, container);
37725 return this.unprojectFromCanvas(pixelPoint, container, renderCamera, reference, transform);
37727 Projection.prototype.unprojectFromCanvas = function (pixelPoint, container, render, reference, transform) {
37728 var canvasX = pixelPoint[0];
37729 var canvasY = pixelPoint[1];
37730 var _a = this._viewportCoords.canvasToViewport(canvasX, canvasY, container), viewportX = _a[0], viewportY = _a[1];
37731 var point3d = new THREE.Vector3(viewportX, viewportY, 1)
37732 .unproject(render.perspective);
37733 var basicPoint = transform.projectBasic(point3d.toArray());
37734 if (basicPoint[0] < 0 || basicPoint[0] > 1 || basicPoint[1] < 0 || basicPoint[1] > 1) {
37737 var direction3d = point3d.clone().sub(render.camera.position).normalize();
37738 var dist = -2 / direction3d.z;
37740 if (dist > 0 && dist < 100 && !!basicPoint) {
37741 var point = direction3d.clone().multiplyScalar(dist).add(render.camera.position);
37742 var latLonArray = this._geoCoords
37743 .enuToGeodetic(point.x, point.y, point.z, reference.lat, reference.lon, reference.alt)
37745 latLon = { lat: latLonArray[0], lon: latLonArray[1] };
37747 var unprojection = {
37748 basicPoint: basicPoint,
37750 pixelPoint: [canvasX, canvasY],
37752 return unprojection;
37756 exports.Projection = Projection;
37757 Object.defineProperty(exports, "__esModule", { value: true });
37758 exports.default = Projection;
37760 },{"../Geo":227,"three":174}],347:[function(require,module,exports){
37762 var SpriteAlignment;
37763 (function (SpriteAlignment) {
37764 SpriteAlignment[SpriteAlignment["Center"] = 0] = "Center";
37765 SpriteAlignment[SpriteAlignment["Start"] = 1] = "Start";
37766 SpriteAlignment[SpriteAlignment["End"] = 2] = "End";
37767 })(SpriteAlignment = exports.SpriteAlignment || (exports.SpriteAlignment = {}));
37768 Object.defineProperty(exports, "__esModule", { value: true });
37769 exports.default = SpriteAlignment;
37771 },{}],348:[function(require,module,exports){
37772 /// <reference path="../../typings/index.d.ts" />
37774 var THREE = require("three");
37775 var vd = require("virtual-dom");
37776 var Subject_1 = require("rxjs/Subject");
37777 require("rxjs/add/operator/publishReplay");
37778 require("rxjs/add/operator/scan");
37779 require("rxjs/add/operator/startWith");
37780 var Viewer_1 = require("../Viewer");
37781 var SpriteAtlas = (function () {
37782 function SpriteAtlas() {
37784 Object.defineProperty(SpriteAtlas.prototype, "json", {
37785 set: function (value) {
37786 this._json = value;
37791 Object.defineProperty(SpriteAtlas.prototype, "image", {
37792 set: function (value) {
37793 this._image = value;
37794 this._texture = new THREE.Texture(this._image);
37795 this._texture.minFilter = THREE.NearestFilter;
37800 Object.defineProperty(SpriteAtlas.prototype, "loaded", {
37802 return !!(this._image && this._json);
37807 SpriteAtlas.prototype.getGLSprite = function (name) {
37808 if (!this.loaded) {
37809 throw new Error("Sprites cannot be retrieved before the atlas is loaded.");
37811 var definition = this._json[name];
37813 console.warn("Sprite with key" + name + "does not exist in sprite definition.");
37814 return new THREE.Object3D();
37816 var texture = this._texture.clone();
37817 texture.needsUpdate = true;
37818 var width = this._image.width;
37819 var height = this._image.height;
37820 texture.offset.x = definition.x / width;
37821 texture.offset.y = (height - definition.y - definition.height) / height;
37822 texture.repeat.x = definition.width / width;
37823 texture.repeat.y = definition.height / height;
37824 var material = new THREE.SpriteMaterial({ map: texture });
37825 return new THREE.Sprite(material);
37827 SpriteAtlas.prototype.getDOMSprite = function (name, horizontalAlign, verticalAlign) {
37828 if (!this.loaded) {
37829 throw new Error("Sprites cannot be retrieved before the atlas is loaded.");
37831 if (horizontalAlign == null) {
37832 horizontalAlign = Viewer_1.SpriteAlignment.Start;
37834 if (verticalAlign == null) {
37835 verticalAlign = Viewer_1.SpriteAlignment.Start;
37837 var definition = this._json[name];
37839 console.warn("Sprite with key" + name + "does not exist in sprite definition.");
37840 return vd.h("div", {}, []);
37842 var clipTop = definition.y;
37843 var clipRigth = definition.x + definition.width;
37844 var clipBottom = definition.y + definition.height;
37845 var clipLeft = definition.x;
37846 var left = -definition.x;
37847 var top = -definition.y;
37848 var height = this._image.height;
37849 var width = this._image.width;
37850 switch (horizontalAlign) {
37851 case Viewer_1.SpriteAlignment.Center:
37852 left -= definition.width / 2;
37854 case Viewer_1.SpriteAlignment.End:
37855 left -= definition.width;
37857 case Viewer_1.SpriteAlignment.Start:
37862 switch (verticalAlign) {
37863 case Viewer_1.SpriteAlignment.Center:
37864 top -= definition.height / 2;
37866 case Viewer_1.SpriteAlignment.End:
37867 top -= definition.height;
37869 case Viewer_1.SpriteAlignment.Start:
37874 var pixelRatioInverse = 1 / definition.pixelRatio;
37875 clipTop *= pixelRatioInverse;
37876 clipRigth *= pixelRatioInverse;
37877 clipBottom *= pixelRatioInverse;
37878 clipLeft *= pixelRatioInverse;
37879 left *= pixelRatioInverse;
37880 top *= pixelRatioInverse;
37881 height *= pixelRatioInverse;
37882 width *= pixelRatioInverse;
37884 src: this._image.src,
37886 clip: "rect(" + clipTop + "px, " + clipRigth + "px, " + clipBottom + "px, " + clipLeft + "px)",
37887 height: height + "px",
37889 position: "absolute",
37891 width: width + "px",
37894 return vd.h("img", properties, []);
37896 return SpriteAtlas;
37898 var SpriteService = (function () {
37899 function SpriteService(sprite) {
37901 this._retina = window.devicePixelRatio > 1;
37902 this._spriteAtlasOperation$ = new Subject_1.Subject();
37903 this._spriteAtlas$ = this._spriteAtlasOperation$
37904 .startWith(function (atlas) {
37907 .scan(function (atlas, operation) {
37908 return operation(atlas);
37909 }, new SpriteAtlas())
37912 this._spriteAtlas$.subscribe(function () { });
37913 if (sprite == null) {
37916 var format = this._retina ? "@2x" : "";
37917 var imageXmlHTTP = new XMLHttpRequest();
37918 imageXmlHTTP.open("GET", sprite + format + ".png", true);
37919 imageXmlHTTP.responseType = "arraybuffer";
37920 imageXmlHTTP.onload = function () {
37921 var image = new Image();
37922 image.onload = function () {
37923 _this._spriteAtlasOperation$.next(function (atlas) {
37924 atlas.image = image;
37928 var blob = new Blob([imageXmlHTTP.response]);
37929 image.src = window.URL.createObjectURL(blob);
37931 imageXmlHTTP.onerror = function (error) {
37932 console.error(new Error("Failed to fetch sprite sheet (" + sprite + format + ".png)"));
37934 imageXmlHTTP.send();
37935 var jsonXmlHTTP = new XMLHttpRequest();
37936 jsonXmlHTTP.open("GET", sprite + format + ".json", true);
37937 jsonXmlHTTP.responseType = "text";
37938 jsonXmlHTTP.onload = function () {
37939 var json = JSON.parse(jsonXmlHTTP.response);
37940 _this._spriteAtlasOperation$.next(function (atlas) {
37945 jsonXmlHTTP.onerror = function (error) {
37946 console.error(new Error("Failed to fetch sheet (" + sprite + format + ".json)"));
37948 jsonXmlHTTP.send();
37950 Object.defineProperty(SpriteService.prototype, "spriteAtlas$", {
37952 return this._spriteAtlas$;
37957 return SpriteService;
37959 exports.SpriteService = SpriteService;
37960 Object.defineProperty(exports, "__esModule", { value: true });
37961 exports.default = SpriteService;
37963 },{"../Viewer":234,"rxjs/Subject":33,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,"three":174,"virtual-dom":180}],349:[function(require,module,exports){
37965 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
37966 var Observable_1 = require("rxjs/Observable");
37967 var Subject_1 = require("rxjs/Subject");
37968 require("rxjs/add/observable/timer");
37969 require("rxjs/add/operator/bufferWhen");
37970 require("rxjs/add/operator/filter");
37971 require("rxjs/add/operator/map");
37972 require("rxjs/add/operator/merge");
37973 require("rxjs/add/operator/scan");
37974 require("rxjs/add/operator/switchMap");
37975 var TouchService = (function () {
37976 function TouchService(element) {
37978 this._element = element;
37979 this._activeSubject$ = new BehaviorSubject_1.BehaviorSubject(false);
37980 this._active$ = this._activeSubject$
37981 .distinctUntilChanged()
37984 this._touchStart$ = Observable_1.Observable.fromEvent(element, "touchstart");
37985 this._touchMove$ = Observable_1.Observable.fromEvent(element, "touchmove");
37986 this._touchEnd$ = Observable_1.Observable.fromEvent(element, "touchend");
37987 this._touchCancel$ = Observable_1.Observable.fromEvent(element, "touchcancel");
37988 var tapStart$ = this._touchStart$
37989 .filter(function (te) {
37990 return te.touches.length === 1 && te.targetTouches.length === 1;
37993 this._doubleTap$ = tapStart$
37994 .bufferWhen(function () {
37997 .switchMap(function (event) {
37998 return Observable_1.Observable
38004 .filter(function (events) {
38005 return events.length === 2;
38007 .map(function (events) {
38008 return events[events.length - 1];
38012 .subscribe(function (event) {
38013 event.preventDefault();
38015 this._singleTouchMove$ = this._touchMove$
38016 .filter(function (te) {
38017 return te.touches.length === 1 && te.targetTouches.length === 1;
38020 var singleTouchStart$ = Observable_1.Observable
38021 .merge(this._touchStart$, this._touchEnd$, this._touchCancel$)
38022 .filter(function (te) {
38023 return te.touches.length === 1 && te.targetTouches.length === 1;
38025 var multipleTouchStart$ = Observable_1.Observable
38026 .merge(this._touchStart$, this._touchEnd$, this._touchCancel$)
38027 .filter(function (te) {
38028 return te.touches.length >= 1;
38030 var touchStop$ = Observable_1.Observable
38031 .merge(this._touchEnd$, this._touchCancel$)
38032 .filter(function (te) {
38033 return te.touches.length === 0;
38035 this._singleTouchDragStart$ = singleTouchStart$
38036 .mergeMap(function (e) {
38037 return _this._singleTouchMove$
38038 .takeUntil(Observable_1.Observable.merge(touchStop$, multipleTouchStart$))
38041 this._singleTouchDragEnd$ = singleTouchStart$
38042 .mergeMap(function (e) {
38043 return Observable_1.Observable
38044 .merge(touchStop$, multipleTouchStart$)
38047 this._singleTouchDrag$ = singleTouchStart$
38048 .switchMap(function (te) {
38049 return _this._singleTouchMove$
38051 .takeUntil(Observable_1.Observable
38052 .merge(multipleTouchStart$, touchStop$));
38054 var touchesChanged$ = Observable_1.Observable
38055 .merge(this._touchStart$, this._touchEnd$, this._touchCancel$);
38056 this._pinchStart$ = touchesChanged$
38057 .filter(function (te) {
38058 return te.touches.length === 2 && te.targetTouches.length === 2;
38060 this._pinchEnd$ = touchesChanged$
38061 .filter(function (te) {
38062 return te.touches.length !== 2 || te.targetTouches.length !== 2;
38064 this._pinchOperation$ = new Subject_1.Subject();
38065 this._pinch$ = this._pinchOperation$
38066 .scan(function (pinch, operation) {
38067 return operation(pinch);
38077 originalEvent: null,
38086 .filter(function (te) {
38087 return te.touches.length === 2 && te.targetTouches.length === 2;
38089 .map(function (te) {
38090 return function (previous) {
38091 var touch1 = te.touches[0];
38092 var touch2 = te.touches[1];
38093 var minX = Math.min(touch1.clientX, touch2.clientX);
38094 var maxX = Math.max(touch1.clientX, touch2.clientX);
38095 var minY = Math.min(touch1.clientY, touch2.clientY);
38096 var maxY = Math.max(touch1.clientY, touch2.clientY);
38097 var centerClientX = minX + (maxX - minX) / 2;
38098 var centerClientY = minY + (maxY - minY) / 2;
38099 var centerPageX = centerClientX + touch1.pageX - touch1.clientX;
38100 var centerPageY = centerClientY + touch1.pageY - touch1.clientY;
38101 var centerScreenX = centerClientX + touch1.screenX - touch1.clientX;
38102 var centerScreenY = centerClientY + touch1.screenY - touch1.clientY;
38103 var distanceX = Math.abs(touch1.clientX - touch2.clientX);
38104 var distanceY = Math.abs(touch1.clientY - touch2.clientY);
38105 var distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY);
38106 var distanceChange = distance - previous.distance;
38107 var changeX = distanceX - previous.distanceX;
38108 var changeY = distanceY - previous.distanceY;
38112 clientX: centerClientX,
38113 clientY: centerClientY,
38114 distance: distance,
38115 distanceChange: distanceChange,
38116 distanceX: distanceX,
38117 distanceY: distanceY,
38119 pageX: centerPageX,
38120 pageY: centerPageY,
38121 screenX: centerScreenX,
38122 screenY: centerScreenY,
38129 .subscribe(this._pinchOperation$);
38130 this._pinchChange$ = this._pinchStart$
38131 .switchMap(function (te) {
38132 return _this._pinch$
38134 .takeUntil(_this._pinchEnd$);
38137 Object.defineProperty(TouchService.prototype, "active$", {
38139 return this._active$;
38144 Object.defineProperty(TouchService.prototype, "activate$", {
38146 return this._activeSubject$;
38151 Object.defineProperty(TouchService.prototype, "doubleTap$", {
38153 return this._doubleTap$;
38158 Object.defineProperty(TouchService.prototype, "touchStart$", {
38160 return this._touchStart$;
38165 Object.defineProperty(TouchService.prototype, "touchMove$", {
38167 return this._touchMove$;
38172 Object.defineProperty(TouchService.prototype, "touchEnd$", {
38174 return this._touchEnd$;
38179 Object.defineProperty(TouchService.prototype, "touchCancel$", {
38181 return this._touchCancel$;
38186 Object.defineProperty(TouchService.prototype, "singleTouchDragStart$", {
38188 return this._singleTouchDragStart$;
38193 Object.defineProperty(TouchService.prototype, "singleTouchDrag$", {
38195 return this._singleTouchDrag$;
38200 Object.defineProperty(TouchService.prototype, "singleTouchDragEnd$", {
38202 return this._singleTouchDragEnd$;
38207 Object.defineProperty(TouchService.prototype, "pinch$", {
38209 return this._pinchChange$;
38214 Object.defineProperty(TouchService.prototype, "pinchStart$", {
38216 return this._pinchStart$;
38221 Object.defineProperty(TouchService.prototype, "pinchEnd$", {
38223 return this._pinchEnd$;
38228 return TouchService;
38230 exports.TouchService = TouchService;
38232 },{"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/timer":46,"rxjs/add/operator/bufferWhen":50,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78}],350:[function(require,module,exports){
38233 /// <reference path="../../typings/index.d.ts" />
38235 var __extends = (this && this.__extends) || function (d, b) {
38236 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
38237 function __() { this.constructor = d; }
38238 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
38240 var when = require("when");
38241 var Viewer_1 = require("../Viewer");
38242 var Utils_1 = require("../Utils");
38246 * @classdesc The Viewer object represents the navigable photo viewer.
38247 * Create a Viewer by specifying a container, client ID, photo key and
38248 * other options. The viewer exposes methods and events for programmatic
38251 var Viewer = (function (_super) {
38252 __extends(Viewer, _super);
38254 * Create a new viewer instance.
38256 * @param {string} id - Required `id` of a DOM element which will
38257 * be transformed into the viewer.
38258 * @param {string} clientId - Required `Mapillary API ClientID`. Can
38259 * be obtained from https://www.mapillary.com/app/settings/developers.
38260 * @param {string} [key] - Optional `photoId` to start from, can be any
38261 * Mapillary photo, if null no image is loaded.
38262 * @param {IViewerOptions} [options] - Optional configuration object
38263 * specifing Viewer's initial setup.
38264 * @param {string} [token] - Optional bearer token for API requests of
38265 * protected resources.
38269 * var viewer = new Viewer("<element-id>", "<client-id>", "<my key>");
38272 function Viewer(id, clientId, key, options, token) {
38273 var _this = _super.call(this) || this;
38274 options = options != null ? options : {};
38275 Utils_1.Settings.setOptions(options);
38276 _this._navigator = new Viewer_1.Navigator(clientId, token);
38277 _this._container = new Viewer_1.Container(id, _this._navigator.stateService, options);
38278 _this._observer = new Viewer_1.Observer(_this, _this._navigator, _this._container);
38279 _this._componentController = new Viewer_1.ComponentController(_this._container, _this._navigator, _this._observer, key, options.component);
38283 * Activate a component.
38285 * @param {string} name - Name of the component which will become active.
38289 * viewer.activateComponent("mouse");
38292 Viewer.prototype.activateComponent = function (name) {
38293 this._componentController.activate(name);
38296 * Activate the cover (deactivates all other components).
38298 Viewer.prototype.activateCover = function () {
38299 this._componentController.activateCover();
38302 * Deactivate a component.
38304 * @param {string} name - Name of component which become inactive.
38308 * viewer.deactivateComponent("mouse");
38311 Viewer.prototype.deactivateComponent = function (name) {
38312 this._componentController.deactivate(name);
38315 * Deactivate the cover (activates all components marked as active).
38317 Viewer.prototype.deactivateCover = function () {
38318 this._componentController.deactivateCover();
38321 * Get the bearing of the current viewer camera.
38323 * @description The bearing depends on how the camera
38324 * is currently rotated and does not correspond
38325 * to the compass angle of the current node if the view
38328 * Bearing is measured in degrees clockwise with respect to
38331 * @returns {Promise<number>} Promise to the bearing
38332 * of the current viewer camera.
38336 * viewer.getBearing().then((b) => { console.log(b); });
38339 Viewer.prototype.getBearing = function () {
38341 return when.promise(function (resolve, reject) {
38342 _this._container.renderService.bearing$
38344 .subscribe(function (bearing) {
38346 }, function (error) {
38352 * Get the basic coordinates of the current photo that is
38353 * at the center of the viewport.
38355 * @description Basic coordinates are 2D coordinates on the [0, 1] interval
38356 * and have the origin point, (0, 0), at the top left corner and the
38357 * maximum value, (1, 1), at the bottom right corner of the original
38360 * @returns {Promise<number[]>} Promise to the basic coordinates
38361 * of the current photo at the center for the viewport.
38365 * viewer.getCenter().then((c) => { console.log(c); });
38368 Viewer.prototype.getCenter = function () {
38370 return when.promise(function (resolve, reject) {
38371 _this._navigator.stateService.getCenter()
38372 .subscribe(function (center) {
38374 }, function (error) {
38382 * @param {string} name - Name of component.
38383 * @returns {Component} The requested component.
38387 * var mouseComponent = viewer.getComponent("mouse");
38390 Viewer.prototype.getComponent = function (name) {
38391 return this._componentController.get(name);
38394 * Get the photo's current zoom level.
38396 * @returns {Promise<number>} Promise to the viewers's current
38401 * viewer.getZoom().then((z) => { console.log(z); });
38404 Viewer.prototype.getZoom = function () {
38406 return when.promise(function (resolve, reject) {
38407 _this._navigator.stateService.getZoom()
38408 .subscribe(function (zoom) {
38410 }, function (error) {
38416 * Move close to given latitude and longitude.
38418 * @description Because the method propagates IO errors, these potential errors
38419 * need to be handled by the method caller (see example).
38421 * @param {Number} lat - Latitude, in degrees.
38422 * @param {Number} lon - Longitude, in degrees.
38423 * @returns {Promise<Node>} Promise to the node that was navigated to.
38424 * @throws {Error} If no nodes exist close to provided latitude
38426 * @throws {Error} Propagates any IO errors to the caller.
38430 * viewer.moveCloseTo(0, 0).then(
38431 * (n) => { console.log(n); },
38432 * (e) => { console.error(e); });
38435 Viewer.prototype.moveCloseTo = function (lat, lon) {
38437 return when.promise(function (resolve, reject) {
38438 _this._navigator.moveCloseTo$(lat, lon).subscribe(function (node) {
38440 }, function (error) {
38446 * Navigate in a given direction.
38448 * @description This method has to be called through EdgeDirection enumeration as in the example.
38450 * @param {EdgeDirection} dir - Direction in which which to move.
38451 * @returns {Promise<Node>} Promise to the node that was navigated to.
38452 * @throws {Error} If the current node does not have the edge direction
38453 * or the edges has not yet been cached.
38454 * @throws {Error} Propagates any IO errors to the caller.
38458 * viewer.moveDir(Mapillary.EdgeDirection.Next).then(
38459 * (n) => { console.log(n); },
38460 * (e) => { console.error(e); });
38463 Viewer.prototype.moveDir = function (dir) {
38465 return when.promise(function (resolve, reject) {
38466 _this._navigator.moveDir$(dir).subscribe(function (node) {
38468 }, function (error) {
38474 * Navigate to a given photo key.
38476 * @param {string} key - A valid Mapillary photo key.
38477 * @returns {Promise<Node>} Promise to the node that was navigated to.
38478 * @throws {Error} Propagates any IO errors to the caller.
38482 * viewer.moveToKey("<my key>").then(
38483 * (n) => { console.log(n); },
38484 * (e) => { console.error(e); });
38487 Viewer.prototype.moveToKey = function (key) {
38489 return when.promise(function (resolve, reject) {
38490 _this._navigator.moveToKey$(key).subscribe(function (node) {
38492 }, function (error) {
38498 * Detect the viewer's new width and height and resize it.
38500 * @description The components will also detect the viewer's
38501 * new size and resize their rendered elements if needed.
38508 Viewer.prototype.resize = function () {
38509 this._container.renderService.resize$.next(null);
38510 this._componentController.resize();
38513 * Set a bearer token for authenticated API requests of
38514 * protected resources.
38516 * @description When the supplied token is null or undefined,
38517 * any previously set bearer token will be cleared and the
38518 * viewer will make unauthenticated requests.
38520 * Calling setAuthToken aborts all outstanding move requests.
38521 * The promises of those move requests will be rejected and
38522 * the rejections need to be caught.
38524 * @param {string} [token] token - Bearer token.
38525 * @returns {Promise<void>} Promise that resolves after token
38530 * viewer.setAuthToken("<my token>")
38531 * .then(() => { console.log("token set"); });
38534 Viewer.prototype.setAuthToken = function (token) {
38536 return when.promise(function (resolve, reject) {
38537 _this._navigator.setToken$(token)
38538 .subscribe(function () {
38539 resolve(undefined);
38540 }, function (error) {
38546 * Set the basic coordinates of the current photo to be in the
38547 * center of the viewport.
38549 * @description Basic coordinates are 2D coordinates on the [0, 1] interval
38550 * and has the origin point, (0, 0), at the top left corner and the
38551 * maximum value, (1, 1), at the bottom right corner of the original
38554 * @param {number[]} The basic coordinates of the current
38555 * photo to be at the center for the viewport.
38559 * viewer.setCenter([0.5, 0.5]);
38562 Viewer.prototype.setCenter = function (center) {
38563 this._navigator.stateService.setCenter(center);
38566 * Set the filter selecting nodes to use when calculating
38567 * the spatial edges.
38569 * @description The following filter types are supported:
38573 * `["==", key, value]` equality: `node[key] = value`
38575 * `["!=", key, value]` inequality: `node[key] ≠ value`
38577 * `["<", key, value]` less than: `node[key] < value`
38579 * `["<=", key, value]` less than or equal: `node[key] ≤ value`
38581 * `[">", key, value]` greater than: `node[key] > value`
38583 * `[">=", key, value]` greater than or equal: `node[key] ≥ value`
38587 * `["in", key, v0, ..., vn]` set inclusion: `node[key] ∈ {v0, ..., vn}`
38589 * `["!in", key, v0, ..., vn]` set exclusion: `node[key] ∉ {v0, ..., vn}`
38593 * `["all", f0, ..., fn]` logical `AND`: `f0 ∧ ... ∧ fn`
38595 * A key must be a string that identifies a node property name. A value must be
38596 * a string, number, or boolean. Strictly-typed comparisons are used. The values
38597 * `f0, ..., fn` of the combining filter must be filter expressions.
38599 * Clear the filter by setting it to null or empty array.
38601 * @param {FilterExpression} filter - The filter expression.
38602 * @returns {Promise<void>} Promise that resolves after filter is applied.
38606 * viewer.setFilter(["==", "sequenceKey", "<my sequence key>"]);
38609 Viewer.prototype.setFilter = function (filter) {
38611 return when.promise(function (resolve, reject) {
38612 _this._navigator.setFilter$(filter)
38613 .subscribe(function () {
38614 resolve(undefined);
38615 }, function (error) {
38621 * Set the viewer's render mode.
38623 * @param {RenderMode} renderMode - Render mode.
38627 * viewer.setRenderMode(Mapillary.RenderMode.Letterbox);
38630 Viewer.prototype.setRenderMode = function (renderMode) {
38631 this._container.renderService.renderMode$.next(renderMode);
38634 * Set the photo's current zoom level.
38636 * @description Possible zoom level values are on the [0, 3] interval.
38637 * Zero means zooming out to fit the photo to the view whereas three
38638 * shows the highest level of detail.
38640 * @param {number} The photo's current zoom level.
38644 * viewer.setZoom(2);
38647 Viewer.prototype.setZoom = function (zoom) {
38648 this._navigator.stateService.setZoom(zoom);
38652 * Returns an ILatLon representing geographical coordinates that correspond
38653 * to the specified pixel coordinates.
38655 * @description The pixel point may not always correspond to geographical
38656 * coordinates. In the case of no correspondence the returned value will
38659 * @param {Array<number>} pixelPoint - Pixel coordinates to unproject.
38660 * @returns {Promise<ILatLon>} Promise to the latLon corresponding to the pixel point.
38664 * viewer.unproject([100, 100])
38665 * .then((latLon) => { console.log(latLon); });
38668 Viewer.prototype.unproject = function (pixelPoint) {
38670 return when.promise(function (resolve, reject) {
38671 _this._observer.unproject$(pixelPoint)
38672 .subscribe(function (latLon) {
38674 }, function (error) {
38680 }(Utils_1.EventEmitter));
38682 * Fired when the viewing direction of the camera changes.
38684 * @type {number} bearing - Value indicating the current bearing
38685 * measured in degrees clockwise with respect to north.
38687 Viewer.bearingchanged = "bearingchanged";
38689 * Fired when a pointing device (usually a mouse) is pressed and released at
38690 * the same point in the viewer.
38692 * @type {IViewerMouseEvent} event - Viewer mouse event data.
38694 Viewer.click = "click";
38696 * Fired when the right button of the mouse is clicked within the viewer.
38698 * @type {IViewerMouseEvent} event - Viewer mouse event data.
38700 Viewer.contextmenu = "contextmenu";
38702 * Fired when a pointing device (usually a mouse) is clicked twice at
38703 * the same point in the viewer.
38705 * @type {IViewerMouseEvent} event - Viewer mouse event data.
38707 Viewer.dblclick = "dblclick";
38709 * Fired when the viewer is loading more data.
38711 * @type {boolean} loading - Value indicating whether the viewer is loading.
38713 Viewer.loadingchanged = "loadingchanged";
38715 * Fired when a pointing device (usually a mouse) is pressed within the viewer.
38717 * @type {IViewerMouseEvent} event - Viewer mouse event data.
38719 Viewer.mousedown = "mousedown";
38721 * Fired when a pointing device (usually a mouse) is moved within the viewer.
38722 * @description Will not fire when the mouse is actively used, e.g. for drag pan.
38724 * @type {IViewerMouseEvent} event - Viewer mouse event data.
38726 Viewer.mousemove = "mousemove";
38728 * Fired when a pointing device (usually a mouse) leaves the viewer's canvas.
38730 * @type {IViewerMouseEvent} event - Viewer mouse event data.
38732 Viewer.mouseout = "mouseout";
38734 * Fired when a pointing device (usually a mouse) is moved onto the viewer's canvas.
38736 * @type {IViewerMouseEvent} event - Viewer mouse event data.
38738 Viewer.mouseover = "mouseover";
38740 * Fired when a pointing device (usually a mouse) is released within the viewer.
38742 * @type {IViewerMouseEvent} event - Viewer mouse event data.
38744 Viewer.mouseup = "mouseup";
38746 * Fired when the viewer motion stops and it is in a fixed
38747 * position with a fixed point of view.
38750 Viewer.moveend = "moveend";
38752 * Fired when the motion from one view to another start,
38753 * either by changing the position (e.g. when changing node) or
38754 * when changing point of view (e.g. by interaction such as pan and zoom).
38757 Viewer.movestart = "movestart";
38759 * Fired every time the viewer navigates to a new node.
38761 * @type {Node} node - Current node.
38763 Viewer.nodechanged = "nodechanged";
38765 * Fired every time the sequence edges of the current node changes.
38767 * @type {IEdgeStatus} status - The edge status object.
38769 Viewer.sequenceedgeschanged = "sequenceedgeschanged";
38771 * Fired every time the spatial edges of the current node changes.
38773 * @type {IEdgeStatus} status - The edge status object.
38775 Viewer.spatialedgeschanged = "spatialedgeschanged";
38776 exports.Viewer = Viewer;
38778 },{"../Utils":233,"../Viewer":234,"when":221}]},{},[229])(229)
38780 //# sourceMappingURL=mapillary.js.map