diff --git a/.gitignore b/.gitignore index 25a3413..449c828 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Custom files -bundle.php +bundle/ # Logs logs diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 9e5d7e0..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# Changelog - -## [1.0.0](https://github.com/HooverHigh/videojs-player/tree/1.0.0) (2022-12-29) - -[Full Changelog](https://github.com/HooverHigh/videojs-player/compare/3018fea9d9840875ce00bf7b213ea00722c0e56d...1.0.0) - - - -\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* diff --git a/README.md b/README.md index 517beed..a9ba517 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ # videojs-player -A videojs-player themed for hooverhigh. -This theme was designed by oxmc, a student at hooverhigh. +The main core of most vjs players i use in sites such as: hoover highschool, rogers highschool. \ No newline at end of file diff --git a/bundle-config/css-dev.info b/bundle-config/css-dev.info deleted file mode 100644 index 40f57ab..0000000 --- a/bundle-config/css-dev.info +++ /dev/null @@ -1,7 +0,0 @@ -// requirecss ../css/videojs-errors.css -// requirecss ../css/videojs-ads.css -// requirecss ../css/videojs-overlay.css -// requirecss ../css/videojs-replay.css -// requirecss ../css/videojs-share.css -// requirecss ../css/videojs-vr.min.css -// requirecss ../css/videojs-watermark.css \ No newline at end of file diff --git a/bundle-config/css-prod.info b/bundle-config/css-prod.info deleted file mode 100644 index 7a00c4e..0000000 --- a/bundle-config/css-prod.info +++ /dev/null @@ -1,8 +0,0 @@ -// requirecss ../css/bundle-header.info -// requirecss ../css/videojs-errors.css -// requirecss ../css/videojs-ads.css -// requirecss ../css/videojs-overlay.css -// requirecss ../css/videojs-replay.css -// requirecss ../css/videojs-share.css -// requirecss ../css/videojs-vr.min.css -// requirecss ../css/videojs-watermark.css \ No newline at end of file diff --git a/bundle-config/js-dev.info b/bundle-config/js-dev.info deleted file mode 100644 index ab76959..0000000 --- a/bundle-config/js-dev.info +++ /dev/null @@ -1,8 +0,0 @@ -// requirejs ../js/videojs-errors.min.js -// requirejs ../js/videojs-hotkeys.min.js -// requirejs ../js/videojs-contrib-ads.min.js -// requirejs ../js/videojs-overlay.min.js -// requirejs ../js/videojs-share.min.js -// requirejs ../js/videojs-watermark.min.js -// requirejs ../js/videojs-vr.min.js -// requirejs ../js/videojs-youtube.min.js \ No newline at end of file diff --git a/bundle-config/js-prod.info b/bundle-config/js-prod.info deleted file mode 100644 index fa3027f..0000000 --- a/bundle-config/js-prod.info +++ /dev/null @@ -1,9 +0,0 @@ -// requirejs ../js/header.info -// requirejs ../js/videojs-errors.min.js -// requirejs ../js/videojs-hotkeys.min.js -// requirejs ../js/videojs-contrib-ads.min.js -// requirejs ../js/videojs-overlay.min.js -// requirejs ../js/videojs-share.min.js -// requirejs ../js/videojs-watermark.min.js -// requirejs ../js/videojs-vr.min.js -// requirejs ../js/videojs-youtube.min.js \ No newline at end of file diff --git a/bundle-config/videojs-dev.info b/bundle-config/videojs-dev.info deleted file mode 100644 index 8e4330e..0000000 --- a/bundle-config/videojs-dev.info +++ /dev/null @@ -1,2 +0,0 @@ -// requirejs ../js/videojs-bundle.min.js -// requirejs ../player-init-plugin-v2.js \ No newline at end of file diff --git a/bundle-config/videojs-prod.info b/bundle-config/videojs-prod.info deleted file mode 100644 index 8e4330e..0000000 --- a/bundle-config/videojs-prod.info +++ /dev/null @@ -1,2 +0,0 @@ -// requirejs ../js/videojs-bundle.min.js -// requirejs ../player-init-plugin-v2.js \ No newline at end of file diff --git a/bundle-dev.js b/bundle-dev.js deleted file mode 100644 index a1207ec..0000000 --- a/bundle-dev.js +++ /dev/null @@ -1,25 +0,0 @@ -const bundle = require('bundle-js-css'); - -//Bundle CSS: -bundle.css({ - entry : './bundle-config/css-dev.info', - dest : './css/videojs-bundle-dev.min.css', - print : false, - disablebeautify : false -}); - -//Bundle all viedo-js plugins: -bundle.js({ - entry : './bundle-config/js-dev.info', - dest : './js/videojs-bundle-dev.min.js', - print : false, - disablebeautify : false -}); - -//Bundle videojs and player-init into 1 script: -bundle.js({ - entry : './bundle-config/videojs-dev.info', - dest : './hooverhigh-videojs-player-dev.min.js', - print : false, - disablebeautify : false -}); \ No newline at end of file diff --git a/bundle-prod.js b/bundle-prod.js deleted file mode 100644 index b25e920..0000000 --- a/bundle-prod.js +++ /dev/null @@ -1,25 +0,0 @@ -const bundle = require('bundle-js-css'); - -//Bundle CSS: -bundle.css({ - entry : './bundle-config/css-prod.info', - dest : './css/videojs-bundle.min.css', - print : false, - disablebeautify : false -}); - -//Bundle all viedo-js plugins: -bundle.js({ - entry : './bundle-config/js-prod.info', - dest : './js/videojs-bundle.min.js', - print : false, - disablebeautify : true -}); - -//Bundle videojs and player-init into 1 script: -bundle.js({ - entry : './bundle-config/videojs-prod.info', - dest : './hooverhigh-videojs-player.min.js', - print : false, - disablebeautify : true -}); \ No newline at end of file diff --git a/bundle.js b/bundle.js new file mode 100644 index 0000000..5d26bd7 --- /dev/null +++ b/bundle.js @@ -0,0 +1,78 @@ +const minify = require('@node-minify/core'); +const csso = require('@node-minify/csso'); +const terser = require('@node-minify/terser'); +const path = require('path'); +const fs = require('fs'); + +// Specify the order JS and CSS files in arrays +const jsFiles = [ + 'node_modules/video.js/dist/video.min.js', + 'node_modules/videojs-errors/dist/videojs-errors.min.js', + 'node_modules/videojs-hotkeys/videojs.hotkeys.min.js', + 'node_modules/videojs-contrib-ads/dist/videojs-contrib-ads.min.js', + 'node_modules/@viostream/videojs-overlay/dist/videojs-overlay.min.js', + 'src/module/share/share.js', + 'src/module/watermark/watermark.js', + 'node_modules/videojs-vr/dist/videojs-vr.min.js', + 'node_modules/videojs-youtube/dist/Youtube.min.js', + 'src/module/ads/ad.js', + 'src/player.js' +]; + +const cssFiles = [ + 'node_modules/video.js/dist/video-js.min.css', + 'node_modules/videojs-errors/dist/videojs-errors.css', + 'node_modules/videojs-contrib-ads/dist/videojs-contrib-ads.css', + 'node_modules/@viostream/videojs-overlay/dist/videojs-overlay.css', + 'src/module/share/share.css', + 'src/module/watermark/watermark.css', + 'node_modules/videojs-vr/dist/videojs-vr.css' +]; + +// Function to concatenate files and minify the combined file +const concatenateAndMinify = (files, minifier, outputFile) => { + const fileType = path.extname(files[0]).slice(1); // Get the file type dynamically (js or css) + const combinedFilePath = path.join(__dirname, 'bundle', `combined.${fileType}`); + + // Concatenate content of each file and write to combined file + let combinedContent = ''; + files.forEach(file => { + const content = fs.readFileSync(path.join(__dirname, file), 'utf-8'); + combinedContent += content + '\n'; // Add file content with newline + }); + + // Write the concatenated content to the combined file + fs.writeFileSync(combinedFilePath, combinedContent, 'utf-8'); + console.log(`Combined ${fileType} file created: ${combinedFilePath}`); + + // Now minify the combined file + minify({ + compressor: minifier, + input: combinedFilePath, + output: path.join(__dirname, 'bundle', outputFile), + callback: (err, min) => { + if (err) { + console.error(`Error minifying ${outputFile}:`, err); + } else { + console.log(`${outputFile} minified successfully!`); + // Optionally delete the combined file after minification + fs.unlinkSync(combinedFilePath); + } + } + }); +}; + +// Ensure the bundle directory exists +const bundleDir = path.join(__dirname, 'bundle'); +if (!fs.existsSync(bundleDir)) { + fs.mkdirSync(bundleDir); +} + +// Bundle file anme base +var bundleFileName = 'vjs-player-bundle'; + +// Concatenate and minify JS files into one file +concatenateAndMinify(jsFiles, terser, `${bundleFileName}.min.js`); + +// Concatenate and minify CSS files into one file +concatenateAndMinify(cssFiles, csso, `${bundleFileName}.min.css`); \ No newline at end of file diff --git a/bundle.sh b/bundle.sh deleted file mode 100644 index 622d3b7..0000000 --- a/bundle.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -echo "Loading nodejs" -#Enable NVM/NODEJS/NPM -export NVM_DIR=/usr/local/nvm -source /opt/nvm/nvm.sh -cd /hosting/sites/hooverhigh/videojs-plugins -echo "In directory: $(pwd)" -#Start server -node bundle-$1.js diff --git a/css/bundle-header.info b/css/bundle-header.info deleted file mode 100644 index 0393393..0000000 --- a/css/bundle-header.info +++ /dev/null @@ -1,5 +0,0 @@ -/** - * This css file includes a bundled version of videojs css and videojs plugins css designed for hooverhigh - * HooverHighVideoPlayer 2 - * Copyright oxmc. - */ \ No newline at end of file diff --git a/css/videojs-ads.css b/css/videojs-ads.css deleted file mode 100644 index 34675bf..0000000 --- a/css/videojs-ads.css +++ /dev/null @@ -1 +0,0 @@ -.vjs-ad-playing.vjs-ad-playing .vjs-progress-control{pointer-events:none}.vjs-ad-playing.vjs-ad-playing .vjs-play-progress{background-color:#ffe400}.vjs-ad-loading .vjs-loading-spinner{display:block;visibility:visible}.vjs-ad-playing .vjs-captions-button{display:none}.vjs-ad-playing .vjs-audio-button{display:none}.vjs-ad-loading .vjs-loading-spinner:before,.vjs-ad-loading .vjs-loading-spinner:after{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-ad-loading .vjs-loading-spinner:before{border-top-color:#fff}.vjs-ad-loading .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:0.44s;animation-delay:0.44s}.vjs-ad-loading .vjs-big-play-button,.vjs-ad-loading .vjs-poster,.vjs-ad-content-resuming .vjs-big-play-button,.vjs-ad-content-resuming .vjs-poster{display:none} \ No newline at end of file diff --git a/css/videojs-bundle-dev.min.css b/css/videojs-bundle-dev.min.css deleted file mode 100644 index 042b8b0..0000000 --- a/css/videojs-bundle-dev.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ -.vjs-error-display{color:#fff;display:none;font-family:Helvetica,Arial,sans serif;font-size:16px;line-height:1.428}.vjs-error .vjs-error-display{display:block;position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5)}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:14px}.vjs-errors-dialog{text-align:left;border:1px #999 solid;overflow:hidden;position:absolute;top:2%;bottom:2%;left:5%;right:5%;padding-left:1%;padding-right:1%;background:rgba(24,24,24,.8)}.vjs-errors-details{margin-top:15px}.vjs-errors-message{border:1px #999 solid;background-color:#2c2c2c;overflow:auto;margin-top:15px;padding:15px}.vjs-errors-ok-button-container{display:block;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-ok-button,.vjs-errors-timeout-button-container button{display:block;height:36px;background-color:#000;border:1px #999 solid;border-radius:5px;color:#999;font-size:14px;cursor:pointer}.vjs-errors-ok-button{margin:0 auto;width:80px}.vjs-errors-ok-button:hover,.vjs-errors-timeout-button-container button:hover{border:1px #fff solid;color:#ccc}.vjs-errors-timeout-button-container{display:flex;flex-direction:row;justify-content:center;gap:10px;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-timeout-button-container button{width:120px}.vjs-errors-content-container{overflow:auto;position:absolute;padding-bottom:15px;top:0;left:15px;right:15px;bottom:61px}.vjs-errors-headline{font-size:14px;font-weight:700;padding-right:3em}.vjs-errors-dialog .vjs-control.vjs-close-button{width:3em;height:3em;top:0}.vjs-errors-flashmessage{float:right;font-size:9px;font-style:italic}.vjs-xs.vjs-error-display{font-size:14px;background-color:#000}.vjs-xs.vjs-error-display .vjs-errors-details,.vjs-xs.vjs-error-display .vjs-errors-message{display:none}.vjs-xs .vjs-errors-content-container{top:0}.vjs-xs .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-xs .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}.vjs-xs.vjs-errors-flashmessage{display:none}@media (max-width:600px),(max-height:250px){.vjs-error-display{font-size:14px;background-color:#000}.vjs-error-display .vjs-errors-details,.vjs-error-display .vjs-errors-message,.vjs-errors-flashmessage{display:none}.vjs-error-display .vjs-errors-content-container{top:15px}.vjs-error-display .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-error-display .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}}.vjs-ad-playing.vjs-ad-playing .vjs-progress-control{pointer-events:none}.vjs-ad-playing.vjs-ad-playing .vjs-play-progress{background-color:#ffe400}.vjs-ad-loading .vjs-loading-spinner{display:block;visibility:visible}.vjs-ad-content-resuming .vjs-big-play-button,.vjs-ad-content-resuming .vjs-poster,.vjs-ad-loading .vjs-big-play-button,.vjs-ad-loading .vjs-poster,.vjs-ad-playing .vjs-audio-button,.vjs-ad-playing .vjs-captions-button{display:none}.vjs-ad-loading .vjs-loading-spinner:after,.vjs-ad-loading .vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-ad-loading .vjs-loading-spinner:before{border-top-color:#fff}.vjs-ad-loading .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}.video-js .vjs-overlay{color:#fff;position:absolute;text-align:center}.video-js .vjs-overlay-no-background{max-width:33%}.video-js .vjs-overlay-background{background-color:#646464;background-color:rgba(255,255,255,.4);border-radius:3px;padding:10px;width:33%}.video-js .vjs-overlay-top-left{top:5px;left:5px}.video-js .vjs-overlay-top{left:50%;margin-left:-16.5%;top:5px}.video-js .vjs-overlay-top-right{right:5px;top:5px}.video-js .vjs-overlay-right{right:5px;top:50%;transform:translateY(-50%)}.video-js .vjs-overlay-bottom-right{bottom:3.5em;right:5px}.video-js .vjs-overlay-bottom{bottom:3.5em;left:50%;margin-left:-16.5%}.video-js .vjs-overlay-bottom-left{bottom:3.5em;left:5px}.video-js .vjs-overlay-center,.video-js .vjs-overlay-left{left:5px;top:50%;transform:translateY(-50%)}.video-js .vjs-overlay-center{left:50%;margin-left:-16.5%}.video-js .vjs-no-flex .vjs-overlay-center,.video-js .vjs-no-flex .vjs-overlay-left,.video-js .vjs-no-flex .vjs-overlay-right{margin-top:-15px}.video-js.vjs-replay .vjs-play-control:before{content:""}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-modal-dialog-content{display:flex;align-items:center;padding:0;background-image:linear-gradient(to bottom,rgba(0,0,0,.77),rgba(0,0,0,.75))}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{position:absolute;right:0;top:5px;width:30px;height:30px;color:#fff;cursor:pointer;opacity:.9;transition:opacity .25s ease-out}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:before{content:"×";font-size:20px;line-height:15px}.video-js .vjs-share__btn:hover span,.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:hover{opacity:1}.video-js .vjs-share{display:flex;flex-direction:column;justify-content:space-around;align-items:center;width:100%;height:100%;max-height:400px}.video-js .vjs-share__bottom,.video-js .vjs-share__middle,.video-js .vjs-share__top{display:flex}.video-js .vjs-share__middle,.video-js .vjs-share__top{flex-direction:column;justify-content:space-between}.video-js .vjs-share__middle{padding:0 25px}.video-js .vjs-share__title{align-self:center;font-size:22px;color:#fff}.video-js .vjs-share__subtitle{width:100%;margin:0 auto 12px;font-size:16px;color:#fff;opacity:.7}.video-js .vjs-share__short-link,.video-js .vjs-share__short-link-wrapper{display:block;width:100%;border:0;color:rgba(255,255,255,.65);background-color:#363636;outline:0}.video-js .vjs-share__short-link-wrapper{position:relative;height:40px;margin:0 auto 15px;overflow:hidden;flex-shrink:0}.video-js .vjs-share__short-link{height:100%;padding:0 40px 0 15px}.video-js .vjs-share__btn{position:absolute;right:0;bottom:0;height:40px;width:40px;display:flex;align-items:center;padding:0 11px;border:0;color:#fff;background-color:#2e2e2e;background-size:18px 19px;background-position:center;background-repeat:no-repeat;cursor:pointer;outline:0;transition:width .3s ease-out,padding .3s ease-out}.video-js .vjs-share__btn svg{flex-shrink:0}.video-js .vjs-share__btn span{position:relative;padding-left:10px;opacity:0;transition:opacity .3s ease-out}.video-js .vjs-share__btn:hover{justify-content:center;width:100%;padding:0 40px;background-image:none}.video-js .vjs-share__socials{display:flex;flex-wrap:wrap;justify-content:center;align-content:flex-start;transition:width .3s ease-out,height .3s ease-out}.video-js .vjs-share__social{display:flex;justify-content:center;align-items:center;flex-shrink:0;width:32px;height:32px;margin-right:6px;margin-bottom:6px;cursor:pointer;font-size:8px;transition:transform .3s ease-out,filter .2s ease-out;border:0;outline:0}.video-js .vjs-share__social:hover{filter:brightness(115%)}.video-js .vjs-share__social svg{overflow:visible;max-height:24px}.video-js .vjs-share__social_vk{background-color:#5d7294}.video-js .vjs-share__social_ok{background-color:#ed7c20}.video-js .vjs-share__social_email,.video-js .vjs-share__social_mail{background-color:#134785}.video-js .vjs-share__social_tw{background-color:#76aaeb}.video-js .vjs-share__social_reddit{background-color:#ff4500}.video-js .vjs-share__social_fbFeed{background-color:#475995}.video-js .vjs-share__social_messenger{background-color:#0084ff}.video-js .vjs-share__social_gp{background-color:#d53f35}.video-js .vjs-share__social_linkedin{background-color:#0077b5}.video-js .vjs-share__social_viber{background-color:#766db5}.video-js .vjs-share__social_telegram{background-color:#4bb0e2}.video-js .vjs-share__social_whatsapp{background-color:#78c870}.video-js .vjs-share__bottom{justify-content:center}@media (max-height:220px){.video-js .vjs-share .hidden-xs{display:none}}@media (max-height:350px){.video-js .vjs-share .hidden-sm{display:none}}@media (min-height:400px){.video-js .vjs-share__title{margin-bottom:15px}.video-js .vjs-share__short-link-wrapper{margin-bottom:30px}}@media (min-width:320px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:5px;top:10px}}@media (min-width:660px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:20px;top:20px}.video-js .vjs-share__social{width:40px;height:40px}}.video-js .vjs-big-vr-play-button{width:100px;height:100px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='360' height='360' viewBox='0 0 360 360'%3E%3Cpath fill='%23FFF' d='M334.883 275.78l-6.374-36.198-6.375-36.2-28.16 23.62-28.164 23.62 25.837 9.41C266.247 296.544 224 320.5 176.25 320.5c-77.47 0-140.5-63.03-140.5-140.5 0-77.472 63.03-140.5 140.5-140.5 53.428 0 99.98 29.978 123.733 73.993l13.304-6.923C287.025 57.76 235.45 24.5 176.25 24.5c-85.743 0-155.5 69.757-155.5 155.5 0 85.742 69.757 155.5 155.5 155.5 54.253 0 102.09-27.94 129.922-70.177l28.71 10.457z'/%3E%3Cpath fill='%23FFF' d='M314.492 175.167c-12.98 0-23.54-10.56-23.54-23.54s10.56-23.54 23.54-23.54c12.98 0 23.54 10.56 23.54 23.54s-10.56 23.54-23.54 23.54zm0-38.08c-8.018 0-14.54 6.522-14.54 14.54s6.522 14.54 14.54 14.54c8.017 0 14.54-6.522 14.54-14.54s-6.523-14.54-14.54-14.54z'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M88.76 173.102h9.395c4.74-.042 8.495-1.27 11.268-3.682 2.77-2.412 4.157-5.903 4.157-10.474 0-4.4-1.153-7.817-3.46-10.25-2.307-2.434-5.83-3.65-10.568-3.65-4.147 0-7.554 1.195-10.22 3.585-2.666 2.392-4 5.514-4 9.364H69.908c0-4.74 1.26-9.055 3.776-12.95 2.518-3.892 6.03-6.928 10.537-9.108 4.508-2.18 9.554-3.27 15.14-3.27 9.225 0 16.472 2.318 21.74 6.952 5.27 4.634 7.903 11.077 7.903 19.33 0 4.147-1.323 8.05-3.967 11.71-2.646 3.66-6.062 6.422-10.252 8.284 5.078 1.736 8.94 4.465 11.584 8.19s3.968 8.166 3.968 13.33c0 8.294-2.847 14.895-8.538 19.804s-13.17 7.363-22.438 7.363c-8.887 0-16.166-2.37-21.836-7.11-5.67-4.74-8.506-11.045-8.506-18.916h15.425c0 4.062 1.365 7.363 4.094 9.902 2.73 2.54 6.4 3.81 11.014 3.81 4.782 0 8.55-1.27 11.3-3.81s4.126-6.22 4.126-11.045c0-4.865-1.44-8.61-4.316-11.235-2.878-2.623-7.152-3.936-12.822-3.936H88.76V173.1zM187.598 133.493v12.76h-1.904c-8.633.126-15.53 2.497-20.693 7.108-5.162 4.614-8.23 11.152-9.203 19.615 4.95-5.205 11.277-7.808 18.98-7.808 8.166 0 14.608 2.878 19.328 8.633 4.718 5.755 7.077 13.182 7.077 22.28 0 9.395-2.76 17.002-8.284 22.82-5.52 5.818-12.77 8.73-21.74 8.73-9.226 0-16.705-3.407-22.44-10.222-5.733-6.812-8.6-15.742-8.6-26.787v-5.267c0-16.208 3.945-28.903 11.84-38.086 7.89-9.182 19.242-13.774 34.054-13.774h1.586zM171.03 177.61c-3.386 0-6.485.95-9.3 2.855-2.814 1.904-4.877 4.443-6.188 7.617v4.697c0 6.854 1.438 12.304 4.316 16.345 2.877 4.04 6.602 6.062 11.172 6.062s8.188-1.715 10.854-5.143 4-7.934 4-13.52-1.355-10.135-4.063-13.648c-2.708-3.51-6.304-5.267-10.79-5.267zM271.136 187.447c0 13.29-2.486 23.307-7.46 30.057s-12.535 10.125-22.69 10.125c-9.988 0-17.51-3.292-22.566-9.872-5.058-6.58-7.65-16.323-7.776-29.23V172.53c0-13.287 2.485-23.252 7.458-29.896 4.973-6.643 12.558-9.966 22.757-9.966 10.112 0 17.655 3.237 22.63 9.712 4.97 6.475 7.52 16.166 7.647 29.072v15.995zm-15.425-17.265c0-8.674-1.185-15.033-3.554-19.075-2.37-4.04-6.137-6.062-11.3-6.062-5.035 0-8.738 1.915-11.107 5.745-2.37 3.83-3.62 9.807-3.746 17.932v20.948c0 8.633 1.206 15.064 3.618 19.297s6.2 6.348 11.362 6.348c4.95 0 8.61-1.957 10.98-5.87 2.37-3.915 3.62-10.04 3.746-18.378v-20.885z'/%3E%3C/g%3E%3C/svg%3E");background-size:contain;background-color:rgba(0,0,0,.5)}.video-js .vjs-big-vr-play-button .vjs-icon-placeholder{display:none}:hover.video-js .vjs-big-vr-play-button{-webkit-transition:border-color .4s,outline .4s,background-color .4s;-moz-transition:border-color .4s,outline .4s,background-color .4s;-ms-transition:border-color .4s,outline .4s,background-color .4s;-o-transition:border-color .4s,outline .4s,background-color .4s;transition:border-color .4s,outline .4s,background-color .4s}.video-js .vjs-big-vr-play-button::before{content:""}.video-js canvas{cursor:move}.video-js .vjs-button-vr .vjs-icon-placeholder{height:30px;width:30px;display:inline-block;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iI0ZGRkZGRiI+CiAgICA8cGF0aCBkPSJNMjAuNzQgNkgzLjIxQzIuNTUgNiAyIDYuNTcgMiA3LjI4djEwLjQ0YzAgLjcuNTUgMS4yOCAxLjIzIDEuMjhoNC43OWMuNTIgMCAuOTYtLjMzIDEuMTQtLjc5bDEuNC0zLjQ4Yy4yMy0uNTkuNzktMS4wMSAxLjQ0LTEuMDFzMS4yMS40MiAxLjQ1IDEuMDFsMS4zOSAzLjQ4Yy4xOS40Ni42My43OSAxLjExLjc5aDQuNzljLjcxIDAgMS4yNi0uNTcgMS4yNi0xLjI4VjcuMjhjMC0uNy0uNTUtMS4yOC0xLjI2LTEuMjh6TTcuNSAxNC42MmMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTMgMS4xOCAwIDIuMTIuOTYgMi4xMiAyLjEzcy0uOTUgMi4xMi0yLjEyIDIuMTJ6bTkgMGMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTNzMi4xMi45NiAyLjEyIDIuMTMtLjk1IDIuMTItMi4xMiAyLjEyeiIvPgogICAgPHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+Cjwvc3ZnPgo=)no-repeat left center}.video-js.vjs-watermark{display:block}.video-js .vjs-watermark-content{opacity:.99;position:absolute;padding:5px;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-ms-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js .vjs-watermark-top-right{right:0;top:0}.video-js .vjs-watermark-top-left{left:0;top:0}.video-js .vjs-watermark-bottom-right{right:0;bottom:30px}.video-js .vjs-watermark-bottom-left{left:0;bottom:30px}.video-js.vjs-user-inactive.vjs-playing .vjs-watermark-fade{opacity:0} \ No newline at end of file diff --git a/css/videojs-bundle.min.css b/css/videojs-bundle.min.css deleted file mode 100644 index 042b8b0..0000000 --- a/css/videojs-bundle.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ -.vjs-error-display{color:#fff;display:none;font-family:Helvetica,Arial,sans serif;font-size:16px;line-height:1.428}.vjs-error .vjs-error-display{display:block;position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5)}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:14px}.vjs-errors-dialog{text-align:left;border:1px #999 solid;overflow:hidden;position:absolute;top:2%;bottom:2%;left:5%;right:5%;padding-left:1%;padding-right:1%;background:rgba(24,24,24,.8)}.vjs-errors-details{margin-top:15px}.vjs-errors-message{border:1px #999 solid;background-color:#2c2c2c;overflow:auto;margin-top:15px;padding:15px}.vjs-errors-ok-button-container{display:block;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-ok-button,.vjs-errors-timeout-button-container button{display:block;height:36px;background-color:#000;border:1px #999 solid;border-radius:5px;color:#999;font-size:14px;cursor:pointer}.vjs-errors-ok-button{margin:0 auto;width:80px}.vjs-errors-ok-button:hover,.vjs-errors-timeout-button-container button:hover{border:1px #fff solid;color:#ccc}.vjs-errors-timeout-button-container{display:flex;flex-direction:row;justify-content:center;gap:10px;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-timeout-button-container button{width:120px}.vjs-errors-content-container{overflow:auto;position:absolute;padding-bottom:15px;top:0;left:15px;right:15px;bottom:61px}.vjs-errors-headline{font-size:14px;font-weight:700;padding-right:3em}.vjs-errors-dialog .vjs-control.vjs-close-button{width:3em;height:3em;top:0}.vjs-errors-flashmessage{float:right;font-size:9px;font-style:italic}.vjs-xs.vjs-error-display{font-size:14px;background-color:#000}.vjs-xs.vjs-error-display .vjs-errors-details,.vjs-xs.vjs-error-display .vjs-errors-message{display:none}.vjs-xs .vjs-errors-content-container{top:0}.vjs-xs .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-xs .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}.vjs-xs.vjs-errors-flashmessage{display:none}@media (max-width:600px),(max-height:250px){.vjs-error-display{font-size:14px;background-color:#000}.vjs-error-display .vjs-errors-details,.vjs-error-display .vjs-errors-message,.vjs-errors-flashmessage{display:none}.vjs-error-display .vjs-errors-content-container{top:15px}.vjs-error-display .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-error-display .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}}.vjs-ad-playing.vjs-ad-playing .vjs-progress-control{pointer-events:none}.vjs-ad-playing.vjs-ad-playing .vjs-play-progress{background-color:#ffe400}.vjs-ad-loading .vjs-loading-spinner{display:block;visibility:visible}.vjs-ad-content-resuming .vjs-big-play-button,.vjs-ad-content-resuming .vjs-poster,.vjs-ad-loading .vjs-big-play-button,.vjs-ad-loading .vjs-poster,.vjs-ad-playing .vjs-audio-button,.vjs-ad-playing .vjs-captions-button{display:none}.vjs-ad-loading .vjs-loading-spinner:after,.vjs-ad-loading .vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-ad-loading .vjs-loading-spinner:before{border-top-color:#fff}.vjs-ad-loading .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}.video-js .vjs-overlay{color:#fff;position:absolute;text-align:center}.video-js .vjs-overlay-no-background{max-width:33%}.video-js .vjs-overlay-background{background-color:#646464;background-color:rgba(255,255,255,.4);border-radius:3px;padding:10px;width:33%}.video-js .vjs-overlay-top-left{top:5px;left:5px}.video-js .vjs-overlay-top{left:50%;margin-left:-16.5%;top:5px}.video-js .vjs-overlay-top-right{right:5px;top:5px}.video-js .vjs-overlay-right{right:5px;top:50%;transform:translateY(-50%)}.video-js .vjs-overlay-bottom-right{bottom:3.5em;right:5px}.video-js .vjs-overlay-bottom{bottom:3.5em;left:50%;margin-left:-16.5%}.video-js .vjs-overlay-bottom-left{bottom:3.5em;left:5px}.video-js .vjs-overlay-center,.video-js .vjs-overlay-left{left:5px;top:50%;transform:translateY(-50%)}.video-js .vjs-overlay-center{left:50%;margin-left:-16.5%}.video-js .vjs-no-flex .vjs-overlay-center,.video-js .vjs-no-flex .vjs-overlay-left,.video-js .vjs-no-flex .vjs-overlay-right{margin-top:-15px}.video-js.vjs-replay .vjs-play-control:before{content:""}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-modal-dialog-content{display:flex;align-items:center;padding:0;background-image:linear-gradient(to bottom,rgba(0,0,0,.77),rgba(0,0,0,.75))}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{position:absolute;right:0;top:5px;width:30px;height:30px;color:#fff;cursor:pointer;opacity:.9;transition:opacity .25s ease-out}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:before{content:"×";font-size:20px;line-height:15px}.video-js .vjs-share__btn:hover span,.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:hover{opacity:1}.video-js .vjs-share{display:flex;flex-direction:column;justify-content:space-around;align-items:center;width:100%;height:100%;max-height:400px}.video-js .vjs-share__bottom,.video-js .vjs-share__middle,.video-js .vjs-share__top{display:flex}.video-js .vjs-share__middle,.video-js .vjs-share__top{flex-direction:column;justify-content:space-between}.video-js .vjs-share__middle{padding:0 25px}.video-js .vjs-share__title{align-self:center;font-size:22px;color:#fff}.video-js .vjs-share__subtitle{width:100%;margin:0 auto 12px;font-size:16px;color:#fff;opacity:.7}.video-js .vjs-share__short-link,.video-js .vjs-share__short-link-wrapper{display:block;width:100%;border:0;color:rgba(255,255,255,.65);background-color:#363636;outline:0}.video-js .vjs-share__short-link-wrapper{position:relative;height:40px;margin:0 auto 15px;overflow:hidden;flex-shrink:0}.video-js .vjs-share__short-link{height:100%;padding:0 40px 0 15px}.video-js .vjs-share__btn{position:absolute;right:0;bottom:0;height:40px;width:40px;display:flex;align-items:center;padding:0 11px;border:0;color:#fff;background-color:#2e2e2e;background-size:18px 19px;background-position:center;background-repeat:no-repeat;cursor:pointer;outline:0;transition:width .3s ease-out,padding .3s ease-out}.video-js .vjs-share__btn svg{flex-shrink:0}.video-js .vjs-share__btn span{position:relative;padding-left:10px;opacity:0;transition:opacity .3s ease-out}.video-js .vjs-share__btn:hover{justify-content:center;width:100%;padding:0 40px;background-image:none}.video-js .vjs-share__socials{display:flex;flex-wrap:wrap;justify-content:center;align-content:flex-start;transition:width .3s ease-out,height .3s ease-out}.video-js .vjs-share__social{display:flex;justify-content:center;align-items:center;flex-shrink:0;width:32px;height:32px;margin-right:6px;margin-bottom:6px;cursor:pointer;font-size:8px;transition:transform .3s ease-out,filter .2s ease-out;border:0;outline:0}.video-js .vjs-share__social:hover{filter:brightness(115%)}.video-js .vjs-share__social svg{overflow:visible;max-height:24px}.video-js .vjs-share__social_vk{background-color:#5d7294}.video-js .vjs-share__social_ok{background-color:#ed7c20}.video-js .vjs-share__social_email,.video-js .vjs-share__social_mail{background-color:#134785}.video-js .vjs-share__social_tw{background-color:#76aaeb}.video-js .vjs-share__social_reddit{background-color:#ff4500}.video-js .vjs-share__social_fbFeed{background-color:#475995}.video-js .vjs-share__social_messenger{background-color:#0084ff}.video-js .vjs-share__social_gp{background-color:#d53f35}.video-js .vjs-share__social_linkedin{background-color:#0077b5}.video-js .vjs-share__social_viber{background-color:#766db5}.video-js .vjs-share__social_telegram{background-color:#4bb0e2}.video-js .vjs-share__social_whatsapp{background-color:#78c870}.video-js .vjs-share__bottom{justify-content:center}@media (max-height:220px){.video-js .vjs-share .hidden-xs{display:none}}@media (max-height:350px){.video-js .vjs-share .hidden-sm{display:none}}@media (min-height:400px){.video-js .vjs-share__title{margin-bottom:15px}.video-js .vjs-share__short-link-wrapper{margin-bottom:30px}}@media (min-width:320px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:5px;top:10px}}@media (min-width:660px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:20px;top:20px}.video-js .vjs-share__social{width:40px;height:40px}}.video-js .vjs-big-vr-play-button{width:100px;height:100px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='360' height='360' viewBox='0 0 360 360'%3E%3Cpath fill='%23FFF' d='M334.883 275.78l-6.374-36.198-6.375-36.2-28.16 23.62-28.164 23.62 25.837 9.41C266.247 296.544 224 320.5 176.25 320.5c-77.47 0-140.5-63.03-140.5-140.5 0-77.472 63.03-140.5 140.5-140.5 53.428 0 99.98 29.978 123.733 73.993l13.304-6.923C287.025 57.76 235.45 24.5 176.25 24.5c-85.743 0-155.5 69.757-155.5 155.5 0 85.742 69.757 155.5 155.5 155.5 54.253 0 102.09-27.94 129.922-70.177l28.71 10.457z'/%3E%3Cpath fill='%23FFF' d='M314.492 175.167c-12.98 0-23.54-10.56-23.54-23.54s10.56-23.54 23.54-23.54c12.98 0 23.54 10.56 23.54 23.54s-10.56 23.54-23.54 23.54zm0-38.08c-8.018 0-14.54 6.522-14.54 14.54s6.522 14.54 14.54 14.54c8.017 0 14.54-6.522 14.54-14.54s-6.523-14.54-14.54-14.54z'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M88.76 173.102h9.395c4.74-.042 8.495-1.27 11.268-3.682 2.77-2.412 4.157-5.903 4.157-10.474 0-4.4-1.153-7.817-3.46-10.25-2.307-2.434-5.83-3.65-10.568-3.65-4.147 0-7.554 1.195-10.22 3.585-2.666 2.392-4 5.514-4 9.364H69.908c0-4.74 1.26-9.055 3.776-12.95 2.518-3.892 6.03-6.928 10.537-9.108 4.508-2.18 9.554-3.27 15.14-3.27 9.225 0 16.472 2.318 21.74 6.952 5.27 4.634 7.903 11.077 7.903 19.33 0 4.147-1.323 8.05-3.967 11.71-2.646 3.66-6.062 6.422-10.252 8.284 5.078 1.736 8.94 4.465 11.584 8.19s3.968 8.166 3.968 13.33c0 8.294-2.847 14.895-8.538 19.804s-13.17 7.363-22.438 7.363c-8.887 0-16.166-2.37-21.836-7.11-5.67-4.74-8.506-11.045-8.506-18.916h15.425c0 4.062 1.365 7.363 4.094 9.902 2.73 2.54 6.4 3.81 11.014 3.81 4.782 0 8.55-1.27 11.3-3.81s4.126-6.22 4.126-11.045c0-4.865-1.44-8.61-4.316-11.235-2.878-2.623-7.152-3.936-12.822-3.936H88.76V173.1zM187.598 133.493v12.76h-1.904c-8.633.126-15.53 2.497-20.693 7.108-5.162 4.614-8.23 11.152-9.203 19.615 4.95-5.205 11.277-7.808 18.98-7.808 8.166 0 14.608 2.878 19.328 8.633 4.718 5.755 7.077 13.182 7.077 22.28 0 9.395-2.76 17.002-8.284 22.82-5.52 5.818-12.77 8.73-21.74 8.73-9.226 0-16.705-3.407-22.44-10.222-5.733-6.812-8.6-15.742-8.6-26.787v-5.267c0-16.208 3.945-28.903 11.84-38.086 7.89-9.182 19.242-13.774 34.054-13.774h1.586zM171.03 177.61c-3.386 0-6.485.95-9.3 2.855-2.814 1.904-4.877 4.443-6.188 7.617v4.697c0 6.854 1.438 12.304 4.316 16.345 2.877 4.04 6.602 6.062 11.172 6.062s8.188-1.715 10.854-5.143 4-7.934 4-13.52-1.355-10.135-4.063-13.648c-2.708-3.51-6.304-5.267-10.79-5.267zM271.136 187.447c0 13.29-2.486 23.307-7.46 30.057s-12.535 10.125-22.69 10.125c-9.988 0-17.51-3.292-22.566-9.872-5.058-6.58-7.65-16.323-7.776-29.23V172.53c0-13.287 2.485-23.252 7.458-29.896 4.973-6.643 12.558-9.966 22.757-9.966 10.112 0 17.655 3.237 22.63 9.712 4.97 6.475 7.52 16.166 7.647 29.072v15.995zm-15.425-17.265c0-8.674-1.185-15.033-3.554-19.075-2.37-4.04-6.137-6.062-11.3-6.062-5.035 0-8.738 1.915-11.107 5.745-2.37 3.83-3.62 9.807-3.746 17.932v20.948c0 8.633 1.206 15.064 3.618 19.297s6.2 6.348 11.362 6.348c4.95 0 8.61-1.957 10.98-5.87 2.37-3.915 3.62-10.04 3.746-18.378v-20.885z'/%3E%3C/g%3E%3C/svg%3E");background-size:contain;background-color:rgba(0,0,0,.5)}.video-js .vjs-big-vr-play-button .vjs-icon-placeholder{display:none}:hover.video-js .vjs-big-vr-play-button{-webkit-transition:border-color .4s,outline .4s,background-color .4s;-moz-transition:border-color .4s,outline .4s,background-color .4s;-ms-transition:border-color .4s,outline .4s,background-color .4s;-o-transition:border-color .4s,outline .4s,background-color .4s;transition:border-color .4s,outline .4s,background-color .4s}.video-js .vjs-big-vr-play-button::before{content:""}.video-js canvas{cursor:move}.video-js .vjs-button-vr .vjs-icon-placeholder{height:30px;width:30px;display:inline-block;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iI0ZGRkZGRiI+CiAgICA8cGF0aCBkPSJNMjAuNzQgNkgzLjIxQzIuNTUgNiAyIDYuNTcgMiA3LjI4djEwLjQ0YzAgLjcuNTUgMS4yOCAxLjIzIDEuMjhoNC43OWMuNTIgMCAuOTYtLjMzIDEuMTQtLjc5bDEuNC0zLjQ4Yy4yMy0uNTkuNzktMS4wMSAxLjQ0LTEuMDFzMS4yMS40MiAxLjQ1IDEuMDFsMS4zOSAzLjQ4Yy4xOS40Ni42My43OSAxLjExLjc5aDQuNzljLjcxIDAgMS4yNi0uNTcgMS4yNi0xLjI4VjcuMjhjMC0uNy0uNTUtMS4yOC0xLjI2LTEuMjh6TTcuNSAxNC42MmMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTMgMS4xOCAwIDIuMTIuOTYgMi4xMiAyLjEzcy0uOTUgMi4xMi0yLjEyIDIuMTJ6bTkgMGMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTNzMi4xMi45NiAyLjEyIDIuMTMtLjk1IDIuMTItMi4xMiAyLjEyeiIvPgogICAgPHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+Cjwvc3ZnPgo=)no-repeat left center}.video-js.vjs-watermark{display:block}.video-js .vjs-watermark-content{opacity:.99;position:absolute;padding:5px;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-ms-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js .vjs-watermark-top-right{right:0;top:0}.video-js .vjs-watermark-top-left{left:0;top:0}.video-js .vjs-watermark-bottom-right{right:0;bottom:30px}.video-js .vjs-watermark-bottom-left{left:0;bottom:30px}.video-js.vjs-user-inactive.vjs-playing .vjs-watermark-fade{opacity:0} \ No newline at end of file diff --git a/css/videojs-errors.css b/css/videojs-errors.css deleted file mode 100644 index d8f5592..0000000 --- a/css/videojs-errors.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ -.vjs-error-display{color:#fff;display:none;font-family:Helvetica,Arial,sans serif;font-size:16px;line-height:1.428}.vjs-error .vjs-error-display{display:block;position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5)}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:14px}.vjs-errors-dialog{text-align:left;border:1px #999 solid;overflow:hidden;position:absolute;top:2%;bottom:2%;left:5%;right:5%;padding-left:1%;padding-right:1%;background:rgba(24,24,24,.8)}.vjs-errors-details{margin-top:15px}.vjs-errors-message{border:1px #999 solid;background-color:#2c2c2c;overflow:auto;margin-top:15px;padding:15px}.vjs-errors-ok-button-container{display:block;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-ok-button,.vjs-errors-timeout-button-container button{display:block;height:36px;background-color:#000;border:1px #999 solid;border-radius:5px;color:#999;font-size:14px;cursor:pointer}.vjs-errors-ok-button{margin:0 auto;width:80px}.vjs-errors-ok-button:hover,.vjs-errors-timeout-button-container button:hover{border:1px #fff solid;color:#ccc}.vjs-errors-timeout-button-container{display:flex;flex-direction:row;justify-content:center;gap:10px;position:absolute;bottom:15px;left:15px;right:15px;text-align:center}.vjs-errors-timeout-button-container button{width:120px}.vjs-errors-content-container{overflow:auto;position:absolute;padding-bottom:15px;top:0;left:15px;right:15px;bottom:61px}.vjs-errors-headline{font-size:14px;font-weight:700;padding-right:3em}.vjs-errors-dialog .vjs-control.vjs-close-button{width:3em;height:3em;top:0}.vjs-errors-flashmessage{float:right;font-size:9px;font-style:italic}.vjs-xs.vjs-error-display{font-size:14px;background-color:#000}.vjs-xs.vjs-error-display .vjs-errors-details,.vjs-xs.vjs-error-display .vjs-errors-message{display:none}.vjs-xs .vjs-errors-content-container{top:0}.vjs-xs .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-xs .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}.vjs-xs.vjs-errors-flashmessage{display:none}@media (max-width:600px),(max-height:250px){.vjs-error-display{font-size:14px;background-color:#000}.vjs-error-display .vjs-errors-details,.vjs-error-display .vjs-errors-message,.vjs-errors-flashmessage{display:none}.vjs-error-display .vjs-errors-content-container{top:15px}.vjs-error-display .vjs-errors-headline{font-size:16px;font-weight:700}.vjs-error-display .vjs-errors-dialog{border:0;top:0;bottom:0;left:0;right:0}} \ No newline at end of file diff --git a/css/videojs-overlay.css b/css/videojs-overlay.css deleted file mode 100644 index a7a134d..0000000 --- a/css/videojs-overlay.css +++ /dev/null @@ -1,62 +0,0 @@ -.video-js .vjs-overlay { - color: #fff; - position: absolute; - text-align: center; -} -.video-js .vjs-overlay-no-background { - max-width: 33%; -} -.video-js .vjs-overlay-background { - background-color: #646464; - background-color: rgba(255, 255, 255, 0.4); - border-radius: 3px; - padding: 10px; - width: 33%; -} -.video-js .vjs-overlay-top-left { - top: 5px; - left: 5px; -} -.video-js .vjs-overlay-top { - left: 50%; - margin-left: -16.5%; - top: 5px; -} -.video-js .vjs-overlay-top-right { - right: 5px; - top: 5px; -} -.video-js .vjs-overlay-right { - right: 5px; - top: 50%; - transform: translateY(-50%); -} -.video-js .vjs-overlay-bottom-right { - bottom: 3.5em; - right: 5px; -} -.video-js .vjs-overlay-bottom { - bottom: 3.5em; - left: 50%; - margin-left: -16.5%; -} -.video-js .vjs-overlay-bottom-left { - bottom: 3.5em; - left: 5px; -} -.video-js .vjs-overlay-left { - left: 5px; - top: 50%; - transform: translateY(-50%); -} -.video-js .vjs-overlay-center { - left: 50%; - margin-left: -16.5%; - top: 50%; - transform: translateY(-50%); -} -.video-js .vjs-no-flex .vjs-overlay-left, -.video-js .vjs-no-flex .vjs-overlay-center, -.video-js .vjs-no-flex .vjs-overlay-right { - margin-top: -15px; -} \ No newline at end of file diff --git a/css/videojs-replay.css b/css/videojs-replay.css deleted file mode 100644 index ee93444..0000000 --- a/css/videojs-replay.css +++ /dev/null @@ -1 +0,0 @@ -.video-js.vjs-replay .vjs-play-control:before{content:""} \ No newline at end of file diff --git a/css/videojs-share.css b/css/videojs-share.css deleted file mode 100644 index 3926974..0000000 --- a/css/videojs-share.css +++ /dev/null @@ -1,7 +0,0 @@ -/** - * videojs-share - * @version 3.2.1 - * @copyright 2019 Mikhail Khazov - * @license MIT - */ -.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-modal-dialog-content{display:flex;align-items:center;padding:0;background-image:linear-gradient(to bottom, rgba(0,0,0,0.77), rgba(0,0,0,0.75))}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{position:absolute;right:0;top:5px;width:30px;height:30px;color:#fff;cursor:pointer;opacity:0.9;transition:opacity 0.25s ease-out}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:before{content:'×';font-size:20px;line-height:15px}.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button:hover{opacity:1}.video-js .vjs-share{display:flex;flex-direction:column;justify-content:space-around;align-items:center;width:100%;height:100%;max-height:400px}.video-js .vjs-share__top,.video-js .vjs-share__middle,.video-js .vjs-share__bottom{display:flex}.video-js .vjs-share__top,.video-js .vjs-share__middle{flex-direction:column;justify-content:space-between}.video-js .vjs-share__middle{padding:0 25px}.video-js .vjs-share__title{align-self:center;font-size:22px;color:#fff}.video-js .vjs-share__subtitle{width:100%;margin:0 auto 12px;font-size:16px;color:#fff;opacity:0.7}.video-js .vjs-share__short-link-wrapper{position:relative;display:block;width:100%;height:40px;margin:0 auto;margin-bottom:15px;border:0;color:rgba(255,255,255,0.65);background-color:#363636;outline:none;overflow:hidden;flex-shrink:0}.video-js .vjs-share__short-link{display:block;width:100%;height:100%;padding:0 40px 0 15px;border:0;color:rgba(255,255,255,0.65);background-color:#363636;outline:none}.video-js .vjs-share__btn{position:absolute;right:0;bottom:0;height:40px;width:40px;display:flex;align-items:center;padding:0 11px;border:0;color:#fff;background-color:#2e2e2e;background-size:18px 19px;background-position:center;background-repeat:no-repeat;cursor:pointer;outline:none;transition:width 0.3s ease-out, padding 0.3s ease-out}.video-js .vjs-share__btn svg{flex-shrink:0}.video-js .vjs-share__btn span{position:relative;padding-left:10px;opacity:0;transition:opacity 0.3s ease-out}.video-js .vjs-share__btn:hover{justify-content:center;width:100%;padding:0 40px;background-image:none}.video-js .vjs-share__btn:hover span{opacity:1}.video-js .vjs-share__socials{display:flex;flex-wrap:wrap;justify-content:center;align-content:flex-start;transition:width 0.3s ease-out, height 0.3s ease-out}.video-js .vjs-share__social{display:flex;justify-content:center;align-items:center;flex-shrink:0;width:32px;height:32px;margin-right:6px;margin-bottom:6px;cursor:pointer;font-size:8px;transition:transform 0.3s ease-out, filter 0.2s ease-out;border:none;outline:none}.video-js .vjs-share__social:hover{filter:brightness(115%)}.video-js .vjs-share__social svg{overflow:visible;max-height:24px}.video-js .vjs-share__social_vk{background-color:#5d7294}.video-js .vjs-share__social_ok{background-color:#ed7c20}.video-js .vjs-share__social_mail,.video-js .vjs-share__social_email{background-color:#134785}.video-js .vjs-share__social_tw{background-color:#76aaeb}.video-js .vjs-share__social_reddit{background-color:#ff4500}.video-js .vjs-share__social_fbFeed{background-color:#475995}.video-js .vjs-share__social_messenger{background-color:#0084ff}.video-js .vjs-share__social_gp{background-color:#d53f35}.video-js .vjs-share__social_linkedin{background-color:#0077b5}.video-js .vjs-share__social_viber{background-color:#766db5}.video-js .vjs-share__social_telegram{background-color:#4bb0e2}.video-js .vjs-share__social_whatsapp{background-color:#78c870}.video-js .vjs-share__bottom{justify-content:center}@media (max-height: 220px){.video-js .vjs-share .hidden-xs{display:none}}@media (max-height: 350px){.video-js .vjs-share .hidden-sm{display:none}}@media (min-height: 400px){.video-js .vjs-share__title{margin-bottom:15px}.video-js .vjs-share__short-link-wrapper{margin-bottom:30px}}@media (min-width: 320px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:5px;top:10px}}@media (min-width: 660px){.video-js.vjs-videojs-share_open .vjs-modal-dialog .vjs-close-button{right:20px;top:20px}.video-js .vjs-share__social{width:40px;height:40px}} \ No newline at end of file diff --git a/css/videojs-vr.min.css b/css/videojs-vr.min.css deleted file mode 100644 index f1203e9..0000000 --- a/css/videojs-vr.min.css +++ /dev/null @@ -1 +0,0 @@ -.video-js .vjs-big-vr-play-button{width:100px;height:100px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='360' height='360' viewBox='0 0 360 360'%3E%3Cpath fill='%23FFF' d='M334.883 275.78l-6.374-36.198-6.375-36.2-28.16 23.62-28.164 23.62 25.837 9.41C266.247 296.544 224 320.5 176.25 320.5c-77.47 0-140.5-63.03-140.5-140.5 0-77.472 63.03-140.5 140.5-140.5 53.428 0 99.98 29.978 123.733 73.993l13.304-6.923C287.025 57.76 235.45 24.5 176.25 24.5c-85.743 0-155.5 69.757-155.5 155.5 0 85.742 69.757 155.5 155.5 155.5 54.253 0 102.09-27.94 129.922-70.177l28.71 10.457z'/%3E%3Cpath fill='%23FFF' d='M314.492 175.167c-12.98 0-23.54-10.56-23.54-23.54s10.56-23.54 23.54-23.54c12.98 0 23.54 10.56 23.54 23.54s-10.56 23.54-23.54 23.54zm0-38.08c-8.018 0-14.54 6.522-14.54 14.54s6.522 14.54 14.54 14.54c8.017 0 14.54-6.522 14.54-14.54s-6.523-14.54-14.54-14.54z'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M88.76 173.102h9.395c4.74-.042 8.495-1.27 11.268-3.682 2.77-2.412 4.157-5.903 4.157-10.474 0-4.4-1.153-7.817-3.46-10.25-2.307-2.434-5.83-3.65-10.568-3.65-4.147 0-7.554 1.195-10.22 3.585-2.666 2.392-4 5.514-4 9.364H69.908c0-4.74 1.26-9.055 3.776-12.95 2.518-3.892 6.03-6.928 10.537-9.108 4.508-2.18 9.554-3.27 15.14-3.27 9.225 0 16.472 2.318 21.74 6.952 5.27 4.634 7.903 11.077 7.903 19.33 0 4.147-1.323 8.05-3.967 11.71-2.646 3.66-6.062 6.422-10.252 8.284 5.078 1.736 8.94 4.465 11.584 8.19s3.968 8.166 3.968 13.33c0 8.294-2.847 14.895-8.538 19.804s-13.17 7.363-22.438 7.363c-8.887 0-16.166-2.37-21.836-7.11-5.67-4.74-8.506-11.045-8.506-18.916h15.425c0 4.062 1.365 7.363 4.094 9.902 2.73 2.54 6.4 3.81 11.014 3.81 4.782 0 8.55-1.27 11.3-3.81s4.126-6.22 4.126-11.045c0-4.865-1.44-8.61-4.316-11.235-2.878-2.623-7.152-3.936-12.822-3.936H88.76V173.1zM187.598 133.493v12.76h-1.904c-8.633.126-15.53 2.497-20.693 7.108-5.162 4.614-8.23 11.152-9.203 19.615 4.95-5.205 11.277-7.808 18.98-7.808 8.166 0 14.608 2.878 19.328 8.633 4.718 5.755 7.077 13.182 7.077 22.28 0 9.395-2.76 17.002-8.284 22.82-5.52 5.818-12.77 8.73-21.74 8.73-9.226 0-16.705-3.407-22.44-10.222-5.733-6.812-8.6-15.742-8.6-26.787v-5.267c0-16.208 3.945-28.903 11.84-38.086 7.89-9.182 19.242-13.774 34.054-13.774h1.586zM171.03 177.61c-3.386 0-6.485.95-9.3 2.855-2.814 1.904-4.877 4.443-6.188 7.617v4.697c0 6.854 1.438 12.304 4.316 16.345 2.877 4.04 6.602 6.062 11.172 6.062s8.188-1.715 10.854-5.143 4-7.934 4-13.52-1.355-10.135-4.063-13.648c-2.708-3.51-6.304-5.267-10.79-5.267zM271.136 187.447c0 13.29-2.486 23.307-7.46 30.057s-12.535 10.125-22.69 10.125c-9.988 0-17.51-3.292-22.566-9.872-5.058-6.58-7.65-16.323-7.776-29.23V172.53c0-13.287 2.485-23.252 7.458-29.896 4.973-6.643 12.558-9.966 22.757-9.966 10.112 0 17.655 3.237 22.63 9.712 4.97 6.475 7.52 16.166 7.647 29.072v15.995zm-15.425-17.265c0-8.674-1.185-15.033-3.554-19.075-2.37-4.04-6.137-6.062-11.3-6.062-5.035 0-8.738 1.915-11.107 5.745-2.37 3.83-3.62 9.807-3.746 17.932v20.948c0 8.633 1.206 15.064 3.618 19.297s6.2 6.348 11.362 6.348c4.95 0 8.61-1.957 10.98-5.87 2.37-3.915 3.62-10.04 3.746-18.378v-20.885z'/%3E%3C/g%3E%3C/svg%3E");background-size:contain;background-color:rgba(0,0,0,0.5)}.video-js .vjs-big-vr-play-button .vjs-icon-placeholder{display:none}:hover.video-js .vjs-big-vr-play-button{-webkit-transition:border-color 0.4s,outline 0.4s,background-color 0.4s;-moz-transition:border-color 0.4s,outline 0.4s,background-color 0.4s;-ms-transition:border-color 0.4s,outline 0.4s,background-color 0.4s;-o-transition:border-color 0.4s,outline 0.4s,background-color 0.4s;transition:border-color 0.4s,outline 0.4s,background-color 0.4s}.video-js .vjs-big-vr-play-button::before{content:''}.video-js canvas{cursor:move}.video-js .vjs-button-vr .vjs-icon-placeholder{height:30px;width:30px;display:inline-block;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iI0ZGRkZGRiI+CiAgICA8cGF0aCBkPSJNMjAuNzQgNkgzLjIxQzIuNTUgNiAyIDYuNTcgMiA3LjI4djEwLjQ0YzAgLjcuNTUgMS4yOCAxLjIzIDEuMjhoNC43OWMuNTIgMCAuOTYtLjMzIDEuMTQtLjc5bDEuNC0zLjQ4Yy4yMy0uNTkuNzktMS4wMSAxLjQ0LTEuMDFzMS4yMS40MiAxLjQ1IDEuMDFsMS4zOSAzLjQ4Yy4xOS40Ni42My43OSAxLjExLjc5aDQuNzljLjcxIDAgMS4yNi0uNTcgMS4yNi0xLjI4VjcuMjhjMC0uNy0uNTUtMS4yOC0xLjI2LTEuMjh6TTcuNSAxNC42MmMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTMgMS4xOCAwIDIuMTIuOTYgMi4xMiAyLjEzcy0uOTUgMi4xMi0yLjEyIDIuMTJ6bTkgMGMtMS4xNyAwLTIuMTMtLjk1LTIuMTMtMi4xMiAwLTEuMTcuOTYtMi4xMyAyLjEzLTIuMTNzMi4xMi45NiAyLjEyIDIuMTMtLjk1IDIuMTItMi4xMiAyLjEyeiIvPgogICAgPHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+Cjwvc3ZnPgo=) no-repeat left center} \ No newline at end of file diff --git a/css/videojs-watermark.css b/css/videojs-watermark.css deleted file mode 100644 index 70f66e4..0000000 --- a/css/videojs-watermark.css +++ /dev/null @@ -1,7 +0,0 @@ -/** - * videojs-watermark - * @version 2.0.0 - * @copyright 2017 Brooks Lyrette - * @license Apache-2.0 - */ -.video-js.vjs-watermark{display:block}.video-js .vjs-watermark-content{opacity:0.99;position:absolute;padding:5px;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-ms-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js .vjs-watermark-top-right{right:0;top:0}.video-js .vjs-watermark-top-left{left:0;top:0}.video-js .vjs-watermark-bottom-right{right:0;bottom:30px}.video-js .vjs-watermark-bottom-left{left:0;bottom:30px}.video-js.vjs-user-inactive.vjs-playing .vjs-watermark-fade{opacity:0} diff --git a/gen-changelog b/gen-changelog deleted file mode 100644 index 08856ee..0000000 --- a/gen-changelog +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -#Validate input: -if [ -z "$1" ]; then - echo "Github user not provided" && exit 1 -fi - -if [ -z "$2" ]; then - echo "Github project not provided" && exit 1 -fi - -#Get token: -if [ -z "$CHANGELOG_GITHUB_TOKEN" ]; then - echo 'Unable to find your github credentials token, please make sure your $CHANGELOG_GITHUB_TOKEN variable is set, or pass a path to a credentials file.' && exit 1 -else - if [ ! -z "$3" ]; then - if [ ! -f "$3" ]; then - echo "Unable to fetch credentials, the file either does not exist, or is not an actual file." && exit 1 - else - source "$3" - fi - else - echo 'Unable to find your github credentials file, please double check the file exists and has the $CHANGELOG_GITHUB_TOKEN variable set.' && exit 1 - fi -fi - -#Check for output option: -CLOUT="CHANGELOG.md" - -#Generate changelog: -github_changelog_generator -u "$1" -p "$2" --output "$CLOUT" diff --git a/hooverhigh-videojs-player-dev.min.js b/hooverhigh-videojs-player-dev.min.js deleted file mode 100644 index ca742f6..0000000 --- a/hooverhigh-videojs-player-dev.min.js +++ /dev/null @@ -1,21179 +0,0 @@ -/** - * This script includes a bundle of videojs plugins designed for hooverhigh - * HooverHighVideoPlayer 2 - * Copyright oxmc. - */ -/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ -! function(e, o) { - "object" == typeof exports && "undefined" != typeof module ? module.exports = o(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], o) : (e = "undefined" != typeof globalThis ? globalThis : e || self).videojsErrors = o(e.videojs) -}(this, (function(e) { - "use strict"; - - function o(e) { - return e && "object" == typeof e && "default" in e ? e : { - default: e - } - } - var t = o(e), - i = "6.0.0"; - const n = t.default.getComponent("Flash"), - r = !t.default.browser.IS_IPHONE, - s = t.default.registerPlugin || t.default.plugin, - d = { - header: "", - code: "", - message: "", - timeout: 45e3, - backgroundTimeout: 3e5, - dismiss: r, - errors: { - 1: { - type: "MEDIA_ERR_ABORTED", - headline: "The video download was cancelled" - }, - 2: { - type: "MEDIA_ERR_NETWORK", - headline: "The video connection was lost, please confirm you are connected to the internet" - }, - 3: { - type: "MEDIA_ERR_DECODE", - headline: "The video is bad or in a format that cannot be played on your browser" - }, - 4: { - type: "MEDIA_ERR_SRC_NOT_SUPPORTED", - headline: "This video is either unavailable or not supported in this browser" - }, - 5: { - type: "MEDIA_ERR_ENCRYPTED", - headline: "The video you are trying to watch is encrypted and we do not know how to decrypt it" - }, - unknown: { - type: "MEDIA_ERR_UNKNOWN", - headline: "An unanticipated problem was encountered, check back soon and try again" - }, - "-1": { - type: "PLAYER_ERR_NO_SRC", - headline: "No video has been loaded" - }, - "-2": { - type: "PLAYER_ERR_TIMEOUT", - headline: "It looks like you're having playback issues. Reloading the video may help." - }, - PLAYER_ERR_DOMAIN_RESTRICTED: { - headline: "This video is restricted from playing on your current domain" - }, - PLAYER_ERR_IP_RESTRICTED: { - headline: "This video is restricted at your current IP address" - }, - PLAYER_ERR_GEO_RESTRICTED: { - headline: "This video is restricted from playing in your current geographic region" - }, - FLASHLS_ERR_CROSS_DOMAIN: { - headline: "The video could not be loaded: crossdomain access denied." - } - } - }, - a = function(e, o) { - let r, s, l; - const c = [], - u = function(e) { - o.errors = t.default.mergeOptions(o.errors, e), Object.keys(o.errors).forEach((e => { - const t = o.errors[e]; - t.type || (t.type = e) - })) - }; - u(); - const f = function() { - e.error() && -2 === e.error().code && e.error(null), e.clearTimeout(s), e.clearTimeout(r), l && (l = !1, e.removeClass("vjs-waiting")); - const t = [1 / 0, -1], - i = (e, o) => -1 !== e.indexOf(o); - "hidden" === document.visibilityState && (e.muted() || i(t, o.backgroundTimeout)) || "visible" === document.visibilityState && i(t, o.timeout) || (s = e.setTimeout((function() { - e.error() || e.paused() || e.ended() || (l = !0, e.addClass("vjs-waiting")) - }), 1e3), r = e.setTimeout((function() { - e.error() || e.paused() || e.ended() || e.error({ - code: -2, - type: "PLAYER_ERR_TIMEOUT" - }) - }), "hidden" === document.visibilityState ? o.backgroundTimeout : o.timeout)) - }, - h = function() { - let o; - for (; c.length;) o = c.shift(), e.off(o[0], o[1]); - e.clearTimeout(r), e.clearTimeout(s) - }, - p = function() { - let o = 0; - h(), f(), - function(o, t) { - const i = function() { - if (!e.error()) { - const o = e.$(".vjs-tech"); - if (o && "application/x-shockwave-flash" === o.type && !o.vjs_getProperty) return void e.error({ - code: -2, - type: "PLAYER_ERR_TIMEOUT" - }); - if (e.paused()) return f(); - if (e.ended()) return f() - } - t.call(this) - }; - e.on(o, i), c.push([o, i]) - }(["timeupdate", "adtimeupdate"], (function() { - const t = e.currentTime(); - t !== o && (o = t, f()) - })), e.off(document, "visibilitychange", p), e.on(document, "visibilitychange", p) - }, - m = function() { - e.currentSrc() || e.error({ - code: -1, - type: "PLAYER_ERR_NO_SRC" - }) - }, - v = function() { - let i = "", - r = e.error(); - const s = document.createElement("div"); - let d = ""; - if (!r) return; - if (e.off(document, "visibilitychange", p), r = t.default.mergeOptions(r, o.errors[r.code || r.type || 0]), r.message && (i = `
${e.localize("Technical details")}\n :
${e.localize(r.message)}
\n
`), 4 === r.code && n && !n.isSupported()) { - i += `${e.localize("If you are using an older browser please try upgrading or installing Flash.")}` - } - const a = e.getChild("errorDisplay"); - s.className = "vjs-errors-dialog"; - const l = `
${this.localize("Error Code")}: ${r.type||r.code}
`, - c = -2 === r.code; - d = `
\n

${this.localize(r.headline)}

\n ${c?"":l}\n ${c?"":i}\n
`; - const u = a.closeable(!("dismiss" in r) || r.dismiss); - if (c) { - d += `
\n \n \n
`, s.innerHTML = d, a.fillWith(s), a.getChild("closeButton").hide(); - const o = a.el().querySelector(".vjs-errors-timeout-button-container > button:first-child"), - t = a.el().querySelector(".vjs-errors-timeout-button-container > button:last-child"); - e.on(o, "click", (function() { - const o = e.currentSource(); - e.reset(), e.src(o) - })), e.on(t, "click", (function() { - a.close() - })), a.one("modalclose", (() => { - e.off(o), e.off(t) - })) - } else if (u) { - d += `
\n \n
`, s.innerHTML = d, a.fillWith(s), a.contentEl().firstChild.appendChild(a.getChild("closeButton").el()); - const o = a.el().querySelector(".vjs-errors-ok-button"); - e.on(o, "click", (function() { - a.close() - })) - } else s.innerHTML = d, a.fillWith(s); - (e.currentWidth() <= 600 || e.currentHeight() <= 250) && a.addClass("vjs-xs"), a.one("modalclose", (() => e.error(null))) - }, - y = function() { - h(), e.removeClass("vjs-errors"), e.off("play", p), e.off(document, "visibilitychange", p), e.off("play", m), e.off("dispose", y), e.off(["aderror", "error"], v) - }, - R = function(o) { - y(), a(e, t.default.mergeOptions(d, o)) - }; - R.extend = e => u(e), R.getAll = () => t.default.mergeOptions(o.errors), R.timeout = function(t) { - if (void 0 === t) return o.timeout; - t !== o.timeout && (o.timeout = t, e.paused() || p()) - }, R.backgroundTimeout = function(t) { - if (void 0 === t) return o.backgroundTimeout; - t !== o.backgroundTimeout && (o.backgroundTimeout = t, e.paused() || p()) - }, R.disableProgress = () => {}, e.on("play", p), e.on("play", m), e.on("dispose", y), e.on(["aderror", "contenterror", "error"], v), e.ready((() => { - e.addClass("vjs-errors") - })), e.paused() || p(), R.VERSION = i, e.errors = R - }, - l = function(e) { - a(this, t.default.mergeOptions(d, e)) - }; - return ["extend", "getAll"].forEach((e => { - l[e] = function() { - t.default.log.warn(`The errors.${e}() method is not available until the plugin has been initialized!`) - } - })), l.VERSION = i, s("errors", l), l -})); -/* videojs-hotkeys v0.2.28 - https://github.com/ctd1500/videojs-hotkeys */ -! function(e, t) { - if ("undefined" != typeof window && window.videojs) t(window.videojs); - else if ("function" == typeof define && define.amd) define("videojs-hotkeys", ["video.js"], function(e) { - return t(e.default || e) - }); - else if ("undefined" != typeof module && module.exports) { - var n = require("video.js"); - module.exports = t(n.default || n) - } -}(0, function(x) { - "use strict"; - "undefined" != typeof window && (window.videojs_hotkeys = { - version: "0.2.28" - }); - (x.registerPlugin || x.plugin)("hotkeys", function(m) { - var f = this, - y = f.el(), - v = document, - e = { - volumeStep: .1, - seekStep: 5, - enableMute: !0, - enableVolumeScroll: !0, - enableHoverScroll: !1, - enableFullscreen: !0, - enableNumbers: !0, - enableJogStyle: !1, - alwaysCaptureHotkeys: !1, - captureDocumentHotkeys: !1, - documentHotkeysFocusElementFilter: function() { - return !1 - }, - enableModifiersForNumbers: !0, - enableInactiveFocus: !0, - skipInitialFocus: !1, - playPauseKey: function(e) { - return 32 === e.which || 179 === e.which - }, - rewindKey: function(e) { - return 37 === e.which || 177 === e.which - }, - forwardKey: function(e) { - return 39 === e.which || 176 === e.which - }, - volumeUpKey: function(e) { - return 38 === e.which - }, - volumeDownKey: function(e) { - return 40 === e.which - }, - muteKey: function(e) { - return 77 === e.which - }, - fullscreenKey: function(e) { - return 70 === e.which - }, - customKeys: {} - }, - t = x.mergeOptions || x.util.mergeOptions, - d = (m = t(e, m || {})).volumeStep, - n = m.seekStep, - p = m.enableMute, - o = m.enableVolumeScroll, - r = m.enableHoverScroll, - b = m.enableFullscreen, - h = m.enableNumbers, - w = m.enableJogStyle, - k = m.alwaysCaptureHotkeys, - S = m.captureDocumentHotkeys, - K = m.documentHotkeysFocusElementFilter, - F = m.enableModifiersForNumbers, - u = m.enableInactiveFocus, - l = m.skipInitialFocus, - i = x.VERSION; - y.hasAttribute("tabIndex") || y.setAttribute("tabIndex", "-1"), y.style.outline = "none", !k && f.autoplay() || l || f.one("play", function() { - y.focus() - }), u && f.on("userinactive", function() { - var n = function() { - clearTimeout(e) - }, - e = setTimeout(function() { - f.off("useractive", n); - var e = v.activeElement, - t = y.querySelector(".vjs-control-bar"); - e && e.parentElement == t && y.focus() - }, 10); - f.one("useractive", n) - }), f.on("play", function() { - var e = y.querySelector(".iframeblocker"); - e && "" === e.style.display && (e.style.display = "block", e.style.bottom = "39px") - }); - var c = function(e) { - var t, n, o = e.which, - r = e.preventDefault.bind(e), - u = f.duration(); - if (f.controls()) { - var l = v.activeElement; - if (k || S && K(l) || l == y || l == y.querySelector(".vjs-tech") || l == y.querySelector(".vjs-control-bar") || l == y.querySelector(".iframeblocker")) switch (j(e, f)) { - case 1: - r(), (k || S) && e.stopPropagation(), f.paused() ? E(f.play()) : f.pause(); - break; - case 2: - t = !f.paused(), r(), t && f.pause(), (n = f.currentTime() - T(e)) <= 0 && (n = 0), f.currentTime(n), t && E(f.play()); - break; - case 3: - t = !f.paused(), r(), t && f.pause(), u <= (n = f.currentTime() + T(e)) && (n = t ? u - .001 : u), f.currentTime(n), t && E(f.play()); - break; - case 5: - r(), w ? (n = f.currentTime() - 1, f.currentTime() <= 1 && (n = 0), f.currentTime(n)) : f.volume(f.volume() - d); - break; - case 4: - r(), w ? (u <= (n = f.currentTime() + 1) && (n = u), f.currentTime(n)) : f.volume(f.volume() + d); - break; - case 6: - p && f.muted(!f.muted()); - break; - case 7: - b && (f.isFullscreen() ? f.exitFullscreen() : f.requestFullscreen()); - break; - default: - if ((47 < o && o < 59 || 95 < o && o < 106) && (F || !(e.metaKey || e.ctrlKey || e.altKey)) && h) { - var i = 48; - 95 < o && (i = 96); - var c = o - i; - r(), f.currentTime(f.duration() * c * .1) - } - for (var a in m.customKeys) { - var s = m.customKeys[a]; - s && s.key && s.handler && s.key(e) && (r(), s.handler(f, m, e)) - } - } - } - }, - a = !1, - s = y.querySelector(".vjs-volume-menu-button") || y.querySelector(".vjs-volume-panel"); - null != s && (s.onmouseover = function() { - a = !0 - }, s.onmouseout = function() { - a = !1 - }); - var q = function(e) { - if (r) var t = 0; - else t = v.activeElement; - if (f.controls() && (k || t == y || t == y.querySelector(".vjs-tech") || t == y.querySelector(".iframeblocker") || t == y.querySelector(".vjs-control-bar") || a) && o) { - e = window.event || e; - var n = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail)); - e.preventDefault(), 1 == n ? f.volume(f.volume() + d) : -1 == n && f.volume(f.volume() - d) - } - }, - j = function(e, t) { - return m.playPauseKey(e, t) ? 1 : m.rewindKey(e, t) ? 2 : m.forwardKey(e, t) ? 3 : m.volumeUpKey(e, t) ? 4 : m.volumeDownKey(e, t) ? 5 : m.muteKey(e, t) ? 6 : m.fullscreenKey(e, t) ? 7 : void 0 - }; - - function T(e) { - return "function" == typeof n ? n(e) : n - } - - function E(e) { - null != e && "function" == typeof e.then && e.then(null, function(e) {}) - } - if (S) { - var g = function(e) { - c(e) - }; - document.addEventListener("keydown", g), this.dispose = function() { - document.removeEventListener("keydown", g) - } - } else f.on("keydown", c); - return f.on("dblclick", function(e) { - if (null != i && i <= "7.1.0" && f.controls()) { - var t = e.relatedTarget || e.toElement || v.activeElement; - t != y && t != y.querySelector(".vjs-tech") && t != y.querySelector(".iframeblocker") || b && (f.isFullscreen() ? f.exitFullscreen() : f.requestFullscreen()) - } - }), f.on("mousewheel", q), f.on("DOMMouseScroll", q), this - }) -}); -/*! @name videojs-contrib-ads @version 6.9.0 @license Apache-2.0 */ -! function(e, t) { - "object" == typeof exports && "undefined" != typeof module ? module.exports = t(require("video.js"), require("global/window"), require("global/document")) : "function" == typeof define && define.amd ? define(["video.js", "global/window", "global/document"], t) : (e = e || self).videojsContribAds = t(e.videojs, e.window, e.document) -}(this, function(e, t, n) { - "use strict"; - e = e && e.hasOwnProperty("default") ? e.default : e, t = t && t.hasOwnProperty("default") ? t.default : t, n = n && n.hasOwnProperty("default") ? n.default : n; - var a = "6.9.0"; - var o = function(e, t) { - t.isImmediatePropagationStopped = function() { - return !0 - }, t.cancelBubble = !0, t.isPropagationStopped = function() { - return !0 - } - }, - r = function(e, t, n) { - o(0, n), e.trigger({ - type: t + n.type, - originalEvent: n - }) - }, - i = function(e, t) { - e.ads.isInAdMode() && (e.ads.isContentResuming() ? e.ads._contentEnding && r(e, "content", t) : r(e, "ad", t)) - }, - s = function(e, t) { - e.ads.isInAdMode() ? e.ads.isContentResuming() ? (o(0, t), e.trigger("resumeended")) : r(e, "ad", t) : e.ads._contentHasEnded || e.ads.stitchedAds() || (r(e, "content", t), e.trigger("readyforpostroll")) - }, - d = function(e, t) { - if (!("loadstart" === t.type && !e.ads._hasThereBeenALoadStartDuringPlayerLife || "loadeddata" === t.type && !e.ads._hasThereBeenALoadedData || "loadedmetadata" === t.type && !e.ads._hasThereBeenALoadedMetaData)) - if (e.ads.inAdBreak()) r(e, "ad", t); - else { - if (e.currentSrc() !== e.ads.contentSrc) return; - r(e, "content", t) - } - }, - l = function(e, t) { - e.ads.inAdBreak() ? r(e, "ad", t) : e.ads.isContentResuming() && r(e, "content", t) - }; - - function u(e) { - "playing" === e.type ? i(this, e) : "ended" === e.type ? s(this, e) : "loadstart" === e.type || "loadeddata" === e.type || "loadedmetadata" === e.type ? d(this, e) : "play" === e.type ? l(this, e) : this.ads.isInAdMode() && (this.ads.isContentResuming() ? r(this, "content", e) : r(this, "ad", e)) - } - var c = {}, - f = function() { - ! function(n) { - if (e.dom.isInFrame() && "function" != typeof t.__tcfapi) { - for (var a, o = t, r = {}; o;) { - try { - if (o.frames.__tcfapiLocator) { - a = o; - break - } - } catch (e) {} - if (o === t.top) break; - o = o.parent - } - if (!a) return; - t.__tcfapi = function(e, t, n, o) { - var i = Math.random() + "", - s = { - __tcfapiCall: { - command: e, - parameter: o, - version: t, - callId: i - } - }; - r[i] = n, a.postMessage(s, "*") - }, t.addEventListener("message", function(e) { - var t = {}; - try { - t = "string" == typeof e.data ? JSON.parse(e.data) : e.data - } catch (e) {} - var n = t.__tcfapiReturn; - n && "function" == typeof r[n.callId] && (r[n.callId](n.returnValue, n.success), r[n.callId] = null) - }, !1) - } - }(), "function" == typeof t.__tcfapi && t.__tcfapi("addEventListener", 2, function(e, t) { - t && (c = e) - }) - }, - h = function(e, t) { - return t ? encodeURIComponent(e) : e - }, - p = function(e, t, n) { - if (e && e[n]) - for (var a = e[n], o = Object.keys(a), r = 0; r < o.length; r++) { - t["{mediainfo." + n + "." + o[r] + "}"] = a[o[r]] - } - }; - var g = { - processMetadataTracks: function(e, t) { - for (var n = e.textTracks(), a = function(n) { - "metadata" === n.kind && (e.ads.cueTextTracks.setMetadataTrackMode(n), t(e, n)) - }, o = 0; o < n.length; o++) a(n[o]); - n.addEventListener("addtrack", function(e) { - a(e.track) - }) - }, - setMetadataTrackMode: function(e) {}, - getSupportedAdCue: function(e, t) { - return t - }, - isSupportedAdCue: function(e, t) { - return !0 - }, - getCueId: function(e, t) { - return t.id - } - }, - y = function(e, t) { - return void 0 !== t && e.ads.includedCues[t] - }, - v = function(e, t) { - void 0 !== t && "" !== t && (e.ads.includedCues[t] = !0) - }; - - function m() { - !1 !== this.ads._shouldBlockPlay && (this.paused() || (this.ads.debug("Playback was canceled by cancelContentPlay"), this.pause()), this.ads._cancelledPlay = !0) - } - g.processAdTrack = function(t, n, a, o) { - t.ads.includedCues = {}; - for (var r = 0; r < n.length; r++) { - var i = n[r], - s = this.getSupportedAdCue(t, i); - if (!this.isSupportedAdCue(t, i)) return void e.log.warn("Skipping as this is not a supported ad cue.", i); - var d = this.getCueId(t, i), - l = i.startTime; - if (y(t, d)) return void e.log("Skipping ad already seen with ID " + d); - o && o(t, s, d, l), a(t, s, d, l), v(t, d) - } - }; - var A = {}, - S = e; - A.isMiddlewareMediatorSupported = function() { - return !S.browser.IS_IOS && !S.browser.IS_ANDROID && !!(S.use && S.middleware && S.middleware.TERMINATOR) - }, A.playMiddleware = function(t) { - return { - setSource: function(e, t) { - t(null, e) - }, - callPlay: function() { - if (t.ads && !0 === t.ads._shouldBlockPlay) return t.ads.debug("Using playMiddleware to block content playback"), t.ads._playBlocked = !0, S.middleware.TERMINATOR - }, - play: function(n, a) { - t.ads && t.ads._playBlocked && n ? (t.ads.debug("Play call to Tech was terminated."), t.trigger("play"), t.addClass("vjs-has-started"), t.ads._playBlocked = !1) : a && a.catch && a.catch(function(n) { - "NotAllowedError" !== n.name || e.browser.IS_SAFARI || t.trigger("pause") - }) - } - } - }, A.testHook = function(e) { - S = e - }; - var _ = A.playMiddleware, - P = A.isMiddlewareMediatorSupported, - b = function() { - if (e.getPlugin) return Boolean(e.getPlugin("ads")); - var t = e.getComponent("Player"); - return Boolean(t && t.prototype.ads) - }; - var k = function() { - function e() {} - return e.getState = function(t) { - if (t) return e.states_ && e.states_[t] ? e.states_[t] : void 0 - }, e.registerState = function(t, n) { - if ("string" != typeof t || !t) throw new Error('Illegal state name, "' + t + '"; must be a non-empty string.'); - return e.states_ || (e.states_ = {}), e.states_[t] = n, n - }, e - }(), - C = function() { - function t(e) { - this.player = e - } - t._getName = function() { - return "Anonymous State" - }; - var n = t.prototype; - return n.transitionTo = function(e) { - var t = this.player; - this.cleanup(t); - var n = new e(t); - t.ads._state = n, t.ads.debug(this.constructor._getName() + " -> " + n.constructor._getName()); - for (var a = arguments.length, o = new Array(a > 1 ? a - 1 : 0), r = 1; r < a; r++) o[r - 1] = arguments[r]; - n.init.apply(n, [t].concat(o)) - }, n.init = function() {}, n.cleanup = function() {}, n.onPlay = function() {}, n.onPlaying = function() {}, n.onEnded = function() {}, n.onAdEnded = function() {}, n.onAdsReady = function() { - e.log.warn("Unexpected adsready event") - }, n.onAdsError = function() {}, n.onAdsCanceled = function() {}, n.onAdTimeout = function() {}, n.onAdStarted = function() {}, n.onContentChanged = function() {}, n.onContentResumed = function() {}, n.onReadyForPostroll = function() { - e.log.warn("Unexpected readyforpostroll event") - }, n.onNoPreroll = function() {}, n.onNoPostroll = function() {}, n.startLinearAdMode = function() { - e.log.warn("Unexpected startLinearAdMode invocation (State via " + this.constructor._getName() + ")") - }, n.endLinearAdMode = function() { - e.log.warn("Unexpected endLinearAdMode invocation (State via " + this.constructor._getName() + ")") - }, n.skipLinearAdMode = function() { - e.log.warn("Unexpected skipLinearAdMode invocation (State via " + this.constructor._getName() + ")") - }, n.isAdState = function() { - throw new Error("isAdState unimplemented for " + this.constructor._getName()) - }, n.isWaitingForAdBreak = function() { - return !1 - }, n.isContentResuming = function() { - return !1 - }, n.inAdBreak = function() { - return !1 - }, n.handleEvent = function(e) { - var t = this.player; - "play" === e ? this.onPlay(t) : "adsready" === e ? this.onAdsReady(t) : "adserror" === e ? this.onAdsError(t) : "adscanceled" === e ? this.onAdsCanceled(t) : "adtimeout" === e ? this.onAdTimeout(t) : "ads-ad-started" === e ? this.onAdStarted(t) : "contentchanged" === e ? this.onContentChanged(t) : "contentresumed" === e ? this.onContentResumed(t) : "readyforpostroll" === e ? this.onReadyForPostroll(t) : "playing" === e ? this.onPlaying(t) : "ended" === e ? this.onEnded(t) : "nopreroll" === e ? this.onNoPreroll(t) : "nopostroll" === e ? this.onNoPostroll(t) : "adended" === e && this.onAdEnded(t) - }, t - }(); - - function T(e, t) { - e.prototype = Object.create(t.prototype), e.prototype.constructor = e, e.__proto__ = t - } - k.registerState("State", C); - var w = function(e) { - function t(t) { - var n; - return (n = e.call(this, t) || this).contentResuming = !1, n.waitingForAdBreak = !1, n - } - T(t, e); - var n = t.prototype; - return n.isAdState = function() { - return !0 - }, n.onPlaying = function() { - var e = k.getState("ContentPlayback"); - this.contentResuming && this.transitionTo(e) - }, n.onContentResumed = function() { - var e = k.getState("ContentPlayback"); - this.contentResuming && this.transitionTo(e) - }, n.isWaitingForAdBreak = function() { - return this.waitingForAdBreak - }, n.isContentResuming = function() { - return this.contentResuming - }, n.inAdBreak = function() { - return !0 === this.player.ads._inLinearAdMode - }, t - }(C); - k.registerState("AdState", w); - var R = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e); - var n = t.prototype; - return n.isAdState = function() { - return !1 - }, n.onContentChanged = function(e) { - var t = k.getState("BeforePreroll"), - n = k.getState("Preroll"); - e.ads.debug("Received contentchanged event (ContentState)"), e.paused() ? this.transitionTo(t) : (this.transitionTo(n, !1), e.pause(), e.ads._pausedOnContentupdate = !0) - }, t - }(C); - k.registerState("ContentState", R); - var L, B = function(t) { - function n() { - return t.apply(this, arguments) || this - } - T(n, t), n._getName = function() { - return "AdsDone" - }; - var a = n.prototype; - return a.init = function(e) { - e.ads._contentHasEnded = !0, e.trigger("ended") - }, a.startLinearAdMode = function() { - e.log.warn("Unexpected startLinearAdMode invocation (AdsDone)") - }, n - }(k.getState("ContentState")); - k.registerState("AdsDone", B); - var M = { - start: function(t) { - t.ads.debug("Starting ad break"), t.ads._inLinearAdMode = !0, t.trigger("adstart"), t.ads.shouldTakeSnapshots() && (t.ads.snapshot = function(t) { - var n; - n = e.browser.IS_IOS && t.ads.isLive(t) && t.seekable().length > 0 ? t.currentTime() - t.seekable().end(0) : t.currentTime(); - var a = t.$(".vjs-tech"), - o = t.textTracks ? t.textTracks() : [], - r = [], - i = { - ended: t.ended(), - currentSrc: t.currentSrc(), - sources: t.currentSources(), - src: t.tech_.src(), - currentTime: n, - type: t.currentType() - }; - a && (i.style = a.getAttribute("style")); - for (var s = 0; s < o.length; s++) { - var d = o[s]; - r.push({ - track: d, - mode: d.mode - }), d.mode = "disabled" - } - return i.suppressedTracks = r, i - }(t)), t.ads.shouldPlayContentBehindAd(t) && (t.ads.preAdVolume_ = t.volume(), t.volume(0)), t.addClass("vjs-ad-playing"), t.hasClass("vjs-live") && t.removeClass("vjs-live"), t.ads.removeNativePoster() - }, - end: function(t, n) { - t.ads.debug("Ending ad break"), void 0 === n && (n = function() {}), t.ads.adType = null, t.ads._inLinearAdMode = !1, t.trigger("adend"), t.removeClass("vjs-ad-playing"), t.ads.isLive(t) && t.addClass("vjs-live"), t.ads.shouldTakeSnapshots() ? function(t, n) { - var a = t.ads.snapshot; - if (void 0 === n && (n = function() {}), !0 === t.ads.disableNextSnapshotRestore) return t.ads.disableNextSnapshotRestore = !1, delete t.ads.snapshot, void n(); - var o, r = t.$(".vjs-tech"), - i = 20, - s = a.suppressedTracks, - d = function() { - for (var e = 0; e < s.length; e++)(o = s[e]).track.mode = o.mode - }, - l = function() { - var n; - if (e.browser.IS_IOS && t.ads.isLive(t)) { - if (a.currentTime < 0 && (n = t.seekable().length > 0 ? t.seekable().end(0) + a.currentTime : t.currentTime(), t.currentTime(n)), t.paused()) { - var o = t.play(); - o && o.catch && o.catch(function(t) { - e.log.warn("Play promise rejected in IOS snapshot resume", t) - }) - } - } else if (a.ended) t.currentTime(t.duration()); - else { - t.currentTime(a.currentTime); - var r = t.play(); - r && r.catch && r.catch(function(t) { - e.log.warn("Play promise rejected in snapshot resume", t) - }) - } - t.ads.shouldRemoveAutoplay_ && (t.autoplay(!1), t.ads.shouldRemoveAutoplay_ = !1) - }, - u = function n() { - if (t.off("contentcanplay", n), L && t.clearTimeout(L), (r = t.el().querySelector(".vjs-tech")).readyState > 1) return l(); - if (void 0 === r.seekable) return l(); - if (r.seekable.length > 0) return l(); - if (i--) t.setTimeout(n, 50); - else try { - l() - } catch (t) { - e.log.warn("Failed to resume the content after an advertisement", t) - } - }; - if ("style" in a && r.setAttribute("style", a.style || ""), t.ads.videoElementRecycled()) t.one("resumeended", function() { - delete t.ads.snapshot, n() - }), t.one("contentloadedmetadata", d), e.browser.IS_IOS && !t.autoplay() && (t.autoplay(!0), t.ads.shouldRemoveAutoplay_ = !0), t.src(a.sources), t.one("contentcanplay", u), L = t.setTimeout(u, 2e3); - else { - if (d(), !t.ended()) { - var c = t.play(); - c && c.catch && c.catch(function(t) { - e.log.warn("Play promise rejected in snapshot restore", t) - }) - } - delete t.ads.snapshot, n() - } - }(t, n) : (t.volume(t.ads.preAdVolume_), n()) - } - }, - j = function(t) { - function n() { - return t.apply(this, arguments) || this - } - T(n, t), n._getName = function() { - return "Preroll" - }; - var a = n.prototype; - return a.init = function(e, t, n) { - if (this.waitingForAdBreak = !0, e.addClass("vjs-ad-loading"), n || e.ads.nopreroll_) return this.resumeAfterNoPreroll(e); - var a = e.ads.settings.timeout; - "number" == typeof e.ads.settings.prerollTimeout && (a = e.ads.settings.prerollTimeout), this._timeout = e.setTimeout(function() { - e.trigger("adtimeout") - }, a), t ? this.handleAdsReady() : this.adsReady = !1 - }, a.onAdsReady = function(t) { - t.ads.inAdBreak() ? e.log.warn("Unexpected adsready event (Preroll)") : (t.ads.debug("Received adsready event (Preroll)"), this.handleAdsReady()) - }, a.handleAdsReady = function() { - this.adsReady = !0, this.readyForPreroll() - }, a.afterLoadStart = function(e) { - var t = this.player; - t.ads._hasThereBeenALoadStartDuringPlayerLife ? e() : (t.ads.debug("Waiting for loadstart..."), t.one("loadstart", function() { - t.ads.debug("Received loadstart event"), e() - })) - }, a.noPreroll = function() { - var e = this; - this.afterLoadStart(function() { - e.player.ads.debug("Skipping prerolls due to nopreroll event (Preroll)"), e.resumeAfterNoPreroll(e.player) - }) - }, a.readyForPreroll = function() { - var e = this.player; - this.afterLoadStart(function() { - e.ads.debug("Triggered readyforpreroll event (Preroll)"), e.trigger("readyforpreroll") - }) - }, a.onAdsCanceled = function(e) { - var t = this; - e.ads.debug("adscanceled (Preroll)"), this.afterLoadStart(function() { - t.resumeAfterNoPreroll(e) - }) - }, a.onAdsError = function(t) { - var n = this; - e.log("adserror (Preroll)"), this.inAdBreak() ? t.ads.endLinearAdMode() : this.afterLoadStart(function() { - n.resumeAfterNoPreroll(t) - }) - }, a.startLinearAdMode = function() { - var t = this.player; - !this.adsReady || t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected startLinearAdMode invocation (Preroll)") : (this.clearTimeout(t), t.ads.adType = "preroll", this.waitingForAdBreak = !1, M.start(t), t.ads._shouldBlockPlay = !1) - }, a.onAdStarted = function(e) { - e.removeClass("vjs-ad-loading") - }, a.endLinearAdMode = function() { - var e = this.player; - this.inAdBreak() && (e.removeClass("vjs-ad-loading"), e.addClass("vjs-ad-content-resuming"), this.contentResuming = !0, M.end(e)) - }, a.skipLinearAdMode = function() { - var t = this, - n = this.player; - n.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected skipLinearAdMode invocation") : this.afterLoadStart(function() { - n.trigger("adskip"), n.ads.debug("skipLinearAdMode (Preroll)"), t.resumeAfterNoPreroll(n) - }) - }, a.onAdTimeout = function(e) { - var t = this; - this.afterLoadStart(function() { - e.ads.debug("adtimeout (Preroll)"), t.resumeAfterNoPreroll(e) - }) - }, a.onNoPreroll = function(t) { - t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected nopreroll event (Preroll)") : this.noPreroll() - }, a.resumeAfterNoPreroll = function(e) { - if (this.contentResuming = !0, e.ads._shouldBlockPlay = !1, this.cleanupPartial(e), e.ads._playRequested || e.ads._pausedOnContentupdate) - if (e.paused()) { - e.ads.debug("resumeAfterNoPreroll: attempting to resume playback (Preroll)"); - var t = e.play(); - t && t.then && t.then(null, function(e) {}) - } else e.ads.debug("resumeAfterNoPreroll: already playing (Preroll)"), e.trigger("play"), e.trigger("playing") - }, a.cleanup = function(t) { - t.ads._hasThereBeenALoadStartDuringPlayerLife || e.log.warn("Leaving Preroll state before loadstart event can cause issues."), this.cleanupPartial(t) - }, a.cleanupPartial = function(e) { - e.removeClass("vjs-ad-loading"), e.removeClass("vjs-ad-content-resuming"), this.clearTimeout(e) - }, a.clearTimeout = function(e) { - e.clearTimeout(this._timeout), this._timeout = null - }, n - }(k.getState("AdState")); - k.registerState("Preroll", j); - var I = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e), t._getName = function() { - return "BeforePreroll" - }; - var n = t.prototype; - return n.init = function(e) { - this.adsReady = !1, this.shouldResumeToContent = !1, e.ads._shouldBlockPlay = !e.ads.settings.allowVjsAutoplay || !e.autoplay() - }, n.onAdsReady = function(e) { - e.ads.debug("Received adsready event (BeforePreroll)"), this.adsReady = !0 - }, n.onPlay = function(e) { - var t = k.getState("Preroll"); - e.ads.debug("Received play event (BeforePreroll)"), this.transitionTo(t, this.adsReady, this.shouldResumeToContent) - }, n.onAdsCanceled = function(e) { - e.ads.debug("adscanceled (BeforePreroll)"), this.shouldResumeToContent = !0 - }, n.onAdsError = function() { - this.player.ads.debug("adserror (BeforePreroll)"), this.shouldResumeToContent = !0 - }, n.onNoPreroll = function() { - this.player.ads.debug("Skipping prerolls due to nopreroll event (BeforePreroll)"), this.shouldResumeToContent = !0 - }, n.skipLinearAdMode = function() { - var e = this.player; - e.trigger("adskip"), e.ads.debug("skipLinearAdMode (BeforePreroll)"), this.shouldResumeToContent = !0 - }, n.onContentChanged = function() { - this.init(this.player) - }, t - }(k.getState("ContentState")); - k.registerState("BeforePreroll", I); - var N = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e), t._getName = function() { - return "Midroll" - }; - var n = t.prototype; - return n.init = function(e) { - e.ads.adType = "midroll", M.start(e), e.addClass("vjs-ad-loading") - }, n.onAdStarted = function(e) { - e.removeClass("vjs-ad-loading") - }, n.endLinearAdMode = function() { - var e = this.player; - this.inAdBreak() && (this.contentResuming = !0, e.addClass("vjs-ad-content-resuming"), e.removeClass("vjs-ad-loading"), M.end(e)) - }, n.onAdsError = function(e) { - this.inAdBreak() && e.ads.endLinearAdMode() - }, n.cleanup = function(e) { - e.removeClass("vjs-ad-loading"), e.removeClass("vjs-ad-content-resuming") - }, t - }(k.getState("AdState")); - k.registerState("Midroll", N); - var E = function(t) { - function n() { - return t.apply(this, arguments) || this - } - T(n, t), n._getName = function() { - return "Postroll" - }; - var a = n.prototype; - return a.init = function(e) { - if (this.waitingForAdBreak = !0, e.ads._contentEnding = !0, e.ads.nopostroll_) { - this.resumeContent(e); - var t = k.getState("AdsDone"); - this.transitionTo(t) - } else { - e.addClass("vjs-ad-loading"); - var n = e.ads.settings.timeout; - "number" == typeof e.ads.settings.postrollTimeout && (n = e.ads.settings.postrollTimeout), this._postrollTimeout = e.setTimeout(function() { - e.trigger("adtimeout") - }, n) - } - }, a.startLinearAdMode = function() { - var t = this.player; - t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected startLinearAdMode invocation (Postroll)") : (t.ads.adType = "postroll", t.clearTimeout(this._postrollTimeout), this.waitingForAdBreak = !1, M.start(t)) - }, a.onAdStarted = function(e) { - e.removeClass("vjs-ad-loading") - }, a.endLinearAdMode = function() { - var e = this, - t = this.player, - n = k.getState("AdsDone"); - this.inAdBreak() && (t.removeClass("vjs-ad-loading"), this.resumeContent(t), M.end(t, function() { - e.transitionTo(n) - })) - }, a.skipLinearAdMode = function() { - var t = this.player; - t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected skipLinearAdMode invocation") : (t.ads.debug("Postroll abort (skipLinearAdMode)"), t.trigger("adskip"), this.abort(t)) - }, a.onAdTimeout = function(e) { - e.ads.debug("Postroll abort (adtimeout)"), this.abort(e) - }, a.onAdsError = function(e) { - e.ads.debug("Postroll abort (adserror)"), e.ads.inAdBreak() ? e.ads.endLinearAdMode() : this.abort(e) - }, a.onContentChanged = function(e) { - if (this.isContentResuming()) { - var t = k.getState("BeforePreroll"); - this.transitionTo(t) - } else if (!this.inAdBreak()) { - var n = k.getState("Preroll"); - this.transitionTo(n) - } - }, a.onNoPostroll = function(t) { - this.isContentResuming() || this.inAdBreak() ? e.log.warn("Unexpected nopostroll event (Postroll)") : this.abort(t) - }, a.resumeContent = function(e) { - this.contentResuming = !0, e.addClass("vjs-ad-content-resuming") - }, a.abort = function(e) { - var t = k.getState("AdsDone"); - this.resumeContent(e), e.removeClass("vjs-ad-loading"), this.transitionTo(t) - }, a.cleanup = function(e) { - e.removeClass("vjs-ad-content-resuming"), e.clearTimeout(this._postrollTimeout), e.ads._contentEnding = !1 - }, n - }(k.getState("AdState")); - k.registerState("Postroll", E); - var x = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e), t._getName = function() { - return "ContentPlayback" - }; - var n = t.prototype; - return n.init = function(e) { - e.ads._shouldBlockPlay = !1 - }, n.onAdsReady = function(e) { - e.ads.debug("Received adsready event (ContentPlayback)"), e.ads.nopreroll_ || (e.ads.debug("Triggered readyforpreroll event (ContentPlayback)"), e.trigger("readyforpreroll")) - }, n.onReadyForPostroll = function(e) { - var t = k.getState("Postroll"); - e.ads.debug("Received readyforpostroll event"), this.transitionTo(t) - }, n.startLinearAdMode = function() { - var e = k.getState("Midroll"); - this.transitionTo(e) - }, t - }(k.getState("ContentState")); - k.registerState("ContentPlayback", x); - var D = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e), t._getName = function() { - return "StitchedContentPlayback" - }; - var n = t.prototype; - return n.init = function() { - this.player.ads._shouldBlockPlay = !1 - }, n.onContentChanged = function() { - this.player.ads.debug("Received contentchanged event (" + this.constructor._getName() + ")") - }, n.startLinearAdMode = function() { - var e = k.getState("StitchedAdRoll"); - this.transitionTo(e) - }, t - }(k.getState("ContentState")); - k.registerState("StitchedContentPlayback", D); - var O = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e), t._getName = function() { - return "StitchedAdRoll" - }; - var n = t.prototype; - return n.init = function() { - this.waitingForAdBreak = !1, this.contentResuming = !1, this.player.ads.adType = "stitched", M.start(this.player) - }, n.onPlaying = function() {}, n.onContentResumed = function() {}, n.onAdEnded = function() { - this.endLinearAdMode(), this.player.trigger("ended") - }, n.endLinearAdMode = function() { - var e = k.getState("StitchedContentPlayback"); - M.end(this.player), this.transitionTo(e) - }, t - }(k.getState("AdState")); - k.registerState("StitchedAdRoll", O); - var F = A.isMiddlewareMediatorSupported, - U = e.getTech("Html5").Events, - V = { - timeout: 5e3, - prerollTimeout: void 0, - postrollTimeout: void 0, - debug: !1, - stitchedAds: !1, - contentIsLive: void 0, - liveCuePoints: !0, - allowVjsAutoplay: e.options.normalizeAutoplay || !1 - }, - q = function(o) { - var r = this, - i = e.mergeOptions(V, o), - s = []; - U.concat(["firstplay", "loadedalldata"]).forEach(function(e) { - -1 === s.indexOf(e) && s.push(e) - }), r.on(s, u), F() || function(t, n) { - n && e.log("Using cancelContentPlay to block content playback"), t.on("play", m) - }(r, i.debug), r.setTimeout(function() { - r.ads._hasThereBeenALoadStartDuringPlayerLife || "" === r.src() || e.log.error("videojs-contrib-ads has not seen a loadstart event 5 seconds after being initialized, but a source is present. This indicates that videojs-contrib-ads was initialized too late. It must be initialized immediately after video.js in the same tick. As a result, some ads will not play and some media events will be incorrect. For more information, see http://videojs.github.io/videojs-contrib-ads/integrator/getting-started.html") - }, 5e3), r.on("ended", function() { - r.hasClass("vjs-has-started") || r.addClass("vjs-has-started") - }), r.on("contenttimeupdate", function() { - r.removeClass("vjs-waiting") - }), r.on(["addurationchange", "adcanplay"], function() { - if (!r.ads.settings.stitchedAds && !r.hasStarted() && (!r.ads.snapshot || r.currentSrc() !== r.ads.snapshot.currentSrc) && r.ads.inAdBreak()) { - var t = r.play(); - t && t.catch && t.catch(function(t) { - e.log.warn("Play promise rejected when playing ad", t) - }) - } - }), r.on("nopreroll", function() { - r.ads.debug("Received nopreroll event"), r.ads.nopreroll_ = !0 - }), r.on("nopostroll", function() { - r.ads.debug("Received nopostroll event"), r.ads.nopostroll_ = !0 - }), r.on("playing", function() { - r.ads._cancelledPlay = !1, r.ads._pausedOnContentupdate = !1 - }), r.on("play", function() { - r.ads._playRequested = !0 - }), r.one("loadstart", function() { - r.ads._hasThereBeenALoadStartDuringPlayerLife = !0 - }), r.on("loadeddata", function() { - r.ads._hasThereBeenALoadedData = !0 - }), r.on("loadedmetadata", function() { - r.ads._hasThereBeenALoadedMetaData = !0 - }), r.ads = function(t) { - return { - disableNextSnapshotRestore: !1, - _contentEnding: !1, - _contentHasEnded: !1, - _hasThereBeenALoadStartDuringPlayerLife: !1, - _hasThereBeenALoadedData: !1, - _hasThereBeenALoadedMetaData: !1, - _inLinearAdMode: !1, - _shouldBlockPlay: !1, - _playBlocked: !1, - _playRequested: !1, - adType: null, - VERSION: a, - reset: function() { - t.ads.disableNextSnapshotRestore = !1, t.ads._contentEnding = !1, t.ads._contentHasEnded = !1, t.ads.snapshot = null, t.ads.adType = null, t.ads._hasThereBeenALoadedData = !1, t.ads._hasThereBeenALoadedMetaData = !1, t.ads._cancelledPlay = !1, t.ads._shouldBlockPlay = !1, t.ads._playBlocked = !1, t.ads.nopreroll_ = !1, t.ads.nopostroll_ = !1, t.ads._playRequested = !1 - }, - startLinearAdMode: function() { - t.ads._state.startLinearAdMode() - }, - endLinearAdMode: function() { - t.ads._state.endLinearAdMode() - }, - skipLinearAdMode: function() { - t.ads._state.skipLinearAdMode() - }, - stitchedAds: function(t) { - return void 0 !== t && (e.log.warn("Using player.ads.stitchedAds() as a setter is deprecated, it should be set as an option upon initialization of contrib-ads."), this.settings.stitchedAds = !!t), this.settings.stitchedAds - }, - videoElementRecycled: function() { - if (t.ads.shouldPlayContentBehindAd(t)) return !1; - if (!this.snapshot) throw new Error("You cannot use videoElementRecycled while there is no snapshot."); - var e = t.tech_.src() !== this.snapshot.src, - n = t.currentSrc() !== this.snapshot.currentSrc; - return e || n - }, - isLive: function(n) { - return void 0 === n && (n = t), "boolean" == typeof n.ads.settings.contentIsLive ? n.ads.settings.contentIsLive : n.duration() === 1 / 0 || "8" === e.browser.IOS_VERSION && 0 === n.duration() - }, - shouldPlayContentBehindAd: function(n) { - if (void 0 === n && (n = t), n) return !!n.ads.settings.liveCuePoints && !e.browser.IS_IOS && !e.browser.IS_ANDROID && n.duration() === 1 / 0; - throw new Error("shouldPlayContentBehindAd requires a player as a param") - }, - shouldTakeSnapshots: function(e) { - return void 0 === e && (e = t), !this.shouldPlayContentBehindAd(e) && !this.stitchedAds() - }, - isInAdMode: function() { - return this._state.isAdState() - }, - isWaitingForAdBreak: function() { - return this._state.isWaitingForAdBreak() - }, - isContentResuming: function() { - return this._state.isContentResuming() - }, - isAdPlaying: function() { - return this._state.inAdBreak() - }, - inAdBreak: function() { - return this._state.inAdBreak() - }, - removeNativePoster: function() { - var e = t.$(".vjs-tech"); - e && e.removeAttribute("poster") - }, - debug: function() { - if (this.settings.debug) { - for (var t = arguments.length, n = new Array(t), a = 0; a < t; a++) n[a] = arguments[a]; - 1 === n.length && "string" == typeof n[0] ? e.log("ADS: " + n[0]) : e.log.apply(e, ["ADS:"].concat(n)) - } - } - } - }(r), r.ads.settings = i, i.stitchedAds = !!i.stitchedAds, i.stitchedAds ? r.ads._state = new(k.getState("StitchedContentPlayback"))(r) : r.ads._state = new(k.getState("BeforePreroll"))(r), r.ads._state.init(r), r.ads.cueTextTracks = g, r.ads.adMacroReplacement = function(a, o, r) { - var i = this, - s = {}; - a = a.replace(/{([^}=]+)=([^}]+)}/g, function(e, t, n) { - return s["{" + t + "}"] = n, "{" + t + "}" - }), void 0 === o && (o = !1); - var d = {}; - for (var l in void 0 !== r && (d = r), d["{player.id}"] = this.options_["data-player"] || this.id_, d["{player.height}"] = this.currentHeight(), d["{player.width}"] = this.currentWidth(), d["{mediainfo.id}"] = this.mediainfo ? this.mediainfo.id : "", d["{mediainfo.name}"] = this.mediainfo ? this.mediainfo.name : "", d["{mediainfo.duration}"] = this.mediainfo ? this.mediainfo.duration : "", d["{player.duration}"] = this.duration(), d["{player.pageUrl}"] = e.dom.isInFrame() ? n.referrer : t.location.href, d["{playlistinfo.id}"] = this.playlistinfo ? this.playlistinfo.id : "", d["{playlistinfo.name}"] = this.playlistinfo ? this.playlistinfo.name : "", d["{timestamp}"] = (new Date).getTime(), d["{document.referrer}"] = n.referrer, d["{window.location.href}"] = t.location.href, d["{random}"] = Math.floor(1e12 * Math.random()), ["description", "tags", "reference_id", "ad_keys"].forEach(function(e) { - i.mediainfo && i.mediainfo[e] ? d["{mediainfo." + e + "}"] = i.mediainfo[e] : s["{mediainfo." + e + "}"] ? d["{mediainfo." + e + "}"] = s["{mediainfo." + e + "}"] : d["{mediainfo." + e + "}"] = "" - }), p(this.mediainfo, d, "custom_fields"), p(this.mediainfo, d, "customFields"), Object.keys(c).forEach(function(e) { - d["{tcf." + e + "}"] = c[e] - }), d["{tcf.gdprAppliesInt}"] = c.gdprApplies ? 1 : 0, d) a = a.split(l).join(h(d[l], o)); - for (var u in a = a.replace(/{pageVariable\.([^}]+)}/g, function(n, a) { - for (var r, i = t, d = a.split("."), l = 0; l < d.length; l++) l === d.length - 1 ? r = i[d[l]] : i = i[d[l]]; - var u = typeof r; - return null === r ? "null" : void 0 === r ? s["{pageVariable." + a + "}"] ? s["{pageVariable." + a + "}"] : (e.log.warn('Page variable "' + a + '" not found'), "") : "string" !== u && "number" !== u && "boolean" !== u ? (e.log.warn('Page variable "' + a + '" is not a supported type'), "") : h(String(r), o) - }), s) a = a.replace(u, s[u]); - return a - }.bind(r), - function(e) { - e.ads.contentSrc = e.currentSrc(), e.ads._seenInitialLoadstart = !1, e.on("loadstart", function() { - if (!e.ads.inAdBreak()) { - var t = e.currentSrc(); - t !== e.ads.contentSrc && (e.ads._seenInitialLoadstart && e.trigger({ - type: "contentchanged" - }), e.trigger({ - type: "contentupdate", - oldValue: e.ads.contentSrc, - newValue: t - }), e.ads.contentSrc = t), e.ads._seenInitialLoadstart = !0 - } - }) - }(r), r.on("contentchanged", r.ads.reset); - var d = function() { - var t = r.textTracks(); - if (!r.ads.shouldPlayContentBehindAd(r) && r.ads.inAdBreak() && r.tech_.featuresNativeTextTracks && e.browser.IS_IOS && !Array.isArray(r.textTracks())) - for (var n = 0; n < t.length; n++) { - var a = t[n]; - "showing" === a.mode && (a.mode = "disabled") - } - }; - r.ready(function() { - r.textTracks().addEventListener("change", d) - }), r.on(["play", "playing", "ended", "adsready", "adscanceled", "adskip", "adserror", "adtimeout", "adended", "ads-ad-started", "contentchanged", "dispose", "contentresumed", "readyforpostroll", "nopreroll", "nopostroll"], function(e) { - r.ads._state.handleEvent(e.type) - }), r.on("dispose", function() { - r.ads.reset(), r.textTracks().removeEventListener("change", d) - }), f(), r.ads.listenToTcf = f - }; - return q.VERSION = a, - function(t) { - !b(e) && ((e.registerPlugin || e.plugin)("ads", t), P() && !e.usingContribAdsMiddleware_ && (e.use("*", _), e.usingContribAdsMiddleware_ = !0, e.log.debug("Play middleware has been registered with videojs"))) - }(q), q -}); -/*! @name @viostream/videojs-overlay @version v2.1.6-f.97-master @license Apache-2.0 */ -! function(t, e) { - "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).videojsOverlay = e(t.videojs) -}(this, (function(t) { - "use strict"; - - function e(t) { - return t && "object" == typeof t && "default" in t ? t : { - default: t - } - } - var n = e(t); - - function i(t, e, n) { - return t(n = { - path: e, - exports: {}, - require: function(t, e) { - return function() { - throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs") - }(null == e && n.path) - } - }, n.exports), n.exports - } - var o = i((function(t) { - t.exports = function(t) { - if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return t - }, t.exports.default = t.exports, t.exports.__esModule = !0 - })), - r = i((function(t) { - function e(n, i) { - return t.exports = e = Object.setPrototypeOf || function(t, e) { - return t.__proto__ = e, t - }, t.exports.default = t.exports, t.exports.__esModule = !0, e(n, i) - } - t.exports = e, t.exports.default = t.exports, t.exports.__esModule = !0 - })), - s = i((function(t) { - t.exports = function(t, e) { - t.prototype = Object.create(e.prototype), t.prototype.constructor = t, r(t, e) - }, t.exports.default = t.exports, t.exports.__esModule = !0 - })), - a = { - align: "top-left", - class: "", - content: "This overlay will show up while the video is playing", - debug: !1, - showBackground: !0, - attachToControlBar: !1, - overlays: [{ - start: "playing", - end: "paused" - }] - }, - h = n.default.getComponent("Component"), - d = n.default.dom || n.default, - l = n.default.registerPlugin || n.default.plugin, - u = function(t) { - return "number" == typeof t && t == t - }, - p = function(t) { - return "string" == typeof t && /^\S+$/.test(t) - }, - c = function(t) { - function e(n, i) { - var r; - return (r = t.call(this, n, i) || this).isVisible = !0, ["start", "end"].forEach((function(t) { - var e = r.options_[t]; - if (u(e)) r[t + "Event_"] = "timeupdate"; - else if (p(e)) r[t + "Event_"] = e; - else if ("start" === t) throw new Error('invalid "start" option; expected number or string') - })), ["endListener_", "rewindListener_", "startListener_"].forEach((function(t) { - r[t] = function(n) { - return e.prototype[t].call(o(r), n) - } - })), "timeupdate" === r.startEvent_ && r.on(n, "timeupdate", r.rewindListener_), r.debug('created, listening to "' + r.startEvent_ + '" for "start" and "' + (r.endEvent_ || "nothing") + '" for "end"'), r.hide(), r - } - s(e, t); - var i = e.prototype; - return i.createEl = function() { - var t = this.options_, - e = t.content, - n = t.showBackground ? "vjs-overlay-background" : "vjs-overlay-no-background", - i = d.createEl("div", { - className: "\n vjs-overlay\n vjs-overlay-" + t.align + "\n " + t.class + "\n " + n + "\n vjs-hidden\n " - }); - return "string" == typeof e ? i.innerHTML = e : e instanceof window.DocumentFragment ? i.appendChild(e) : d.appendContent(i, e), i - }, i.debug = function() { - if (this.options_.debug) { - for (var t = n.default.log, e = t, i = arguments.length, o = new Array(i), r = 0; r < i; r++) o[r] = arguments[r]; - t.hasOwnProperty(o[0]) && "function" == typeof t[o[0]] && (e = t[o.shift()]), e.apply(void 0, ["overlay#" + this.id() + ": "].concat(o)) - } - }, i.hide = function() { - if (!1 !== this.isVisible) return t.prototype.hide.call(this), this.isVisible = !1, this.debug("hidden"), this.debug('bound `startListener_` to "' + this.startEvent_ + '"'), u(this.options_.end) && (this.player().paused() || this.player().trigger("hide-overlay", { - id: this.options_.cta_id, - align: this.options_.align - })), this.endEvent_ && (this.debug('unbound `endListener_` from "' + this.endEvent_ + '"'), this.off(this.player(), this.endEvent_, this.endListener_)), this.on(this.player(), this.startEvent_, this.startListener_), this - }, i.shouldHide_ = function(t, e) { - var n = this.options_.end; - return u(n) ? t >= n : n === e - }, i.show = function() { - return t.prototype.show.call(this), this.isVisible = !0, this.off(this.player(), this.startEvent_, this.startListener_), this.debug("shown"), this.debug('unbound `startListener_` from "' + this.startEvent_ + '"'), u(this.options_.start) && (this.player().paused() && 0 !== this.options_.start || this.player().trigger("show-overlay", { - id: this.options_.cta_id, - align: this.options_.align - })), this.endEvent_ && (this.debug('bound `endListener_` to "' + this.endEvent_ + '"'), this.on(this.player(), this.endEvent_, this.endListener_)), this - }, i.shouldShow_ = function(t, e) { - var n = this.options_.start, - i = this.options_.end; - return u(n) ? u(i) ? t >= n && t < i : this.hasShownSinceSeek_ ? Math.floor(t) === n : (this.hasShownSinceSeek_ = !0, t >= n) : n === e - }, i.startListener_ = function(t) { - var e = this.player().currentTime(); - this.shouldShow_(e, t.type) && this.show() - }, i.endListener_ = function(t) { - var e = this.player().currentTime(); - this.shouldHide_(e, t.type) && this.hide() - }, i.rewindListener_ = function(t) { - var e = this.player().currentTime(), - n = this.previousTime_, - i = this.options_.start, - o = this.options_.end; - e < n && (this.debug("rewind detected"), u(o) && !this.shouldShow_(e) ? (this.debug("hiding; " + o + " is an integer and overlay should not show at this time"), this.hasShownSinceSeek_ = !1, this.hide()) : p(o) && e < i && (this.debug("hiding; show point (" + i + ") is before now (" + e + ") and end point (" + o + ") is an event"), this.hasShownSinceSeek_ = !1, this.hide())), this.previousTime_ = e - }, e - }(h); - n.default.registerComponent("Overlay", c); - var f = function(t) { - var e = this, - i = n.default.mergeOptions(a, t); - Array.isArray(this.overlays_) && this.overlays_.forEach((function(t) { - e.removeChild(t), e.controlBar && e.controlBar.removeChild(t), t.dispose() - })); - var o = i.overlays; - delete i.overlays, this.overlays_ = o.map((function(t) { - var o = n.default.mergeOptions(i, t), - r = "string" == typeof o.attachToControlBar || !0 === o.attachToControlBar; - if (!e.controls() || !e.controlBar) return e.addChild("overlay", o); - if (r && -1 !== o.align.indexOf("bottom")) { - var s = e.controlBar.children()[0]; - if (void 0 !== e.controlBar.getChild(o.attachToControlBar) && (s = e.controlBar.getChild(o.attachToControlBar)), s) { - var a = e.controlBar.children().indexOf(s); - return e.controlBar.addChild("overlay", o, a) - } - } - var h = e.addChild("overlay", o); - return e.el().insertBefore(h.el(), e.controlBar.el()), h - })) - }; - return f.VERSION = "v2.1.6-f.97-master", l("overlay", f), f -})); -/** - * videojs-share - * @version 3.2.1 - * @copyright 2019 Mikhail Khazov - * @license MIT - */ -! function(t, e) { - "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], e) : t.videojsShare = e(t.videojs) -}(this, function(t) { - "use strict"; - - function e(t, e) { - return e = { - exports: {} - }, t(e, e.exports), e.exports - } - - function n(t) { - var e; - if ("SELECT" === t.nodeName) t.focus(), e = t.value; - else if ("INPUT" === t.nodeName || "TEXTAREA" === t.nodeName) { - var n = t.hasAttribute("readonly"); - n || t.setAttribute("readonly", ""), t.select(), t.setSelectionRange(0, t.value.length), n || t.removeAttribute("readonly"), e = t.value - } else { - t.hasAttribute("contenteditable") && t.focus(); - var i = window.getSelection(), - o = document.createRange(); - o.selectNodeContents(t), i.removeAllRanges(), i.addRange(o), e = i.toString() - } - return e - } - - function i() {} - - function o(t, e) { - for (; t && t.nodeType !== G;) { - if ("function" == typeof t.matches && t.matches(e)) return t; - t = t.parentNode - } - } - - function r(t, e, n, i, o) { - var r = l.apply(this, arguments); - return t.addEventListener(n, r, o), { - destroy: function() { - t.removeEventListener(n, r, o) - } - } - } - - function a(t, e, n, i, o) { - return "function" == typeof t.addEventListener ? r.apply(null, arguments) : "function" == typeof n ? r.bind(null, document).apply(null, arguments) : ("string" == typeof t && (t = document.querySelectorAll(t)), Array.prototype.map.call(t, function(t) { - return r(t, e, n, i, o) - })) - } - - function l(t, e, n, i) { - return function(n) { - n.delegateTarget = K(n.target, e), n.delegateTarget && i.call(t, n) - } - } - - function s(t, e, n) { - if (!t && !e && !n) throw new Error("Missing required arguments"); - if (!X.string(e)) throw new TypeError("Second argument must be a String"); - if (!X.fn(n)) throw new TypeError("Third argument must be a Function"); - if (X.node(t)) return c(t, e, n); - if (X.nodeList(t)) return u(t, e, n); - if (X.string(t)) return h(t, e, n); - throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList") - } - - function c(t, e, n) { - return t.addEventListener(e, n), { - destroy: function() { - t.removeEventListener(e, n) - } - } - } - - function u(t, e, n) { - return Array.prototype.forEach.call(t, function(t) { - t.addEventListener(e, n) - }), { - destroy: function() { - Array.prototype.forEach.call(t, function(t) { - t.removeEventListener(e, n) - }) - } - } - } - - function h(t, e, n) { - return Q(document.body, t, e, n) - } - - function d(t) { - return Object.keys(t).filter(function(e) { - return void 0 !== t[e] && "" !== t[e] - }).map(function(e) { - return encodeURIComponent(e) + "=" + encodeURIComponent(t[e]) - }).join("&") - } - - function f() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.fbAppId, - n = t.url, - i = t.redirectUri; - if (!e) throw new Error("fbAppId is not defined"); - var o = d({ - app_id: e, - display: "popup", - redirect_uri: i, - link: n - }); - return window.open("https://www.facebook.com/dialog/feed?" + o, "_blank", tt) - } - - function p() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.fbAppId, - n = t.url, - i = t.hashtag, - o = t.redirectUri; - if (!e) throw new Error("fbAppId is not defined"); - var r = d({ - app_id: e, - display: "popup", - redirect_uri: o, - href: n, - hashtag: i - }); - return window.open("https://www.facebook.com/dialog/share?" + r, "_blank", tt) - } - - function v() { - var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).url; - if (!t) throw new Error("url is not defined"); - var e = d({ - kid_directed_site: "0", - sdk: "joey", - u: t, - display: "popup", - ref: "plugin", - src: "share_button" - }); - return window.open("https://www.facebook.com/sharer/sharer.php?" + e, "_blank", tt) - } - - function g() { - var t = d({ - url: (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).url - }); - return window.open("https://plus.google.com/share?" + t, "_blank", tt) - } - - function w() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = d({ - share_url: t.url, - title: t.title, - description: t.description, - imageurl: t.image - }); - return window.open("http://connect.mail.ru/share?" + e, "_blank", tt) - } - - function m() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.url, - n = t.title, - i = t.description, - o = (n || "") + "\r\n" + (i || "") + "\r\n" + (e || ""), - r = "mailto:?body=" + encodeURIComponent(o); - return window.location.assign(r) - } - - function y() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = d({ - "st.cmd": "addShare", - "st._surl": t.url, - title: t.title - }); - return window.open("https://ok.ru/dk?" + e, "_blank", tt) - } - - function b() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = d({ - url: t.url, - text: t.title - }); - return window.open("https://t.me/share/url?" + e, "_blank", tt) - } - - function k() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.title, - n = t.url, - i = t.hashtags, - o = d({ - text: e, - url: n, - hashtags: (void 0 === i ? [] : i).join(",") - }); - return window.open("https://twitter.com/intent/tweet?" + o, "_blank", tt) - } - - function _() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = d({ - url: t.url, - title: t.title - }); - return window.open("https://www.reddit.com/submit?" + e, "_blank", tt) - } - - function C() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.description, - n = d({ - url: t.url, - description: e, - media: t.media - }); - return window.open("https://pinterest.com/pin/create/button/?" + n, "_blank", tt) - } - - function x() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.url, - n = t.title, - i = t.caption, - o = t.tags, - r = void 0 === o ? [] : o, - a = t.posttype, - l = void 0 === a ? "link" : a, - s = d({ - canonicalUrl: e, - title: n, - caption: i, - tags: r.join(","), - posttype: l - }); - return window.open("https://www.tumblr.com/widgets/share/tool?" + s, "_blank", tt) - } - - function E() { - return !!window.navigator.userAgent.match(/Version\/[\d.]+.*Safari/) - } - - function S(t) { - return E() ? window.open(t) : window.location.assign(t) - } - - function j() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.url, - n = t.title; - if (!e && !n) throw new Error("url and title not specified"); - return S("viber://forward?" + d({ - text: [n, e].filter(function(t) { - return t - }).join(" ") - })) - } - - function F() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.url, - n = t.image, - i = t.isVkParse, - o = t.description, - r = t.title; - o && o.length > et && (o = o.substr(0, et) + "..."), r && r.length > et && (r = r.substr(0, et) + "..."); - return "https://vk.com/share.php?" + d(i ? { - url: e - } : { - url: e, - title: r, - description: o, - image: n, - noparse: !0 - }) - } - - function A() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; - return window.open(F(t), "_blank", tt) - } - - function T() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.phone, - n = d({ - text: [t.title, t.url].filter(function(t) { - return t - }).join(" "), - phone: e - }); - return window.open("https://api.whatsapp.com/send?" + n, "_blank", tt) - } - - function z() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.title, - n = t.url, - i = d({ - title: e, - summary: t.description, - url: n - }); - return window.open("https://www.linkedin.com/shareArticle?mini=true&" + i, "_blank", tt) - } - - function M() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.fbAppId, - n = t.url; - if (!e) throw new Error("fbAppId is not defined"); - var i = d({ - app_id: e, - link: n - }); - return window.location.assign("fb-messenger://share?" + i) - } - - function O() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.title, - n = t.url; - if (!n) throw new Error("url is not defined"); - var i = encodeURIComponent("" + n); - return e && (i = "" + encodeURIComponent(e + " ") + i), window.open("https://line.me/R/msg/text/?" + i, "_blank", tt) - } - - function L() { - return "ontouchstart" in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 - } - - function V() { - return /Android/.test(window.navigator.userAgent) || /iP(hone|ad|od)/i.test(window.navigator.userAgent) - } - - function H() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; - return !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1] ? V() ? t : t.filter(function(t) { - return !it.includes(t) - }) : t - } - t = t && t.hasOwnProperty("default") ? t.default : t; - var I = function() { - return "undefined" == typeof window ? "" : window.location.href - }(), - P = { - mobileVerification: !0, - title: "Video", - url: I, - socials: ["fbFeed", "tw", "reddit", "gp", "messenger", "linkedin", "vk", "ok", "mail", "email", "telegram", "whatsapp", "viber"], - embedCode: function() { - return "" - }(), - redirectUri: function() { - return I + "#close_window" - }() - }, - R = function(t, e) { - if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") - }, - U = function() { - function t(t, e) { - for (var n = 0; n < e.length; n++) { - var i = e[n]; - i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) - } - } - return function(e, n, i) { - return n && t(e.prototype, n), i && t(e, i), e - } - }(), - N = function(t, e) { - if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); - t.prototype = Object.create(e && e.prototype, { - constructor: { - value: t, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) - }, - B = function(t, e) { - if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !e || "object" != typeof e && "function" != typeof e ? t : e - }, - q = function(t) { - function e(n, i) { - R(this, e); - var o = B(this, t.call(this, n, i)); - return o.addClass("vjs-menu-button"), o.addClass("vjs-share-control"), o.addClass("vjs-icon-share"), o.controlText(n.localize("Share")), o - } - return N(e, t), e.prototype.handleClick = function() { - this.player().getChild("ShareOverlay").open() - }, e - }(t.getComponent("Button")), - D = ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self && self, n), - Y = e(function(t, e) { - ! function(e, n) { - n(t, D) - }(0, function(t, e) { - function n(t, e) { - if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") - } - var i = function(t) { - return t && t.__esModule ? t : { - default: t - } - }(e), - o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { - return typeof t - } : function(t) { - return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t - }, - r = function() { - function t(t, e) { - for (var n = 0; n < e.length; n++) { - var i = e[n]; - i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) - } - } - return function(e, n, i) { - return n && t(e.prototype, n), i && t(e, i), e - } - }(), - a = function() { - function t(e) { - n(this, t), this.resolveOptions(e), this.initSelection() - } - return r(t, [{ - key: "resolveOptions", - value: function() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; - this.action = t.action, this.container = t.container, this.emitter = t.emitter, this.target = t.target, this.text = t.text, this.trigger = t.trigger, this.selectedText = "" - } - }, { - key: "initSelection", - value: function() { - this.text ? this.selectFake() : this.target && this.selectTarget() - } - }, { - key: "selectFake", - value: function() { - var t = this, - e = "rtl" == document.documentElement.getAttribute("dir"); - this.removeFake(), this.fakeHandlerCallback = function() { - return t.removeFake() - }, this.fakeHandler = this.container.addEventListener("click", this.fakeHandlerCallback) || !0, this.fakeElem = document.createElement("textarea"), this.fakeElem.style.fontSize = "12pt", this.fakeElem.style.border = "0", this.fakeElem.style.padding = "0", this.fakeElem.style.margin = "0", this.fakeElem.style.position = "absolute", this.fakeElem.style[e ? "right" : "left"] = "-9999px"; - var n = window.pageYOffset || document.documentElement.scrollTop; - this.fakeElem.style.top = n + "px", this.fakeElem.setAttribute("readonly", ""), this.fakeElem.value = this.text, this.container.appendChild(this.fakeElem), this.selectedText = (0, i.default)(this.fakeElem), this.copyText() - } - }, { - key: "removeFake", - value: function() { - this.fakeHandler && (this.container.removeEventListener("click", this.fakeHandlerCallback), this.fakeHandler = null, this.fakeHandlerCallback = null), this.fakeElem && (this.container.removeChild(this.fakeElem), this.fakeElem = null) - } - }, { - key: "selectTarget", - value: function() { - this.selectedText = (0, i.default)(this.target), this.copyText() - } - }, { - key: "copyText", - value: function() { - var t = void 0; - try { - t = document.execCommand(this.action) - } catch (e) { - t = !1 - } - this.handleResult(t) - } - }, { - key: "handleResult", - value: function(t) { - this.emitter.emit(t ? "success" : "error", { - action: this.action, - text: this.selectedText, - trigger: this.trigger, - clearSelection: this.clearSelection.bind(this) - }) - } - }, { - key: "clearSelection", - value: function() { - this.trigger && this.trigger.focus(), window.getSelection().removeAllRanges() - } - }, { - key: "destroy", - value: function() { - this.removeFake() - } - }, { - key: "action", - set: function() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "copy"; - if (this._action = t, "copy" !== this._action && "cut" !== this._action) throw new Error('Invalid "action" value, use either "copy" or "cut"') - }, - get: function() { - return this._action - } - }, { - key: "target", - set: function(t) { - if (void 0 !== t) { - if (!t || "object" !== (void 0 === t ? "undefined" : o(t)) || 1 !== t.nodeType) throw new Error('Invalid "target" value, use a valid Element'); - if ("copy" === this.action && t.hasAttribute("disabled")) throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'); - if ("cut" === this.action && (t.hasAttribute("readonly") || t.hasAttribute("disabled"))) throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes'); - this._target = t - } - }, - get: function() { - return this._target - } - }]), t - }(); - t.exports = a - }) - }); - i.prototype = { - on: function(t, e, n) { - var i = this.e || (this.e = {}); - return (i[t] || (i[t] = [])).push({ - fn: e, - ctx: n - }), this - }, - once: function(t, e, n) { - function i() { - o.off(t, i), e.apply(n, arguments) - } - var o = this; - return i._ = e, this.on(t, i, n) - }, - emit: function(t) { - var e = [].slice.call(arguments, 1), - n = ((this.e || (this.e = {}))[t] || []).slice(), - i = 0, - o = n.length; - for (i; i < o; i++) n[i].fn.apply(n[i].ctx, e); - return this - }, - off: function(t, e) { - var n = this.e || (this.e = {}), - i = n[t], - o = []; - if (i && e) - for (var r = 0, a = i.length; r < a; r++) i[r].fn !== e && i[r].fn._ !== e && o.push(i[r]); - return o.length ? n[t] = o : delete n[t], this - } - }; - var W = i, - X = e(function(t, e) { - e.node = function(t) { - return void 0 !== t && t instanceof HTMLElement && 1 === t.nodeType - }, e.nodeList = function(t) { - var n = Object.prototype.toString.call(t); - return void 0 !== t && ("[object NodeList]" === n || "[object HTMLCollection]" === n) && "length" in t && (0 === t.length || e.node(t[0])) - }, e.string = function(t) { - return "string" == typeof t || t instanceof String - }, e.fn = function(t) { - return "[object Function]" === Object.prototype.toString.call(t) - } - }), - G = 9; - if ("undefined" != typeof Element && !Element.prototype.matches) { - var J = Element.prototype; - J.matches = J.matchesSelector || J.mozMatchesSelector || J.msMatchesSelector || J.oMatchesSelector || J.webkitMatchesSelector - } - var K = o, - Q = a, - Z = s, - $ = function(t) { - return t && t.__esModule ? t.default : t - }(e(function(t, e) { - ! function(e, n) { - n(t, Y, W, Z) - }(0, function(t, e, n, i) { - function o(t) { - return t && t.__esModule ? t : { - default: t - } - } - - function r(t, e) { - if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") - } - - function a(t, e) { - if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !e || "object" != typeof e && "function" != typeof e ? t : e - } - - function l(t, e) { - if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); - t.prototype = Object.create(e && e.prototype, { - constructor: { - value: t, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) - } - - function s(t, e) { - var n = "data-clipboard-" + t; - if (e.hasAttribute(n)) return e.getAttribute(n) - } - var c = o(e), - u = o(n), - h = o(i), - d = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { - return typeof t - } : function(t) { - return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t - }, - f = function() { - function t(t, e) { - for (var n = 0; n < e.length; n++) { - var i = e[n]; - i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) - } - } - return function(e, n, i) { - return n && t(e.prototype, n), i && t(e, i), e - } - }(), - p = function(t) { - function e(t, n) { - r(this, e); - var i = a(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this)); - return i.resolveOptions(n), i.listenClick(t), i - } - return l(e, t), f(e, [{ - key: "resolveOptions", - value: function() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; - this.action = "function" == typeof t.action ? t.action : this.defaultAction, this.target = "function" == typeof t.target ? t.target : this.defaultTarget, this.text = "function" == typeof t.text ? t.text : this.defaultText, this.container = "object" === d(t.container) ? t.container : document.body - } - }, { - key: "listenClick", - value: function(t) { - var e = this; - this.listener = (0, h.default)(t, "click", function(t) { - return e.onClick(t) - }) - } - }, { - key: "onClick", - value: function(t) { - var e = t.delegateTarget || t.currentTarget; - this.clipboardAction && (this.clipboardAction = null), this.clipboardAction = new c.default({ - action: this.action(e), - target: this.target(e), - text: this.text(e), - container: this.container, - trigger: e, - emitter: this - }) - } - }, { - key: "defaultAction", - value: function(t) { - return s("action", t) - } - }, { - key: "defaultTarget", - value: function(t) { - var e = s("target", t); - if (e) return document.querySelector(e) - } - }, { - key: "defaultText", - value: function(t) { - return s("text", t) - } - }, { - key: "destroy", - value: function() { - this.listener.destroy(), this.clipboardAction && (this.clipboardAction.destroy(), this.clipboardAction = null) - } - }], [{ - key: "isSupported", - value: function() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : ["copy", "cut"], - e = "string" == typeof t ? [t] : t, - n = !!document.queryCommandSupported; - return e.forEach(function(t) { - n = n && !!document.queryCommandSupported(t) - }), n - } - }]), e - }(u.default); - t.exports = p - }) - })), - tt = "scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0", - et = 80, - nt = (Object.freeze || Object)({ - fbFeed: f, - fbShare: p, - fbButton: v, - gp: g, - mail: w, - email: m, - ok: y, - telegram: b, - tw: k, - reddit: _, - pinterest: C, - tumblr: x, - viber: j, - getVkUrl: F, - vk: A, - whatsapp: T, - linkedin: z, - messenger: M, - line: O - }), - it = ["whatsapp", "viber", "messenger"], - ot = { - fbFeed: '\n \n\n', - tw: '\n \n\n', - reddit: '\n \n\n', - gp: '\n \n\n', - messenger: '\n \n \n\n', - linkedin: '\n \n\n', - vk: '\n \n\n', - ok: '\n \n\n', - mail: '\n \n\n', - email: '\n \n\n', - telegram: '\n \n\n', - whatsapp: '\n \n\n', - viber: '\n \n\n' - }, - rt = function() { - function t(e, n) { - R(this, t), this.player = e, this.options = n, this.socials = H(n.socials, n.mobileVerification), this.copyBtnTextClass = "vjs-share__btn-text", this.socialBtnClass = "vjs-share__social", this._createContent(), this._initToggle(), this._initClipboard(), this._initSharing() - } - return t.prototype.getContent = function() { - return this.content - }, t.prototype._createContent = function() { - var t = '\n \n \n \n ' + this.player.localize("Copy") + "\n ", - e = document.createElement("div"), - n = ""; - this.options.embedCode && (n = '\n \n "), e.innerHTML = '
\n \n\n
\n \n \n\n " + n + '\n
\n\n
\n
\n ' + this._getSocialItems().join("") + "\n
\n
\n
", this.content = e.firstChild - }, t.prototype._initClipboard = function() { - var t = this; - new $(".vjs-share__btn", { - target: function(t) { - return t.previousElementSibling - } - }).on("success", function(e) { - var n = e.trigger.querySelector("." + t.copyBtnTextClass), - i = function() { - n.innerText = t.player.localize("Copy"), e.clearSelection() - }; - n.innerText = t.player.localize("Copied"), L() ? setTimeout(i, 1e3) : n.parentElement.addEventListener("mouseleave", function() { - setTimeout(i, 300) - }) - }) - }, t.prototype._initSharing = function() { - var t = this, - e = this.content.querySelectorAll("." + this.socialBtnClass); - Array.from(e).forEach(function(e) { - e.addEventListener("click", function(e) { - var n = e.currentTarget.getAttribute("data-social"), - i = nt[n]; - "function" == typeof i && i(t.socialOptions) - }) - }) - }, t.prototype._initToggle = function() { - var t = this.content.querySelector(".vjs-share__socials"); - this.socials.length > 10 || window.innerWidth <= 180 && this.socials.length > 6 ? t.style.height = "calc((2em + 5px) * 2)" : t.classList.add("horizontal") - }, t.prototype._getSocialItems = function() { - var t = []; - return this.socials.forEach(function(e) { - ot[e] && t.push('\n \n ") - }), t - }, U(t, [{ - key: "socialOptions", - get: function() { - var t = this.options; - return { - url: t.url, - title: t.title, - description: t.description, - image: t.image, - fbAppId: t.fbAppId, - isVkParse: t.isVkParse, - redirectUri: t.redirectUri - } - } - }]), t - }(), - at = function(t) { - function e(n, i) { - R(this, e); - var o = B(this, t.call(this, n, i)); - return o.playerClassName = "vjs-videojs-share_open", o - } - return N(e, t), e.prototype.open = function() { - var e = this.player(); - e.addClass(this.playerClassName), t.prototype.open.call(this), e.trigger("sharing:opened") - }, e.prototype.close = function() { - var e = this.player(); - e.removeClass(this.playerClassName), t.prototype.close.call(this), e.trigger("sharing:closed") - }, e - }(t.getComponent("ModalDialog")), - lt = function(t) { - function e(n, i) { - R(this, e); - var o = B(this, t.call(this, n, i)); - return o.player = n, o.options = i, o - } - return N(e, t), e.prototype._createModal = function() { - var t = new rt(this.player, this.options).getContent(); - this.modal = new at(this.player, { - content: t, - temporary: !0 - }), this.el = this.modal.contentEl(), this.player.addChild(this.modal) - }, e.prototype.open = function() { - this._createModal(), this.modal.open() - }, e - }(t.getComponent("Component")), - st = function(e) { - function n(i, o) { - R(this, n); - var r = B(this, e.call(this, i)); - return r.options = t.mergeOptions(P, o), r.player.ready(function() { - r.player.addClass("vjs-share"), i.addClass("vjs-videojs-share"), i.getChild("controlBar").addChild("ShareButton", o), i.addChild("ShareOverlay", o) - }), r - } - return N(n, e), n - }(t.getPlugin("plugin")); - return st.defaultState = {}, st.VERSION = "3.2.1", t.registerComponent("ShareButton", q), t.registerComponent("ShareOverlay", lt), t.registerPlugin("share", st), st -}); -/** - * videojs-watermark - * @version 2.0.0 - * @copyright 2017 Brooks Lyrette - * @license Apache-2.0 - */ -! function(e) { - if ("object" == typeof exports && "undefined" != typeof module) module.exports = e(); - else if ("function" == typeof define && define.amd) define([], e); - else { - var n; - n = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, n.videojsWatermark = e() - } -}(function() { - return function e(n, t, i) { - function o(d, a) { - if (!t[d]) { - if (!n[d]) { - var f = "function" == typeof require && require; - if (!a && f) return f(d, !0); - if (r) return r(d, !0); - var u = new Error("Cannot find module '" + d + "'"); - throw u.code = "MODULE_NOT_FOUND", u - } - var l = t[d] = { - exports: {} - }; - n[d][0].call(l.exports, function(e) { - var t = n[d][1][e]; - return o(t || e) - }, l, l.exports, e, n, t, i) - } - return t[d].exports - } - for (var r = "function" == typeof require && require, d = 0; d < i.length; d++) o(i[d]); - return o - }({ - 1: [function(e, n, t) { - (function(e) { - "use strict"; - Object.defineProperty(t, "__esModule", { - value: !0 - }); - var i = "undefined" != typeof window ? window.videojs : void 0 !== e ? e.videojs : null, - o = function(e) { - return e && e.__esModule ? e : { - default: e - } - }(i), - r = { - position: "top-right", - fadeTime: 3e3, - url: void 0, - image: void 0 - }, - d = function(e, n) { - var t = e.el(), - i = document.createElement("div"), - o = document.createElement("img"); - if (i.classList.add("vjs-watermark-content"), i.classList.add("vjs-watermark-" + n.position), o.src = n.image, n.url) { - var r = document.createElement("a"); - r.href = n.url, r.onclick = function(t) { - t.preventDefault(), e.pause(), window.open(n.url) - }, r.appendChild(o), i.appendChild(r) - } else i.appendChild(o); - t.appendChild(i) - }, - a = function(e) { - setTimeout(function() { - return document.getElementsByClassName("vjs-watermark-content")[0].classList.add("vjs-watermark-fade") - }, e.fadeTime) - }, - f = function(e, n) { - e.addClass("vjs-watermark"), n.image && (d(e, n), null !== n.fadeTime && e.on("play", function() { - return a(n) - })) - }, - u = function(e) { - var n = this; - this.ready(function() { - f(n, o.default.mergeOptions(r, e)) - }) - }; - o.default.registerPlugin("watermark", u), u.VERSION = "2.0.0", t.default = u, n.exports = t.default - }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}) - }, {}] - }, {}, [1])(1) -}); -/*! @name videojs-vr @version 1.10.1 @license MIT */ -! function(t, e) { - "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("global/window"), require("global/document"), require("video.js")) : "function" == typeof define && define.amd ? define(["global/window", "global/document", "video.js"], e) : (t = t || self).videojsVr = e(t.window, t.document, t.videojs) -}(this, (function(t, e, n) { - "use strict"; - t = t && t.hasOwnProperty("default") ? t.default : t, e = e && e.hasOwnProperty("default") ? e.default : e, n = n && n.hasOwnProperty("default") ? n.default : n; - var i = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; - - function r(t) { - return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t - } - - function o(t, e) { - return t(e = { - exports: {} - }, e.exports), e.exports - } - var s = r(o((function(t) { - t.exports = function(t) { - if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return t - }, t.exports.default = t.exports, t.exports.__esModule = !0 - }))), - a = o((function(t) { - function e(n, i) { - return t.exports = e = Object.setPrototypeOf || function(t, e) { - return t.__proto__ = e, t - }, t.exports.default = t.exports, t.exports.__esModule = !0, e(n, i) - } - t.exports = e, t.exports.default = t.exports, t.exports.__esModule = !0 - })); - r(a); - var l = r(o((function(t) { - t.exports = function(t, e) { - t.prototype = Object.create(e.prototype), t.prototype.constructor = t, a(t, e) - }, t.exports.default = t.exports, t.exports.__esModule = !0 - }))), - c = r(o((function(t, e) { - /** - * @license - * webvr-polyfill - * Copyright (c) 2015-2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** - * @license - * cardboard-vr-display - * Copyright (c) 2015-2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** - * @license - * webvr-polyfill-dpdb - * Copyright (c) 2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** - * @license - * wglu-preserve-state - * Copyright (c) 2016, Brandon Jones. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - /** - * @license - * nosleep.js - * Copyright (c) 2017, Rich Tibbett - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - t.exports = function() { - var t, e = "undefined" != typeof window ? window : void 0 !== i ? i : "undefined" != typeof self ? self : {}, - n = function() { - return /Android/i.test(navigator.userAgent) || /iPhone|iPad|iPod/i.test(navigator.userAgent) - }, - r = function(t, e) { - for (var n = 0, i = t.length; n < i; n++) e[n] = t[n] - }, - o = function(t, e) { - for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]); - return t - }, - s = (t = function(t, e) { - return t(e = { - exports: {} - }, e.exports), e.exports - }((function(t, n) { - /** - * @license - * cardboard-vr-display - * Copyright (c) 2015-2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** - * @license - * gl-preserve-state - * Copyright (c) 2016, Brandon Jones. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - /** - * @license - * webvr-polyfill-dpdb - * Copyright (c) 2015-2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** - * @license - * nosleep.js - * Copyright (c) 2017, Rich Tibbett - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - t.exports = function() { - var t, n, i, r = function() { - function t(t, e) { - for (var n = 0; n < e.length; n++) { - var i = e[n]; - i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) - } - } - return function(e, n, i) { - return n && t(e.prototype, n), i && t(e, i), e - } - }(), - o = function(t, e) { - if (Array.isArray(t)) return t; - if (Symbol.iterator in Object(t)) return function(t, e) { - var n = [], - i = !0, - r = !1, - o = void 0; - try { - for (var s, a = t[Symbol.iterator](); !(i = (s = a.next()).done) && (n.push(s.value), !e || n.length !== e); i = !0); - } catch (t) { - r = !0, o = t - } finally { - try { - !i && a.return && a.return() - } finally { - if (r) throw o - } - } - return n - }(t, e); - throw new TypeError("Invalid attempt to destructure non-iterable instance") - }, - s = function(t, e, n) { - return t + (e - t) * n - }, - a = function() { - var t = /iPad|iPhone|iPod/.test(navigator.platform); - return function() { - return t - } - }(), - l = function() { - var t = -1 !== navigator.userAgent.indexOf("Version") && -1 !== navigator.userAgent.indexOf("Android") && -1 !== navigator.userAgent.indexOf("Chrome"); - return function() { - return t - } - }(), - c = function() { - var t = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - return function() { - return t - } - }(), - h = function() { - var t = -1 !== navigator.userAgent.indexOf("Firefox") && -1 !== navigator.userAgent.indexOf("Android"); - return function() { - return t - } - }(), - u = (n = navigator.userAgent.match(/.*Chrome\/([0-9]+)/), i = n ? parseInt(n[1], 10) : null, function() { - return i - }), - d = function() { - var t; - return t = a() && c() && -1 !== navigator.userAgent.indexOf("13_4"), - function() { - return t - } - }(), - p = function() { - var t = !1; - if (65 === u()) { - var e = navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/); - if (e) { - var n = e[1].split("."), - i = o(n, 4), - r = (i[0], i[1], i[2]), - s = i[3]; - t = 3325 === parseInt(r, 10) && parseInt(s, 10) < 148 - } - } - return function() { - return t - } - }(), - f = function() { - var t = -1 !== navigator.userAgent.indexOf("R7 Build"); - return function() { - return t - } - }(), - m = function() { - var t = 90 == window.orientation || -90 == window.orientation; - return f() ? !t : t - }, - g = function() { - return Math.max(window.screen.width, window.screen.height) * window.devicePixelRatio - }, - v = function() { - return Math.min(window.screen.width, window.screen.height) * window.devicePixelRatio - }, - y = function() { - if (document.exitFullscreen) document.exitFullscreen(); - else if (document.webkitExitFullscreen) document.webkitExitFullscreen(); - else if (document.mozCancelFullScreen) document.mozCancelFullScreen(); - else { - if (!document.msExitFullscreen) return !1; - document.msExitFullscreen() - } - return !0 - }, - A = function(t, e, n, i) { - var r = t.createShader(t.VERTEX_SHADER); - t.shaderSource(r, e), t.compileShader(r); - var o = t.createShader(t.FRAGMENT_SHADER); - t.shaderSource(o, n), t.compileShader(o); - var s = t.createProgram(); - for (var a in t.attachShader(s, r), t.attachShader(s, o), i) t.bindAttribLocation(s, i[a], a); - return t.linkProgram(s), t.deleteShader(r), t.deleteShader(o), s - }, - x = function(t, e) { - for (var n = {}, i = t.getProgramParameter(e, t.ACTIVE_UNIFORMS), r = "", o = 0; o < i; o++) n[r = t.getActiveUniform(e, o).name.replace("[0]", "")] = t.getUniformLocation(e, r); - return n - }, - _ = function() { - var t, e = !1; - return t = navigator.userAgent || navigator.vendor || window.opera, (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0, 4))) && (e = !0), e - }, - b = function(t, e) { - for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]); - return t - }, - w = function(t) { - if (a()) { - var e = t.style.width, - n = t.style.height; - t.style.width = parseInt(e) + 1 + "px", t.style.height = parseInt(n) + "px", setTimeout((function() { - t.style.width = e, t.style.height = n - }), 100) - } - window.canvas = t - }, - M = function() { - var t = Math.PI / 180, - e = .25 * Math.PI, - n = new Float32Array([0, 0, 0, 1]), - i = new Float32Array([0, 0, 0]); - - function r(r, o, s, a, l, c) { - ! function(n, i, r, o) { - var s = Math.tan(i ? i.upDegrees * t : e), - a = Math.tan(i ? i.downDegrees * t : e), - l = Math.tan(i ? i.leftDegrees * t : e), - c = Math.tan(i ? i.rightDegrees * t : e), - h = 2 / (l + c), - u = 2 / (s + a); - n[0] = h, n[1] = 0, n[2] = 0, n[3] = 0, n[4] = 0, n[5] = u, n[6] = 0, n[7] = 0, n[8] = -(l - c) * h * .5, n[9] = (s - a) * u * .5, n[10] = o / (r - o), n[11] = -1, n[12] = 0, n[13] = 0, n[14] = o * r / (r - o), n[15] = 0 - }(r, a || null, c.depthNear, c.depthFar); - var h, u, d, p, f, m, g, v, y, A, x, _, b, w, M, E, S, T, L, R = s.orientation || n, - C = s.position || i; - h = o, d = C, p = (u = R)[0], f = u[1], m = u[2], g = u[3], x = p * (v = p + p), _ = p * (y = f + f), b = p * (A = m + m), w = f * y, M = f * A, E = m * A, S = g * v, T = g * y, L = g * A, h[0] = 1 - (w + E), h[1] = _ + L, h[2] = b - T, h[3] = 0, h[4] = _ - L, h[5] = 1 - (x + E), h[6] = M + S, h[7] = 0, h[8] = b + T, h[9] = M - S, h[10] = 1 - (x + w), h[11] = 0, h[12] = d[0], h[13] = d[1], h[14] = d[2], h[15] = 1, l && function(t, e, n) { - var i, r, o, s, a, l, c, h, u, d, p, f, m = n[0], - g = n[1], - v = n[2]; - e === t ? (t[12] = e[0] * m + e[4] * g + e[8] * v + e[12], t[13] = e[1] * m + e[5] * g + e[9] * v + e[13], t[14] = e[2] * m + e[6] * g + e[10] * v + e[14], t[15] = e[3] * m + e[7] * g + e[11] * v + e[15]) : (i = e[0], r = e[1], o = e[2], s = e[3], a = e[4], l = e[5], c = e[6], h = e[7], u = e[8], d = e[9], p = e[10], f = e[11], t[0] = i, t[1] = r, t[2] = o, t[3] = s, t[4] = a, t[5] = l, t[6] = c, t[7] = h, t[8] = u, t[9] = d, t[10] = p, t[11] = f, t[12] = i * m + a * g + u * v + e[12], t[13] = r * m + l * g + d * v + e[13], t[14] = o * m + c * g + p * v + e[14], t[15] = s * m + h * g + f * v + e[15]) - }(o, o, l), - function(t, e) { - var n = e[0], - i = e[1], - r = e[2], - o = e[3], - s = e[4], - a = e[5], - l = e[6], - c = e[7], - h = e[8], - u = e[9], - d = e[10], - p = e[11], - f = e[12], - m = e[13], - g = e[14], - v = e[15], - y = n * a - i * s, - A = n * l - r * s, - x = n * c - o * s, - _ = i * l - r * a, - b = i * c - o * a, - w = r * c - o * l, - M = h * m - u * f, - E = h * g - d * f, - S = h * v - p * f, - T = u * g - d * m, - L = u * v - p * m, - R = d * v - p * g, - C = y * R - A * L + x * T + _ * S - b * E + w * M; - C && (C = 1 / C, t[0] = (a * R - l * L + c * T) * C, t[1] = (r * L - i * R - o * T) * C, t[2] = (m * w - g * b + v * _) * C, t[3] = (d * b - u * w - p * _) * C, t[4] = (l * S - s * R - c * E) * C, t[5] = (n * R - r * S + o * E) * C, t[6] = (g * x - f * w - v * A) * C, t[7] = (h * w - d * x + p * A) * C, t[8] = (s * L - a * S + c * M) * C, t[9] = (i * S - n * L - o * M) * C, t[10] = (f * b - m * x + v * y) * C, t[11] = (u * x - h * b - p * y) * C, t[12] = (a * E - s * T - l * M) * C, t[13] = (n * T - i * E + r * M) * C, t[14] = (m * A - f * _ - g * y) * C, t[15] = (h * _ - u * A + d * y) * C) - }(o, o) - } - return function(t, e, n) { - return !(!t || !e || (t.pose = e, t.timestamp = e.timestamp, r(t.leftProjectionMatrix, t.leftViewMatrix, e, n._getFieldOfView("left"), n._getEyeOffset("left"), n), r(t.rightProjectionMatrix, t.rightViewMatrix, e, n._getFieldOfView("right"), n._getEyeOffset("right"), n), 0)) - } - }(), - E = function(t) { - var e, n = t.indexOf("://"); - e = -1 !== n ? n + 3 : 0; - var i = t.indexOf("/", e); - return -1 === i && (i = t.length), t.substring(0, i) - }, - S = (t = {}, function(e, n) { - void 0 === t[e] && (console.warn("webvr-polyfill: " + n), t[e] = !0) - }), - T = function(t, e) { - S(t, t + " has been deprecated. This may not work on native WebVR displays. " + (e ? "Please use " + e + " instead." : "")) - }, - L = function(t, e, n) { - if (e) { - for (var i = [], r = null, o = 0; o < e.length; ++o) switch (s = e[o]) { - case t.TEXTURE_BINDING_2D: - case t.TEXTURE_BINDING_CUBE_MAP: - if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) { - console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"), i.push(null, null); - break - } - r || (r = t.getParameter(t.ACTIVE_TEXTURE)), t.activeTexture(l), i.push(t.getParameter(s), null); - break; - case t.ACTIVE_TEXTURE: - r = t.getParameter(t.ACTIVE_TEXTURE), i.push(null); - break; - default: - i.push(t.getParameter(s)) - } - for (n(t), o = 0; o < e.length; ++o) { - var s = e[o], - a = i[o]; - switch (s) { - case t.ACTIVE_TEXTURE: - break; - case t.ARRAY_BUFFER_BINDING: - t.bindBuffer(t.ARRAY_BUFFER, a); - break; - case t.COLOR_CLEAR_VALUE: - t.clearColor(a[0], a[1], a[2], a[3]); - break; - case t.COLOR_WRITEMASK: - t.colorMask(a[0], a[1], a[2], a[3]); - break; - case t.CURRENT_PROGRAM: - t.useProgram(a); - break; - case t.ELEMENT_ARRAY_BUFFER_BINDING: - t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, a); - break; - case t.FRAMEBUFFER_BINDING: - t.bindFramebuffer(t.FRAMEBUFFER, a); - break; - case t.RENDERBUFFER_BINDING: - t.bindRenderbuffer(t.RENDERBUFFER, a); - break; - case t.TEXTURE_BINDING_2D: - if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) break; - t.activeTexture(l), t.bindTexture(t.TEXTURE_2D, a); - break; - case t.TEXTURE_BINDING_CUBE_MAP: - var l; - if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) break; - t.activeTexture(l), t.bindTexture(t.TEXTURE_CUBE_MAP, a); - break; - case t.VIEWPORT: - t.viewport(a[0], a[1], a[2], a[3]); - break; - case t.BLEND: - case t.CULL_FACE: - case t.DEPTH_TEST: - case t.SCISSOR_TEST: - case t.STENCIL_TEST: - a ? t.enable(s) : t.disable(s); - break; - default: - console.log("No GL restore behavior for 0x" + s.toString(16)) - } - r && t.activeTexture(r) - } - } else n(t) - }, - R = ["attribute vec2 position;", "attribute vec3 texCoord;", "varying vec2 vTexCoord;", "uniform vec4 viewportOffsetScale[2];", "void main() {", " vec4 viewport = viewportOffsetScale[int(texCoord.z)];", " vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;", " gl_Position = vec4( position, 1.0, 1.0 );", "}"].join("\n"), - C = ["precision mediump float;", "uniform sampler2D diffuse;", "varying vec2 vTexCoord;", "void main() {", " gl_FragColor = texture2D(diffuse, vTexCoord);", "}"].join("\n"); - - function P(t, e, n, i) { - this.gl = t, this.cardboardUI = e, this.bufferScale = n, this.dirtySubmitFrameBindings = i, this.ctxAttribs = t.getContextAttributes(), this.instanceExt = t.getExtension("ANGLE_instanced_arrays"), this.meshWidth = 20, this.meshHeight = 20, this.bufferWidth = t.drawingBufferWidth, this.bufferHeight = t.drawingBufferHeight, this.realBindFramebuffer = t.bindFramebuffer, this.realEnable = t.enable, this.realDisable = t.disable, this.realColorMask = t.colorMask, this.realClearColor = t.clearColor, this.realViewport = t.viewport, a() || (this.realCanvasWidth = Object.getOwnPropertyDescriptor(t.canvas.__proto__, "width"), this.realCanvasHeight = Object.getOwnPropertyDescriptor(t.canvas.__proto__, "height")), this.isPatched = !1, this.lastBoundFramebuffer = null, this.cullFace = !1, this.depthTest = !1, this.blend = !1, this.scissorTest = !1, this.stencilTest = !1, this.viewport = [0, 0, 0, 0], this.colorMask = [!0, !0, !0, !0], this.clearColor = [0, 0, 0, 0], this.attribs = { - position: 0, - texCoord: 1 - }, this.program = A(t, R, C, this.attribs), this.uniforms = x(t, this.program), this.viewportOffsetScale = new Float32Array(8), this.setTextureBounds(), this.vertexBuffer = t.createBuffer(), this.indexBuffer = t.createBuffer(), this.indexCount = 0, this.renderTarget = t.createTexture(), this.framebuffer = t.createFramebuffer(), this.depthStencilBuffer = null, this.depthBuffer = null, this.stencilBuffer = null, this.ctxAttribs.depth && this.ctxAttribs.stencil ? this.depthStencilBuffer = t.createRenderbuffer() : this.ctxAttribs.depth ? this.depthBuffer = t.createRenderbuffer() : this.ctxAttribs.stencil && (this.stencilBuffer = t.createRenderbuffer()), this.patch(), this.onResize() - } - P.prototype.destroy = function() { - var t = this.gl; - this.unpatch(), t.deleteProgram(this.program), t.deleteBuffer(this.vertexBuffer), t.deleteBuffer(this.indexBuffer), t.deleteTexture(this.renderTarget), t.deleteFramebuffer(this.framebuffer), this.depthStencilBuffer && t.deleteRenderbuffer(this.depthStencilBuffer), this.depthBuffer && t.deleteRenderbuffer(this.depthBuffer), this.stencilBuffer && t.deleteRenderbuffer(this.stencilBuffer), this.cardboardUI && this.cardboardUI.destroy() - }, P.prototype.onResize = function() { - var t = this.gl, - e = this, - n = [t.RENDERBUFFER_BINDING, t.TEXTURE_BINDING_2D, t.TEXTURE0]; - L(t, n, (function(t) { - e.realBindFramebuffer.call(t, t.FRAMEBUFFER, null), e.scissorTest && e.realDisable.call(t, t.SCISSOR_TEST), e.realColorMask.call(t, !0, !0, !0, !0), e.realViewport.call(t, 0, 0, t.drawingBufferWidth, t.drawingBufferHeight), e.realClearColor.call(t, 0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT), e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.framebuffer), t.bindTexture(t.TEXTURE_2D, e.renderTarget), t.texImage2D(t.TEXTURE_2D, 0, e.ctxAttribs.alpha ? t.RGBA : t.RGB, e.bufferWidth, e.bufferHeight, 0, e.ctxAttribs.alpha ? t.RGBA : t.RGB, t.UNSIGNED_BYTE, null), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE), t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, e.renderTarget, 0), e.ctxAttribs.depth && e.ctxAttribs.stencil ? (t.bindRenderbuffer(t.RENDERBUFFER, e.depthStencilBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.DEPTH_STENCIL, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.DEPTH_STENCIL_ATTACHMENT, t.RENDERBUFFER, e.depthStencilBuffer)) : e.ctxAttribs.depth ? (t.bindRenderbuffer(t.RENDERBUFFER, e.depthBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.DEPTH_COMPONENT16, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.DEPTH_ATTACHMENT, t.RENDERBUFFER, e.depthBuffer)) : e.ctxAttribs.stencil && (t.bindRenderbuffer(t.RENDERBUFFER, e.stencilBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.STENCIL_INDEX8, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.STENCIL_ATTACHMENT, t.RENDERBUFFER, e.stencilBuffer)), !t.checkFramebufferStatus(t.FRAMEBUFFER) === t.FRAMEBUFFER_COMPLETE && console.error("Framebuffer incomplete!"), e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.lastBoundFramebuffer), e.scissorTest && e.realEnable.call(t, t.SCISSOR_TEST), e.realColorMask.apply(t, e.colorMask), e.realViewport.apply(t, e.viewport), e.realClearColor.apply(t, e.clearColor) - })), this.cardboardUI && this.cardboardUI.onResize() - }, P.prototype.patch = function() { - if (!this.isPatched) { - var t = this, - e = this.gl.canvas, - n = this.gl; - a() || (e.width = g() * this.bufferScale, e.height = v() * this.bufferScale, Object.defineProperty(e, "width", { - configurable: !0, - enumerable: !0, - get: function() { - return t.bufferWidth - }, - set: function(n) { - t.bufferWidth = n, t.realCanvasWidth.set.call(e, n), t.onResize() - } - }), Object.defineProperty(e, "height", { - configurable: !0, - enumerable: !0, - get: function() { - return t.bufferHeight - }, - set: function(n) { - t.bufferHeight = n, t.realCanvasHeight.set.call(e, n), t.onResize() - } - })), this.lastBoundFramebuffer = n.getParameter(n.FRAMEBUFFER_BINDING), null == this.lastBoundFramebuffer && (this.lastBoundFramebuffer = this.framebuffer, this.gl.bindFramebuffer(n.FRAMEBUFFER, this.framebuffer)), this.gl.bindFramebuffer = function(e, i) { - t.lastBoundFramebuffer = i || t.framebuffer, t.realBindFramebuffer.call(n, e, t.lastBoundFramebuffer) - }, this.cullFace = n.getParameter(n.CULL_FACE), this.depthTest = n.getParameter(n.DEPTH_TEST), this.blend = n.getParameter(n.BLEND), this.scissorTest = n.getParameter(n.SCISSOR_TEST), this.stencilTest = n.getParameter(n.STENCIL_TEST), n.enable = function(e) { - switch (e) { - case n.CULL_FACE: - t.cullFace = !0; - break; - case n.DEPTH_TEST: - t.depthTest = !0; - break; - case n.BLEND: - t.blend = !0; - break; - case n.SCISSOR_TEST: - t.scissorTest = !0; - break; - case n.STENCIL_TEST: - t.stencilTest = !0 - } - t.realEnable.call(n, e) - }, n.disable = function(e) { - switch (e) { - case n.CULL_FACE: - t.cullFace = !1; - break; - case n.DEPTH_TEST: - t.depthTest = !1; - break; - case n.BLEND: - t.blend = !1; - break; - case n.SCISSOR_TEST: - t.scissorTest = !1; - break; - case n.STENCIL_TEST: - t.stencilTest = !1 - } - t.realDisable.call(n, e) - }, this.colorMask = n.getParameter(n.COLOR_WRITEMASK), n.colorMask = function(e, i, r, o) { - t.colorMask[0] = e, t.colorMask[1] = i, t.colorMask[2] = r, t.colorMask[3] = o, t.realColorMask.call(n, e, i, r, o) - }, this.clearColor = n.getParameter(n.COLOR_CLEAR_VALUE), n.clearColor = function(e, i, r, o) { - t.clearColor[0] = e, t.clearColor[1] = i, t.clearColor[2] = r, t.clearColor[3] = o, t.realClearColor.call(n, e, i, r, o) - }, this.viewport = n.getParameter(n.VIEWPORT), n.viewport = function(e, i, r, o) { - t.viewport[0] = e, t.viewport[1] = i, t.viewport[2] = r, t.viewport[3] = o, t.realViewport.call(n, e, i, r, o) - }, this.isPatched = !0, w(e) - } - }, P.prototype.unpatch = function() { - if (this.isPatched) { - var t = this.gl, - e = this.gl.canvas; - a() || (Object.defineProperty(e, "width", this.realCanvasWidth), Object.defineProperty(e, "height", this.realCanvasHeight)), e.width = this.bufferWidth, e.height = this.bufferHeight, t.bindFramebuffer = this.realBindFramebuffer, t.enable = this.realEnable, t.disable = this.realDisable, t.colorMask = this.realColorMask, t.clearColor = this.realClearColor, t.viewport = this.realViewport, this.lastBoundFramebuffer == this.framebuffer && t.bindFramebuffer(t.FRAMEBUFFER, null), this.isPatched = !1, setTimeout((function() { - w(e) - }), 1) - } - }, P.prototype.setTextureBounds = function(t, e) { - t || (t = [0, 0, .5, 1]), e || (e = [.5, 0, .5, 1]), this.viewportOffsetScale[0] = t[0], this.viewportOffsetScale[1] = t[1], this.viewportOffsetScale[2] = t[2], this.viewportOffsetScale[3] = t[3], this.viewportOffsetScale[4] = e[0], this.viewportOffsetScale[5] = e[1], this.viewportOffsetScale[6] = e[2], this.viewportOffsetScale[7] = e[3] - }, P.prototype.submitFrame = function() { - var t = this.gl, - e = this, - n = []; - if (this.dirtySubmitFrameBindings || n.push(t.CURRENT_PROGRAM, t.ARRAY_BUFFER_BINDING, t.ELEMENT_ARRAY_BUFFER_BINDING, t.TEXTURE_BINDING_2D, t.TEXTURE0), L(t, n, (function(t) { - e.realBindFramebuffer.call(t, t.FRAMEBUFFER, null); - var n = 0, - i = 0; - e.instanceExt && (n = t.getVertexAttrib(e.attribs.position, e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE), i = t.getVertexAttrib(e.attribs.texCoord, e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)), e.cullFace && e.realDisable.call(t, t.CULL_FACE), e.depthTest && e.realDisable.call(t, t.DEPTH_TEST), e.blend && e.realDisable.call(t, t.BLEND), e.scissorTest && e.realDisable.call(t, t.SCISSOR_TEST), e.stencilTest && e.realDisable.call(t, t.STENCIL_TEST), e.realColorMask.call(t, !0, !0, !0, !0), e.realViewport.call(t, 0, 0, t.drawingBufferWidth, t.drawingBufferHeight), (e.ctxAttribs.alpha || a()) && (e.realClearColor.call(t, 0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT)), t.useProgram(e.program), t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, e.indexBuffer), t.bindBuffer(t.ARRAY_BUFFER, e.vertexBuffer), t.enableVertexAttribArray(e.attribs.position), t.enableVertexAttribArray(e.attribs.texCoord), t.vertexAttribPointer(e.attribs.position, 2, t.FLOAT, !1, 20, 0), t.vertexAttribPointer(e.attribs.texCoord, 3, t.FLOAT, !1, 20, 8), e.instanceExt && (0 != n && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position, 0), 0 != i && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord, 0)), t.activeTexture(t.TEXTURE0), t.uniform1i(e.uniforms.diffuse, 0), t.bindTexture(t.TEXTURE_2D, e.renderTarget), t.uniform4fv(e.uniforms.viewportOffsetScale, e.viewportOffsetScale), t.drawElements(t.TRIANGLES, e.indexCount, t.UNSIGNED_SHORT, 0), e.cardboardUI && e.cardboardUI.renderNoState(), e.realBindFramebuffer.call(e.gl, t.FRAMEBUFFER, e.framebuffer), e.ctxAttribs.preserveDrawingBuffer || (e.realClearColor.call(t, 0, 0, 0, 0), t.clear(t.COLOR_BUFFER_BIT)), e.dirtySubmitFrameBindings || e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.lastBoundFramebuffer), e.cullFace && e.realEnable.call(t, t.CULL_FACE), e.depthTest && e.realEnable.call(t, t.DEPTH_TEST), e.blend && e.realEnable.call(t, t.BLEND), e.scissorTest && e.realEnable.call(t, t.SCISSOR_TEST), e.stencilTest && e.realEnable.call(t, t.STENCIL_TEST), e.realColorMask.apply(t, e.colorMask), e.realViewport.apply(t, e.viewport), !e.ctxAttribs.alpha && e.ctxAttribs.preserveDrawingBuffer || e.realClearColor.apply(t, e.clearColor), e.instanceExt && (0 != n && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position, n), 0 != i && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord, i)) - })), a()) { - var i = t.canvas; - i.width == e.bufferWidth && i.height == e.bufferHeight || (e.bufferWidth = i.width, e.bufferHeight = i.height, e.onResize()) - } - }, P.prototype.updateDeviceInfo = function(t) { - var e = this.gl, - n = this, - i = [e.ARRAY_BUFFER_BINDING, e.ELEMENT_ARRAY_BUFFER_BINDING]; - L(e, i, (function(e) { - var i = n.computeMeshVertices_(n.meshWidth, n.meshHeight, t); - if (e.bindBuffer(e.ARRAY_BUFFER, n.vertexBuffer), e.bufferData(e.ARRAY_BUFFER, i, e.STATIC_DRAW), !n.indexCount) { - var r = n.computeMeshIndices_(n.meshWidth, n.meshHeight); - e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, n.indexBuffer), e.bufferData(e.ELEMENT_ARRAY_BUFFER, r, e.STATIC_DRAW), n.indexCount = r.length - } - })) - }, P.prototype.computeMeshVertices_ = function(t, e, n) { - for (var i = new Float32Array(2 * t * e * 5), r = n.getLeftEyeVisibleTanAngles(), o = n.getLeftEyeNoLensTanAngles(), a = n.getLeftEyeVisibleScreenRect(o), l = 0, c = 0; c < 2; c++) { - for (var h = 0; h < e; h++) - for (var u = 0; u < t; u++, l++) { - var d = u / (t - 1), - p = h / (e - 1), - f = d, - m = p, - g = s(r[0], r[2], d), - v = s(r[3], r[1], p), - y = Math.sqrt(g * g + v * v), - A = n.distortion.distortInverse(y), - x = v * A / y; - d = (g * A / y - o[0]) / (o[2] - o[0]), p = (x - o[3]) / (o[1] - o[3]), d = 2 * (a.x + d * a.width - .5), p = 2 * (a.y + p * a.height - .5), i[5 * l + 0] = d, i[5 * l + 1] = p, i[5 * l + 2] = f, i[5 * l + 3] = m, i[5 * l + 4] = c - } - var _ = r[2] - r[0]; - r[0] = -(_ + r[0]), r[2] = _ - r[2], _ = o[2] - o[0], o[0] = -(_ + o[0]), o[2] = _ - o[2], a.x = 1 - (a.x + a.width) - } - return i - }, P.prototype.computeMeshIndices_ = function(t, e) { - for (var n = new Uint16Array(2 * (t - 1) * (e - 1) * 6), i = t / 2, r = e / 2, o = 0, s = 0, a = 0; a < 2; a++) - for (var l = 0; l < e; l++) - for (var c = 0; c < t; c++, o++) 0 != c && 0 != l && (c <= i == l <= r ? (n[s++] = o, n[s++] = o - t - 1, n[s++] = o - t, n[s++] = o - t - 1, n[s++] = o, n[s++] = o - 1) : (n[s++] = o - 1, n[s++] = o - t, n[s++] = o, n[s++] = o - t, n[s++] = o - 1, n[s++] = o - t - 1)); - return n - }, P.prototype.getOwnPropertyDescriptor_ = function(t, e) { - var n = Object.getOwnPropertyDescriptor(t, e); - return void 0 !== n.get && void 0 !== n.set || (n.configurable = !0, n.enumerable = !0, n.get = function() { - return this.getAttribute(e) - }, n.set = function(t) { - this.setAttribute(e, t) - }), n - }; - var D = ["attribute vec2 position;", "uniform mat4 projectionMat;", "void main() {", " gl_Position = projectionMat * vec4( position, -1.0, 1.0 );", "}"].join("\n"), - I = ["precision mediump float;", "uniform vec4 color;", "void main() {", " gl_FragColor = color;", "}"].join("\n"), - O = Math.PI / 180; - - function N(t) { - this.gl = t, this.attribs = { - position: 0 - }, this.program = A(t, D, I, this.attribs), this.uniforms = x(t, this.program), this.vertexBuffer = t.createBuffer(), this.gearOffset = 0, this.gearVertexCount = 0, this.arrowOffset = 0, this.arrowVertexCount = 0, this.projMat = new Float32Array(16), this.listener = null, this.onResize() - } - - function B(t) { - this.coefficients = t - } - N.prototype.destroy = function() { - var t = this.gl; - this.listener && t.canvas.removeEventListener("click", this.listener, !1), t.deleteProgram(this.program), t.deleteBuffer(this.vertexBuffer) - }, N.prototype.listen = function(t, e) { - var n = this.gl.canvas; - this.listener = function(i) { - var r = n.clientWidth / 2; - i.clientX > r - 42 && i.clientX < r + 42 && i.clientY > n.clientHeight - 42 ? t(i) : i.clientX < 42 && i.clientY < 42 && e(i) - }, n.addEventListener("click", this.listener, !1) - }, N.prototype.onResize = function() { - var t = this.gl, - e = this, - n = [t.ARRAY_BUFFER_BINDING]; - L(t, n, (function(t) { - var n = [], - i = t.drawingBufferWidth / 2, - r = Math.max(screen.width, screen.height) * window.devicePixelRatio, - o = t.drawingBufferWidth / r * window.devicePixelRatio, - s = 4 * o / 2, - a = 42 * o, - l = 28 * o / 2, - c = 14 * o; - - function h(t, e) { - var r = (90 - t) * O, - o = Math.cos(r), - s = Math.sin(r); - n.push(.3125 * o * l + i, .3125 * s * l + l), n.push(e * o * l + i, e * s * l + l) - } - n.push(i - s, a), n.push(i - s, t.drawingBufferHeight), n.push(i + s, a), n.push(i + s, t.drawingBufferHeight), e.gearOffset = n.length / 2; - for (var u = 0; u <= 6; u++) { - var d = 60 * u; - h(d, 1), h(d + 12, 1), h(d + 20, .75), h(d + 40, .75), h(d + 48, 1) - } - - function p(e, i) { - n.push(c + e, t.drawingBufferHeight - c - i) - } - e.gearVertexCount = n.length / 2 - e.gearOffset, e.arrowOffset = n.length / 2; - var f = s / Math.sin(45 * O); - p(0, l), p(l, 0), p(l + f, f), p(f, l + f), p(f, l - f), p(0, l), p(l, 2 * l), p(l + f, 2 * l - f), p(f, l - f), p(0, l), p(f, l - s), p(28 * o, l - s), p(f, l + s), p(28 * o, l + s), e.arrowVertexCount = n.length / 2 - e.arrowOffset, t.bindBuffer(t.ARRAY_BUFFER, e.vertexBuffer), t.bufferData(t.ARRAY_BUFFER, new Float32Array(n), t.STATIC_DRAW) - })) - }, N.prototype.render = function() { - var t = this.gl, - e = this, - n = [t.CULL_FACE, t.DEPTH_TEST, t.BLEND, t.SCISSOR_TEST, t.STENCIL_TEST, t.COLOR_WRITEMASK, t.VIEWPORT, t.CURRENT_PROGRAM, t.ARRAY_BUFFER_BINDING]; - L(t, n, (function(t) { - t.disable(t.CULL_FACE), t.disable(t.DEPTH_TEST), t.disable(t.BLEND), t.disable(t.SCISSOR_TEST), t.disable(t.STENCIL_TEST), t.colorMask(!0, !0, !0, !0), t.viewport(0, 0, t.drawingBufferWidth, t.drawingBufferHeight), e.renderNoState() - })) - }, N.prototype.renderNoState = function() { - var t, e, n, i, r, o, s, a, l, c, h = this.gl; - h.useProgram(this.program), h.bindBuffer(h.ARRAY_BUFFER, this.vertexBuffer), h.enableVertexAttribArray(this.attribs.position), h.vertexAttribPointer(this.attribs.position, 2, h.FLOAT, !1, 8, 0), h.uniform4f(this.uniforms.color, 1, 1, 1, 1), t = this.projMat, e = 0, n = h.drawingBufferWidth, i = 0, r = h.drawingBufferHeight, a = 1 / (e - n), l = 1 / (i - r), c = 1 / ((o = .1) - (s = 1024)), t[0] = -2 * a, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[5] = -2 * l, t[6] = 0, t[7] = 0, t[8] = 0, t[9] = 0, t[10] = 2 * c, t[11] = 0, t[12] = (e + n) * a, t[13] = (r + i) * l, t[14] = (s + o) * c, t[15] = 1, h.uniformMatrix4fv(this.uniforms.projectionMat, !1, this.projMat), h.drawArrays(h.TRIANGLE_STRIP, 0, 4), h.drawArrays(h.TRIANGLE_STRIP, this.gearOffset, this.gearVertexCount), h.drawArrays(h.TRIANGLE_STRIP, this.arrowOffset, this.arrowVertexCount) - }, B.prototype.distortInverse = function(t) { - for (var e = 0, n = 1, i = t - this.distort(e); Math.abs(n - e) > 1e-4;) { - var r = t - this.distort(n), - o = n - r * ((n - e) / (r - i)); - e = n, n = o, i = r - } - return n - }, B.prototype.distort = function(t) { - for (var e = t * t, n = 0, i = 0; i < this.coefficients.length; i++) n = e * (n + this.coefficients[i]); - return (n + 1) * t - }; - var F = Math.PI / 180, - z = 180 / Math.PI, - U = function(t, e, n) { - this.x = t || 0, this.y = e || 0, this.z = n || 0 - }; - U.prototype = { - constructor: U, - set: function(t, e, n) { - return this.x = t, this.y = e, this.z = n, this - }, - copy: function(t) { - return this.x = t.x, this.y = t.y, this.z = t.z, this - }, - length: function() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) - }, - normalize: function() { - var t = this.length(); - if (0 !== t) { - var e = 1 / t; - this.multiplyScalar(e) - } else this.x = 0, this.y = 0, this.z = 0; - return this - }, - multiplyScalar: function(t) { - this.x *= t, this.y *= t, this.z *= t - }, - applyQuaternion: function(t) { - var e = this.x, - n = this.y, - i = this.z, - r = t.x, - o = t.y, - s = t.z, - a = t.w, - l = a * e + o * i - s * n, - c = a * n + s * e - r * i, - h = a * i + r * n - o * e, - u = -r * e - o * n - s * i; - return this.x = l * a + u * -r + c * -s - h * -o, this.y = c * a + u * -o + h * -r - l * -s, this.z = h * a + u * -s + l * -o - c * -r, this - }, - dot: function(t) { - return this.x * t.x + this.y * t.y + this.z * t.z - }, - crossVectors: function(t, e) { - var n = t.x, - i = t.y, - r = t.z, - o = e.x, - s = e.y, - a = e.z; - return this.x = i * a - r * s, this.y = r * o - n * a, this.z = n * s - i * o, this - } - }; - var H, G, V = function(t, e, n, i) { - this.x = t || 0, this.y = e || 0, this.z = n || 0, this.w = void 0 !== i ? i : 1 - }; - - function k(t) { - this.width = t.width || g(), this.height = t.height || v(), this.widthMeters = t.widthMeters, this.heightMeters = t.heightMeters, this.bevelMeters = t.bevelMeters - } - V.prototype = { - constructor: V, - set: function(t, e, n, i) { - return this.x = t, this.y = e, this.z = n, this.w = i, this - }, - copy: function(t) { - return this.x = t.x, this.y = t.y, this.z = t.z, this.w = t.w, this - }, - setFromEulerXYZ: function(t, e, n) { - var i = Math.cos(t / 2), - r = Math.cos(e / 2), - o = Math.cos(n / 2), - s = Math.sin(t / 2), - a = Math.sin(e / 2), - l = Math.sin(n / 2); - return this.x = s * r * o + i * a * l, this.y = i * a * o - s * r * l, this.z = i * r * l + s * a * o, this.w = i * r * o - s * a * l, this - }, - setFromEulerYXZ: function(t, e, n) { - var i = Math.cos(t / 2), - r = Math.cos(e / 2), - o = Math.cos(n / 2), - s = Math.sin(t / 2), - a = Math.sin(e / 2), - l = Math.sin(n / 2); - return this.x = s * r * o + i * a * l, this.y = i * a * o - s * r * l, this.z = i * r * l - s * a * o, this.w = i * r * o + s * a * l, this - }, - setFromAxisAngle: function(t, e) { - var n = e / 2, - i = Math.sin(n); - return this.x = t.x * i, this.y = t.y * i, this.z = t.z * i, this.w = Math.cos(n), this - }, - multiply: function(t) { - return this.multiplyQuaternions(this, t) - }, - multiplyQuaternions: function(t, e) { - var n = t.x, - i = t.y, - r = t.z, - o = t.w, - s = e.x, - a = e.y, - l = e.z, - c = e.w; - return this.x = n * c + o * s + i * l - r * a, this.y = i * c + o * a + r * s - n * l, this.z = r * c + o * l + n * a - i * s, this.w = o * c - n * s - i * a - r * l, this - }, - inverse: function() { - return this.x *= -1, this.y *= -1, this.z *= -1, this.normalize(), this - }, - normalize: function() { - var t = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); - return 0 === t ? (this.x = 0, this.y = 0, this.z = 0, this.w = 1) : (t = 1 / t, this.x = this.x * t, this.y = this.y * t, this.z = this.z * t, this.w = this.w * t), this - }, - slerp: function(t, e) { - if (0 === e) return this; - if (1 === e) return this.copy(t); - var n = this.x, - i = this.y, - r = this.z, - o = this.w, - s = o * t.w + n * t.x + i * t.y + r * t.z; - if (s < 0 ? (this.w = -t.w, this.x = -t.x, this.y = -t.y, this.z = -t.z, s = -s) : this.copy(t), s >= 1) return this.w = o, this.x = n, this.y = i, this.z = r, this; - var a = Math.acos(s), - l = Math.sqrt(1 - s * s); - if (Math.abs(l) < .001) return this.w = .5 * (o + this.w), this.x = .5 * (n + this.x), this.y = .5 * (i + this.y), this.z = .5 * (r + this.z), this; - var c = Math.sin((1 - e) * a) / l, - h = Math.sin(e * a) / l; - return this.w = o * c + this.w * h, this.x = n * c + this.x * h, this.y = i * c + this.y * h, this.z = r * c + this.z * h, this - }, - setFromUnitVectors: function(t, e) { - return void 0 === H && (H = new U), (G = t.dot(e) + 1) < 1e-6 ? (G = 0, Math.abs(t.x) > Math.abs(t.z) ? H.set(-t.y, t.x, 0) : H.set(0, -t.z, t.y)) : H.crossVectors(t, e), this.x = H.x, this.y = H.y, this.z = H.z, this.w = G, this.normalize(), this - } - }; - var W = new k({ - widthMeters: .11, - heightMeters: .062, - bevelMeters: .004 - }), - j = new k({ - widthMeters: .1038, - heightMeters: .0584, - bevelMeters: .004 - }), - X = { - CardboardV1: new Y({ - id: "CardboardV1", - label: "Cardboard I/O 2014", - fov: 40, - interLensDistance: .06, - baselineLensDistance: .035, - screenLensDistance: .042, - distortionCoefficients: [.441, .156], - inverseCoefficients: [-.4410035, .42756155, -.4804439, .5460139, -.58821183, .5733938, -.48303202, .33299083, -.17573841, .0651772, -.01488963, .001559834] - }), - CardboardV2: new Y({ - id: "CardboardV2", - label: "Cardboard I/O 2015", - fov: 60, - interLensDistance: .064, - baselineLensDistance: .035, - screenLensDistance: .039, - distortionCoefficients: [.34, .55], - inverseCoefficients: [-.33836704, -.18162185, .862655, -1.2462051, 1.0560602, -.58208317, .21609078, -.05444823, .009177956, -.0009904169, 6183535e-11, -16981803e-13] - }) - }; - - function q(t, e) { - this.viewer = X.CardboardV2, this.updateDeviceParams(t), this.distortion = new B(this.viewer.distortionCoefficients); - for (var n = 0; n < e.length; n++) { - var i = e[n]; - X[i.id] = new Y(i) - } - } - - function Y(t) { - this.id = t.id, this.label = t.label, this.fov = t.fov, this.interLensDistance = t.interLensDistance, this.baselineLensDistance = t.baselineLensDistance, this.screenLensDistance = t.screenLensDistance, this.distortionCoefficients = t.distortionCoefficients, this.inverseCoefficients = t.inverseCoefficients - } - q.prototype.updateDeviceParams = function(t) { - this.device = this.determineDevice_(t) || this.device - }, q.prototype.getDevice = function() { - return this.device - }, q.prototype.setViewer = function(t) { - this.viewer = t, this.distortion = new B(this.viewer.distortionCoefficients) - }, q.prototype.determineDevice_ = function(t) { - if (!t) return a() ? (console.warn("Using fallback iOS device measurements."), j) : (console.warn("Using fallback Android device measurements."), W); - var e = .0254 / t.xdpi, - n = .0254 / t.ydpi; - return new k({ - widthMeters: e * g(), - heightMeters: n * v(), - bevelMeters: .001 * t.bevelMm - }) - }, q.prototype.getDistortedFieldOfViewLeftEye = function() { - var t = this.viewer, - e = this.device, - n = this.distortion, - i = t.screenLensDistance, - r = (e.widthMeters - t.interLensDistance) / 2, - o = t.interLensDistance / 2, - s = t.baselineLensDistance - e.bevelMeters, - a = e.heightMeters - s, - l = z * Math.atan(n.distort(r / i)), - c = z * Math.atan(n.distort(o / i)), - h = z * Math.atan(n.distort(s / i)), - u = z * Math.atan(n.distort(a / i)); - return { - leftDegrees: Math.min(l, t.fov), - rightDegrees: Math.min(c, t.fov), - downDegrees: Math.min(h, t.fov), - upDegrees: Math.min(u, t.fov) - } - }, q.prototype.getLeftEyeVisibleTanAngles = function() { - var t = this.viewer, - e = this.device, - n = this.distortion, - i = Math.tan(-F * t.fov), - r = Math.tan(F * t.fov), - o = Math.tan(F * t.fov), - s = Math.tan(-F * t.fov), - a = e.widthMeters / 4, - l = e.heightMeters / 2, - c = t.baselineLensDistance - e.bevelMeters - l, - h = t.interLensDistance / 2 - a, - u = -c, - d = t.screenLensDistance, - p = n.distort((h - a) / d), - f = n.distort((u + l) / d), - m = n.distort((h + a) / d), - g = n.distort((u - l) / d), - v = new Float32Array(4); - return v[0] = Math.max(i, p), v[1] = Math.min(r, f), v[2] = Math.min(o, m), v[3] = Math.max(s, g), v - }, q.prototype.getLeftEyeNoLensTanAngles = function() { - var t = this.viewer, - e = this.device, - n = this.distortion, - i = new Float32Array(4), - r = n.distortInverse(Math.tan(-F * t.fov)), - o = n.distortInverse(Math.tan(F * t.fov)), - s = n.distortInverse(Math.tan(F * t.fov)), - a = n.distortInverse(Math.tan(-F * t.fov)), - l = e.widthMeters / 4, - c = e.heightMeters / 2, - h = t.baselineLensDistance - e.bevelMeters - c, - u = t.interLensDistance / 2 - l, - d = -h, - p = t.screenLensDistance, - f = (u - l) / p, - m = (d + c) / p, - g = (u + l) / p, - v = (d - c) / p; - return i[0] = Math.max(r, f), i[1] = Math.min(o, m), i[2] = Math.min(s, g), i[3] = Math.max(a, v), i - }, q.prototype.getLeftEyeVisibleScreenRect = function(t) { - var e = this.viewer, - n = this.device, - i = e.screenLensDistance, - r = (n.widthMeters - e.interLensDistance) / 2, - o = e.baselineLensDistance - n.bevelMeters, - s = (t[0] * i + r) / n.widthMeters, - a = (t[1] * i + o) / n.heightMeters, - l = (t[2] * i + r) / n.widthMeters, - c = (t[3] * i + o) / n.heightMeters; - return { - x: s, - y: c, - width: l - s, - height: a - c - } - }, q.prototype.getFieldOfViewLeftEye = function(t) { - return t ? this.getUndistortedFieldOfViewLeftEye() : this.getDistortedFieldOfViewLeftEye() - }, q.prototype.getFieldOfViewRightEye = function(t) { - var e = this.getFieldOfViewLeftEye(t); - return { - leftDegrees: e.rightDegrees, - rightDegrees: e.leftDegrees, - upDegrees: e.upDegrees, - downDegrees: e.downDegrees - } - }, q.prototype.getUndistortedFieldOfViewLeftEye = function() { - var t = this.getUndistortedParams_(); - return { - leftDegrees: z * Math.atan(t.outerDist), - rightDegrees: z * Math.atan(t.innerDist), - downDegrees: z * Math.atan(t.bottomDist), - upDegrees: z * Math.atan(t.topDist) - } - }, q.prototype.getUndistortedViewportLeftEye = function() { - var t = this.getUndistortedParams_(), - e = this.viewer, - n = this.device, - i = e.screenLensDistance, - r = n.widthMeters / i, - o = n.heightMeters / i, - s = n.width / r, - a = n.height / o, - l = Math.round((t.eyePosX - t.outerDist) * s), - c = Math.round((t.eyePosY - t.bottomDist) * a); - return { - x: l, - y: c, - width: Math.round((t.eyePosX + t.innerDist) * s) - l, - height: Math.round((t.eyePosY + t.topDist) * a) - c - } - }, q.prototype.getUndistortedParams_ = function() { - var t = this.viewer, - e = this.device, - n = this.distortion, - i = t.screenLensDistance, - r = t.interLensDistance / 2 / i, - o = e.widthMeters / i, - s = e.heightMeters / i, - a = o / 2 - r, - l = (t.baselineLensDistance - e.bevelMeters) / i, - c = t.fov, - h = n.distortInverse(Math.tan(F * c)), - u = Math.min(a, h), - d = Math.min(r, h), - p = Math.min(l, h); - return { - outerDist: u, - innerDist: d, - topDist: Math.min(s - l, h), - bottomDist: p, - eyePosX: a, - eyePosY: l - } - }, q.Viewers = X; - var Q = { - format: 1, - last_updated: "2019-11-09T17:36:14Z", - devices: [{ - type: "android", - rules: [{ - mdmh: "asus/*/Nexus 7/*" - }, { - ua: "Nexus 7" - }], - dpi: [320.8, 323], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "asus/*/ASUS_X00PD/*" - }, { - ua: "ASUS_X00PD" - }], - dpi: 245, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "asus/*/ASUS_X008D/*" - }, { - ua: "ASUS_X008D" - }], - dpi: 282, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "asus/*/ASUS_Z00AD/*" - }, { - ua: "ASUS_Z00AD" - }], - dpi: [403, 404.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel 2 XL/*" - }, { - ua: "Pixel 2 XL" - }], - dpi: 537.9, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel 3 XL/*" - }, { - ua: "Pixel 3 XL" - }], - dpi: [558.5, 553.8], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel XL/*" - }, { - ua: "Pixel XL" - }], - dpi: [537.9, 533], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel 3/*" - }, { - ua: "Pixel 3" - }], - dpi: 442.4, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel 2/*" - }, { - ua: "Pixel 2" - }], - dpi: 441, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel/*" - }, { - ua: "Pixel" - }], - dpi: [432.6, 436.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "HTC/*/HTC6435LVW/*" - }, { - ua: "HTC6435LVW" - }], - dpi: [449.7, 443.3], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "HTC/*/HTC One XL/*" - }, { - ua: "HTC One XL" - }], - dpi: [315.3, 314.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "htc/*/Nexus 9/*" - }, { - ua: "Nexus 9" - }], - dpi: 289, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "HTC/*/HTC One M9/*" - }, { - ua: "HTC One M9" - }], - dpi: [442.5, 443.3], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "HTC/*/HTC One_M8/*" - }, { - ua: "HTC One_M8" - }], - dpi: [449.7, 447.4], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "HTC/*/HTC One/*" - }, { - ua: "HTC One" - }], - dpi: 472.8, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Huawei/*/Nexus 6P/*" - }, { - ua: "Nexus 6P" - }], - dpi: [515.1, 518], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Huawei/*/BLN-L24/*" - }, { - ua: "HONORBLN-L24" - }], - dpi: 480, - bw: 4, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "Huawei/*/BKL-L09/*" - }, { - ua: "BKL-L09" - }], - dpi: 403, - bw: 3.47, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "LENOVO/*/Lenovo PB2-690Y/*" - }, { - ua: "Lenovo PB2-690Y" - }], - dpi: [457.2, 454.713], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/Nexus 5X/*" - }, { - ua: "Nexus 5X" - }], - dpi: [422, 419.9], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LGMS345/*" - }, { - ua: "LGMS345" - }], - dpi: [221.7, 219.1], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LG-D800/*" - }, { - ua: "LG-D800" - }], - dpi: [422, 424.1], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LG-D850/*" - }, { - ua: "LG-D850" - }], - dpi: [537.9, 541.9], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/VS985 4G/*" - }, { - ua: "VS985 4G" - }], - dpi: [537.9, 535.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/Nexus 5/*" - }, { - ua: "Nexus 5 B" - }], - dpi: [442.4, 444.8], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/Nexus 4/*" - }, { - ua: "Nexus 4" - }], - dpi: [319.8, 318.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LG-P769/*" - }, { - ua: "LG-P769" - }], - dpi: [240.6, 247.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LGMS323/*" - }, { - ua: "LGMS323" - }], - dpi: [206.6, 204.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LGLS996/*" - }, { - ua: "LGLS996" - }], - dpi: [403.4, 401.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Micromax/*/4560MMX/*" - }, { - ua: "4560MMX" - }], - dpi: [240, 219.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Micromax/*/A250/*" - }, { - ua: "Micromax A250" - }], - dpi: [480, 446.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Micromax/*/Micromax AQ4501/*" - }, { - ua: "Micromax AQ4501" - }], - dpi: 240, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/G5/*" - }, { - ua: "Moto G (5) Plus" - }], - dpi: [403.4, 403], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/DROID RAZR/*" - }, { - ua: "DROID RAZR" - }], - dpi: [368.1, 256.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT830C/*" - }, { - ua: "XT830C" - }], - dpi: [254, 255.9], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1021/*" - }, { - ua: "XT1021" - }], - dpi: [254, 256.7], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1023/*" - }, { - ua: "XT1023" - }], - dpi: [254, 256.7], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1028/*" - }, { - ua: "XT1028" - }], - dpi: [326.6, 327.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1034/*" - }, { - ua: "XT1034" - }], - dpi: [326.6, 328.4], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1053/*" - }, { - ua: "XT1053" - }], - dpi: [315.3, 316.1], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1562/*" - }, { - ua: "XT1562" - }], - dpi: [403.4, 402.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/Nexus 6/*" - }, { - ua: "Nexus 6 B" - }], - dpi: [494.3, 489.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1063/*" - }, { - ua: "XT1063" - }], - dpi: [295, 296.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1064/*" - }, { - ua: "XT1064" - }], - dpi: [295, 295.6], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1092/*" - }, { - ua: "XT1092" - }], - dpi: [422, 424.1], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1095/*" - }, { - ua: "XT1095" - }], - dpi: [422, 423.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/G4/*" - }, { - ua: "Moto G (4)" - }], - dpi: 401, - bw: 4, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/A0001/*" - }, { - ua: "A0001" - }], - dpi: [403.4, 401], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE E1001/*" - }, { - ua: "ONE E1001" - }], - dpi: [442.4, 441.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE E1003/*" - }, { - ua: "ONE E1003" - }], - dpi: [442.4, 441.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE E1005/*" - }, { - ua: "ONE E1005" - }], - dpi: [442.4, 441.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE A2001/*" - }, { - ua: "ONE A2001" - }], - dpi: [391.9, 405.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE A2003/*" - }, { - ua: "ONE A2003" - }], - dpi: [391.9, 405.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE A2005/*" - }, { - ua: "ONE A2005" - }], - dpi: [391.9, 405.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A3000/*" - }, { - ua: "ONEPLUS A3000" - }], - dpi: 401, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A3003/*" - }, { - ua: "ONEPLUS A3003" - }], - dpi: 401, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A3010/*" - }, { - ua: "ONEPLUS A3010" - }], - dpi: 401, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A5000/*" - }, { - ua: "ONEPLUS A5000 " - }], - dpi: [403.411, 399.737], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE A5010/*" - }, { - ua: "ONEPLUS A5010" - }], - dpi: [403, 400], - bw: 2, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A6000/*" - }, { - ua: "ONEPLUS A6000" - }], - dpi: 401, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A6003/*" - }, { - ua: "ONEPLUS A6003" - }], - dpi: 401, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A6010/*" - }, { - ua: "ONEPLUS A6010" - }], - dpi: 401, - bw: 2, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A6013/*" - }, { - ua: "ONEPLUS A6013" - }], - dpi: 401, - bw: 2, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OPPO/*/X909/*" - }, { - ua: "X909" - }], - dpi: [442.4, 444.1], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9082/*" - }, { - ua: "GT-I9082" - }], - dpi: [184.7, 185.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G360P/*" - }, { - ua: "SM-G360P" - }], - dpi: [196.7, 205.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/Nexus S/*" - }, { - ua: "Nexus S" - }], - dpi: [234.5, 229.8], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9300/*" - }, { - ua: "GT-I9300" - }], - dpi: [304.8, 303.9], - bw: 5, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-T230NU/*" - }, { - ua: "SM-T230NU" - }], - dpi: 216, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SGH-T399/*" - }, { - ua: "SGH-T399" - }], - dpi: [217.7, 231.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SGH-M919/*" - }, { - ua: "SGH-M919" - }], - dpi: [440.8, 437.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N9005/*" - }, { - ua: "SM-N9005" - }], - dpi: [386.4, 387], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SAMSUNG-SM-N900A/*" - }, { - ua: "SAMSUNG-SM-N900A" - }], - dpi: [386.4, 387.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9500/*" - }, { - ua: "GT-I9500" - }], - dpi: [442.5, 443.3], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9505/*" - }, { - ua: "GT-I9505" - }], - dpi: 439.4, - bw: 4, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G900F/*" - }, { - ua: "SM-G900F" - }], - dpi: [415.6, 431.6], - bw: 5, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G900M/*" - }, { - ua: "SM-G900M" - }], - dpi: [415.6, 431.6], - bw: 5, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G800F/*" - }, { - ua: "SM-G800F" - }], - dpi: 326.8, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G906S/*" - }, { - ua: "SM-G906S" - }], - dpi: [562.7, 572.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9300/*" - }, { - ua: "GT-I9300" - }], - dpi: [306.7, 304.8], - bw: 5, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-T535/*" - }, { - ua: "SM-T535" - }], - dpi: [142.6, 136.4], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N920C/*" - }, { - ua: "SM-N920C" - }], - dpi: [515.1, 518.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N920P/*" - }, { - ua: "SM-N920P" - }], - dpi: [386.3655, 390.144], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N920W8/*" - }, { - ua: "SM-N920W8" - }], - dpi: [515.1, 518.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9300I/*" - }, { - ua: "GT-I9300I" - }], - dpi: [304.8, 305.8], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9195/*" - }, { - ua: "GT-I9195" - }], - dpi: [249.4, 256.7], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SPH-L520/*" - }, { - ua: "SPH-L520" - }], - dpi: [249.4, 255.9], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SAMSUNG-SGH-I717/*" - }, { - ua: "SAMSUNG-SGH-I717" - }], - dpi: 285.8, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SPH-D710/*" - }, { - ua: "SPH-D710" - }], - dpi: [217.7, 204.2], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-N7100/*" - }, { - ua: "GT-N7100" - }], - dpi: 265.1, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SCH-I605/*" - }, { - ua: "SCH-I605" - }], - dpi: 265.1, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/Galaxy Nexus/*" - }, { - ua: "Galaxy Nexus" - }], - dpi: [315.3, 314.2], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N910H/*" - }, { - ua: "SM-N910H" - }], - dpi: [515.1, 518], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N910C/*" - }, { - ua: "SM-N910C" - }], - dpi: [515.2, 520.2], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G130M/*" - }, { - ua: "SM-G130M" - }], - dpi: [165.9, 164.8], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G928I/*" - }, { - ua: "SM-G928I" - }], - dpi: [515.1, 518.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G920F/*" - }, { - ua: "SM-G920F" - }], - dpi: 580.6, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G920P/*" - }, { - ua: "SM-G920P" - }], - dpi: [522.5, 577], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G925F/*" - }, { - ua: "SM-G925F" - }], - dpi: 580.6, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G925V/*" - }, { - ua: "SM-G925V" - }], - dpi: [522.5, 576.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G930F/*" - }, { - ua: "SM-G930F" - }], - dpi: 576.6, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G935F/*" - }, { - ua: "SM-G935F" - }], - dpi: 533, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G950F/*" - }, { - ua: "SM-G950F" - }], - dpi: [562.707, 565.293], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G955U/*" - }, { - ua: "SM-G955U" - }], - dpi: [522.514, 525.762], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G955F/*" - }, { - ua: "SM-G955F" - }], - dpi: [522.514, 525.762], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960F/*" - }, { - ua: "SM-G960F" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G9600/*" - }, { - ua: "SM-G9600" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960T/*" - }, { - ua: "SM-G960T" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960N/*" - }, { - ua: "SM-G960N" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960U/*" - }, { - ua: "SM-G960U" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G9608/*" - }, { - ua: "SM-G9608" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960FD/*" - }, { - ua: "SM-G960FD" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960W/*" - }, { - ua: "SM-G960W" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G965F/*" - }, { - ua: "SM-G965F" - }], - dpi: 529, - bw: 2, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Sony/*/C6903/*" - }, { - ua: "C6903" - }], - dpi: [442.5, 443.3], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "Sony/*/D6653/*" - }, { - ua: "D6653" - }], - dpi: [428.6, 427.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Sony/*/E6653/*" - }, { - ua: "E6653" - }], - dpi: [428.6, 425.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Sony/*/E6853/*" - }, { - ua: "E6853" - }], - dpi: [403.4, 401.9], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Sony/*/SGP321/*" - }, { - ua: "SGP321" - }], - dpi: [224.7, 224.1], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "TCT/*/ALCATEL ONE TOUCH Fierce/*" - }, { - ua: "ALCATEL ONE TOUCH Fierce" - }], - dpi: [240, 247.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "THL/*/thl 5000/*" - }, { - ua: "thl 5000" - }], - dpi: [480, 443.3], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Fly/*/IQ4412/*" - }, { - ua: "IQ4412" - }], - dpi: 307.9, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "ZTE/*/ZTE Blade L2/*" - }, { - ua: "ZTE Blade L2" - }], - dpi: 240, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "BENEVE/*/VR518/*" - }, { - ua: "VR518" - }], - dpi: 480, - bw: 3, - ac: 500 - }, { - type: "ios", - rules: [{ - res: [640, 960] - }], - dpi: [325.1, 328.4], - bw: 4, - ac: 1e3 - }, { - type: "ios", - rules: [{ - res: [640, 1136] - }], - dpi: [317.1, 320.2], - bw: 3, - ac: 1e3 - }, { - type: "ios", - rules: [{ - res: [750, 1334] - }], - dpi: 326.4, - bw: 4, - ac: 1e3 - }, { - type: "ios", - rules: [{ - res: [1242, 2208] - }], - dpi: [453.6, 458.4], - bw: 4, - ac: 1e3 - }, { - type: "ios", - rules: [{ - res: [1125, 2001] - }], - dpi: [410.9, 415.4], - bw: 4, - ac: 1e3 - }, { - type: "ios", - rules: [{ - res: [1125, 2436] - }], - dpi: 458, - bw: 4, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Huawei/*/EML-L29/*" - }, { - ua: "EML-L29" - }], - dpi: 428, - bw: 3.45, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "Nokia/*/Nokia 7.1/*" - }, { - ua: "Nokia 7.1" - }], - dpi: [432, 431.9], - bw: 3, - ac: 500 - }, { - type: "ios", - rules: [{ - res: [1242, 2688] - }], - dpi: 458, - bw: 4, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G570M/*" - }, { - ua: "SM-G570M" - }], - dpi: 320, - bw: 3.684, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G970F/*" - }, { - ua: "SM-G970F" - }], - dpi: 438, - bw: 2.281, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G973F/*" - }, { - ua: "SM-G973F" - }], - dpi: 550, - bw: 2.002, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G975F/*" - }, { - ua: "SM-G975F" - }], - dpi: 522, - bw: 2.054, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G977F/*" - }, { - ua: "SM-G977F" - }], - dpi: 505, - bw: 2.334, - ac: 500 - }, { - type: "ios", - rules: [{ - res: [828, 1792] - }], - dpi: 326, - bw: 5, - ac: 500 - }] - }; - - function Z(t, e) { - if (this.dpdb = Q, this.recalculateDeviceParams_(), t) { - this.onDeviceParamsUpdated = e; - var n = new XMLHttpRequest, - i = this; - n.open("GET", t, !0), n.addEventListener("load", (function() { - i.loading = !1, n.status >= 200 && n.status <= 299 ? (i.dpdb = JSON.parse(n.response), i.recalculateDeviceParams_()) : console.error("Error loading online DPDB!") - })), n.send() - } - } - - function J(t) { - this.xdpi = t.xdpi, this.ydpi = t.ydpi, this.bevelMm = t.bevelMm - } - - function K(t, e) { - this.set(t, e) - } - - function $(t, e) { - this.kFilter = t, this.isDebug = e, this.currentAccelMeasurement = new K, this.currentGyroMeasurement = new K, this.previousGyroMeasurement = new K, a() ? this.filterQ = new V(-1, 0, 0, 1) : this.filterQ = new V(1, 0, 0, 1), this.previousFilterQ = new V, this.previousFilterQ.copy(this.filterQ), this.accelQ = new V, this.isOrientationInitialized = !1, this.estimatedGravity = new U, this.measuredGravity = new U, this.gyroIntegralQ = new V - } - - function tt(t, e) { - this.predictionTimeS = t, this.isDebug = e, this.previousQ = new V, this.previousTimestampS = null, this.deltaQ = new V, this.outQ = new V - } - - function et(t, e, n, i) { - this.yawOnly = n, this.accelerometer = new U, this.gyroscope = new U, this.filter = new $(t, i), this.posePredictor = new tt(e, i), this.isFirefoxAndroid = h(), this.isIOS = a(); - var r = u(); - this.isDeviceMotionInRadians = !this.isIOS && r && r < 66, this.isWithoutDeviceMotion = p() || d(), this.filterToWorldQ = new V, a() ? this.filterToWorldQ.setFromAxisAngle(new U(1, 0, 0), Math.PI / 2) : this.filterToWorldQ.setFromAxisAngle(new U(1, 0, 0), -Math.PI / 2), this.inverseWorldToScreenQ = new V, this.worldToScreenQ = new V, this.originalPoseAdjustQ = new V, this.originalPoseAdjustQ.setFromAxisAngle(new U(0, 0, 1), -window.orientation * Math.PI / 180), this.setScreenTransform_(), m() && this.filterToWorldQ.multiply(this.inverseWorldToScreenQ), this.resetQ = new V, this.orientationOut_ = new Float32Array(4), this.start() - } - Z.prototype.getDeviceParams = function() { - return this.deviceParams - }, Z.prototype.recalculateDeviceParams_ = function() { - var t = this.calcDeviceParams_(); - t ? (this.deviceParams = t, this.onDeviceParamsUpdated && this.onDeviceParamsUpdated(this.deviceParams)) : console.error("Failed to recalculate device parameters.") - }, Z.prototype.calcDeviceParams_ = function() { - var t = this.dpdb; - if (!t) return console.error("DPDB not available."), null; - if (1 != t.format) return console.error("DPDB has unexpected format version."), null; - if (!t.devices || !t.devices.length) return console.error("DPDB does not have a devices section."), null; - var e = navigator.userAgent || navigator.vendor || window.opera, - n = g(), - i = v(); - if (!t.devices) return console.error("DPDB has no devices section."), null; - for (var r = 0; r < t.devices.length; r++) { - var o = t.devices[r]; - if (o.rules) - if ("ios" == o.type || "android" == o.type) { - if (a() == ("ios" == o.type)) { - for (var s = !1, l = 0; l < o.rules.length; l++) { - var c = o.rules[l]; - if (this.ruleMatches_(c, e, n, i)) { - s = !0; - break - } - } - if (s) return new J({ - xdpi: o.dpi[0] || o.dpi, - ydpi: o.dpi[1] || o.dpi, - bevelMm: o.bw - }) - } - } else console.warn("Device[" + r + "] has invalid type."); - else console.warn("Device[" + r + "] has no rules section.") - } - return console.warn("No DPDB device match."), null - }, Z.prototype.ruleMatches_ = function(t, e, n, i) { - if (!t.ua && !t.res) return !1; - if (t.ua && "SM" === t.ua.substring(0, 2) && (t.ua = t.ua.substring(0, 7)), t.ua && e.indexOf(t.ua) < 0) return !1; - if (t.res) { - if (!t.res[0] || !t.res[1]) return !1; - var r = t.res[0], - o = t.res[1]; - if (Math.min(n, i) != Math.min(r, o) || Math.max(n, i) != Math.max(r, o)) return !1 - } - return !0 - }, K.prototype.set = function(t, e) { - this.sample = t, this.timestampS = e - }, K.prototype.copy = function(t) { - this.set(t.sample, t.timestampS) - }, $.prototype.addAccelMeasurement = function(t, e) { - this.currentAccelMeasurement.set(t, e) - }, $.prototype.addGyroMeasurement = function(t, e) { - this.currentGyroMeasurement.set(t, e); - var n, i = e - this.previousGyroMeasurement.timestampS; - n = i, isNaN(n) || n <= .001 || n > 1 || this.run_(), this.previousGyroMeasurement.copy(this.currentGyroMeasurement) - }, $.prototype.run_ = function() { - if (!this.isOrientationInitialized) return this.accelQ = this.accelToQuaternion_(this.currentAccelMeasurement.sample), this.previousFilterQ.copy(this.accelQ), void(this.isOrientationInitialized = !0); - var t = this.currentGyroMeasurement.timestampS - this.previousGyroMeasurement.timestampS, - e = this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample, t); - this.gyroIntegralQ.multiply(e), this.filterQ.copy(this.previousFilterQ), this.filterQ.multiply(e); - var n = new V; - n.copy(this.filterQ), n.inverse(), this.estimatedGravity.set(0, 0, -1), this.estimatedGravity.applyQuaternion(n), this.estimatedGravity.normalize(), this.measuredGravity.copy(this.currentAccelMeasurement.sample), this.measuredGravity.normalize(); - var i, r = new V; - r.setFromUnitVectors(this.estimatedGravity, this.measuredGravity), r.inverse(), this.isDebug && console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)", z * ((i = r).w > 1 ? (console.warn("getQuaternionAngle: w > 1"), 0) : 2 * Math.acos(i.w)), this.estimatedGravity.x.toFixed(1), this.estimatedGravity.y.toFixed(1), this.estimatedGravity.z.toFixed(1), this.measuredGravity.x.toFixed(1), this.measuredGravity.y.toFixed(1), this.measuredGravity.z.toFixed(1)); - var o = new V; - o.copy(this.filterQ), o.multiply(r), this.filterQ.slerp(o, 1 - this.kFilter), this.previousFilterQ.copy(this.filterQ) - }, $.prototype.getOrientation = function() { - return this.filterQ - }, $.prototype.accelToQuaternion_ = function(t) { - var e = new U; - e.copy(t), e.normalize(); - var n = new V; - return n.setFromUnitVectors(new U(0, 0, -1), e), n.inverse(), n - }, $.prototype.gyroToQuaternionDelta_ = function(t, e) { - var n = new V, - i = new U; - return i.copy(t), i.normalize(), n.setFromAxisAngle(i, t.length() * e), n - }, tt.prototype.getPrediction = function(t, e, n) { - if (!this.previousTimestampS) return this.previousQ.copy(t), this.previousTimestampS = n, t; - var i = new U; - i.copy(e), i.normalize(); - var r = e.length(); - if (r < 20 * F) return this.isDebug && console.log("Moving slowly, at %s deg/s: no prediction", (z * r).toFixed(1)), this.outQ.copy(t), this.previousQ.copy(t), this.outQ; - var o = r * this.predictionTimeS; - return this.deltaQ.setFromAxisAngle(i, o), this.outQ.copy(this.previousQ), this.outQ.multiply(this.deltaQ), this.previousQ.copy(t), this.previousTimestampS = n, this.outQ - }, et.prototype.getPosition = function() { - return null - }, et.prototype.getOrientation = function() { - var t = void 0; - if (this.isWithoutDeviceMotion && this._deviceOrientationQ) return this.deviceOrientationFixQ = this.deviceOrientationFixQ || (n = (new V).setFromAxisAngle(new U(0, 0, -1), 0), i = new V, -90 === window.orientation ? i.setFromAxisAngle(new U(0, 1, 0), Math.PI / -2) : i.setFromAxisAngle(new U(0, 1, 0), Math.PI / 2), n.multiply(i)), this.deviceOrientationFilterToWorldQ = this.deviceOrientationFilterToWorldQ || ((e = new V).setFromAxisAngle(new U(1, 0, 0), -Math.PI / 2), e), t = this._deviceOrientationQ, (r = new V).copy(t), r.multiply(this.deviceOrientationFilterToWorldQ), r.multiply(this.resetQ), r.multiply(this.worldToScreenQ), r.multiplyQuaternions(this.deviceOrientationFixQ, r), this.yawOnly && (r.x = 0, r.z = 0, r.normalize()), this.orientationOut_[0] = r.x, this.orientationOut_[1] = r.y, this.orientationOut_[2] = r.z, this.orientationOut_[3] = r.w, this.orientationOut_; - var e, n, i, r, o = this.filter.getOrientation(); - return t = this.posePredictor.getPrediction(o, this.gyroscope, this.previousTimestampS), (r = new V).copy(this.filterToWorldQ), r.multiply(this.resetQ), r.multiply(t), r.multiply(this.worldToScreenQ), this.yawOnly && (r.x = 0, r.z = 0, r.normalize()), this.orientationOut_[0] = r.x, this.orientationOut_[1] = r.y, this.orientationOut_[2] = r.z, this.orientationOut_[3] = r.w, this.orientationOut_ - }, et.prototype.resetPose = function() { - this.resetQ.copy(this.filter.getOrientation()), this.resetQ.x = 0, this.resetQ.y = 0, this.resetQ.z *= -1, this.resetQ.normalize(), m() && this.resetQ.multiply(this.inverseWorldToScreenQ), this.resetQ.multiply(this.originalPoseAdjustQ) - }, et.prototype.onDeviceOrientation_ = function(t) { - this._deviceOrientationQ = this._deviceOrientationQ || new V; - var e = t.alpha, - n = t.beta, - i = t.gamma; - e = (e || 0) * Math.PI / 180, n = (n || 0) * Math.PI / 180, i = (i || 0) * Math.PI / 180, this._deviceOrientationQ.setFromEulerYXZ(n, e, -i) - }, et.prototype.onDeviceMotion_ = function(t) { - this.updateDeviceMotion_(t) - }, et.prototype.updateDeviceMotion_ = function(t) { - var e = t.accelerationIncludingGravity, - n = t.rotationRate, - i = t.timeStamp / 1e3, - r = i - this.previousTimestampS; - return r < 0 ? (S("fusion-pose-sensor:invalid:non-monotonic", "Invalid timestamps detected: non-monotonic timestamp from devicemotion"), void(this.previousTimestampS = i)) : r <= .001 || r > 1 ? (S("fusion-pose-sensor:invalid:outside-threshold", "Invalid timestamps detected: Timestamp from devicemotion outside expected range."), void(this.previousTimestampS = i)) : (this.accelerometer.set(-e.x, -e.y, -e.z), n && (f() ? this.gyroscope.set(-n.beta, n.alpha, n.gamma) : this.gyroscope.set(n.alpha, n.beta, n.gamma), this.isDeviceMotionInRadians || this.gyroscope.multiplyScalar(Math.PI / 180), this.filter.addGyroMeasurement(this.gyroscope, i)), this.filter.addAccelMeasurement(this.accelerometer, i), void(this.previousTimestampS = i)) - }, et.prototype.onOrientationChange_ = function(t) { - this.setScreenTransform_() - }, et.prototype.onMessage_ = function(t) { - var e = t.data; - e && e.type && "devicemotion" === e.type.toLowerCase() && this.updateDeviceMotion_(e.deviceMotionEvent) - }, et.prototype.setScreenTransform_ = function() { - switch (this.worldToScreenQ.set(0, 0, 0, 1), window.orientation) { - case 0: - break; - case 90: - this.worldToScreenQ.setFromAxisAngle(new U(0, 0, 1), -Math.PI / 2); - break; - case -90: - this.worldToScreenQ.setFromAxisAngle(new U(0, 0, 1), Math.PI / 2) - } - this.inverseWorldToScreenQ.copy(this.worldToScreenQ), this.inverseWorldToScreenQ.inverse() - }, et.prototype.start = function() { - var t, e, n; - this.onDeviceMotionCallback_ = this.onDeviceMotion_.bind(this), this.onOrientationChangeCallback_ = this.onOrientationChange_.bind(this), this.onMessageCallback_ = this.onMessage_.bind(this), this.onDeviceOrientationCallback_ = this.onDeviceOrientation_.bind(this), a() && (t = window.self !== window.top, e = E(document.referrer), n = E(window.location.href), t && e !== n) && window.addEventListener("message", this.onMessageCallback_), window.addEventListener("orientationchange", this.onOrientationChangeCallback_), this.isWithoutDeviceMotion ? window.addEventListener("deviceorientation", this.onDeviceOrientationCallback_) : window.addEventListener("devicemotion", this.onDeviceMotionCallback_) - }, et.prototype.stop = function() { - window.removeEventListener("devicemotion", this.onDeviceMotionCallback_), window.removeEventListener("deviceorientation", this.onDeviceOrientationCallback_), window.removeEventListener("orientationchange", this.onOrientationChangeCallback_), window.removeEventListener("message", this.onMessageCallback_) - }; - var nt = new U(1, 0, 0), - it = new U(0, 0, 1), - rt = new V; - rt.setFromAxisAngle(nt, -Math.PI / 2), rt.multiply((new V).setFromAxisAngle(it, Math.PI / 2)); - var ot = function() { - function t(e) { - ! function(t, e) { - if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") - }(this, t), this.config = e, this.sensor = null, this.fusionSensor = null, this._out = new Float32Array(4), this.api = null, this.errors = [], this._sensorQ = new V, this._outQ = new V, this._onSensorRead = this._onSensorRead.bind(this), this._onSensorError = this._onSensorError.bind(this), this.init() - } - return r(t, [{ - key: "init", - value: function() { - var t = null; - try { - (t = new RelativeOrientationSensor({ - frequency: 60, - referenceFrame: "screen" - })).addEventListener("error", this._onSensorError) - } catch (t) { - this.errors.push(t), "SecurityError" === t.name ? (console.error("Cannot construct sensors due to the Feature Policy"), console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'), this.useDeviceMotion()) : "ReferenceError" === t.name ? this.useDeviceMotion() : console.error(t) - } - t && (this.api = "sensor", this.sensor = t, this.sensor.addEventListener("reading", this._onSensorRead), this.sensor.start()) - } - }, { - key: "useDeviceMotion", - value: function() { - this.api = "devicemotion", this.fusionSensor = new et(this.config.K_FILTER, this.config.PREDICTION_TIME_S, this.config.YAW_ONLY, this.config.DEBUG), this.sensor && (this.sensor.removeEventListener("reading", this._onSensorRead), this.sensor.removeEventListener("error", this._onSensorError), this.sensor = null) - } - }, { - key: "getOrientation", - value: function() { - if (this.fusionSensor) return this.fusionSensor.getOrientation(); - if (!this.sensor || !this.sensor.quaternion) return this._out[0] = this._out[1] = this._out[2] = 0, this._out[3] = 1, this._out; - var t = this.sensor.quaternion; - this._sensorQ.set(t[0], t[1], t[2], t[3]); - var e = this._outQ; - return e.copy(rt), e.multiply(this._sensorQ), this.config.YAW_ONLY && (e.x = e.z = 0, e.normalize()), this._out[0] = e.x, this._out[1] = e.y, this._out[2] = e.z, this._out[3] = e.w, this._out - } - }, { - key: "_onSensorError", - value: function(t) { - this.errors.push(t.error), "NotAllowedError" === t.error.name ? console.error("Permission to access sensor was denied") : "NotReadableError" === t.error.name ? console.error("Sensor could not be read") : console.error(t.error), this.useDeviceMotion() - } - }, { - key: "_onSensorRead", - value: function() {} - }]), t - }(); - - function st() { - this.loadIcon_(); - var t = document.createElement("div"); - (o = t.style).position = "fixed", o.top = 0, o.right = 0, o.bottom = 0, o.left = 0, o.backgroundColor = "gray", o.fontFamily = "sans-serif", o.zIndex = 1e6; - var e = document.createElement("img"); - e.src = this.icon, (o = e.style).marginLeft = "25%", o.marginTop = "25%", o.width = "50%", t.appendChild(e); - var n = document.createElement("div"); - (o = n.style).textAlign = "center", o.fontSize = "16px", o.lineHeight = "24px", o.margin = "24px 25%", o.width = "50%", n.innerHTML = "Place your phone into your Cardboard viewer.", t.appendChild(n); - var i = document.createElement("div"); - (o = i.style).backgroundColor = "#CFD8DC", o.position = "fixed", o.bottom = 0, o.width = "100%", o.height = "48px", o.padding = "14px 24px", o.boxSizing = "border-box", o.color = "#656A6B", t.appendChild(i); - var r = document.createElement("div"); - r.style.float = "left", r.innerHTML = "No Cardboard viewer?"; - var o, s = document.createElement("a"); - s.href = "https://www.google.com/get/cardboard/get-cardboard/", s.innerHTML = "get one", s.target = "_blank", (o = s.style).float = "right", o.fontWeight = 600, o.textTransform = "uppercase", o.borderLeft = "1px solid gray", o.paddingLeft = "24px", o.textDecoration = "none", o.color = "#656A6B", i.appendChild(r), i.appendChild(s), this.overlay = t, this.text = n, this.hide() - } - - function at(t) { - try { - this.selectedKey = localStorage.getItem("WEBVR_CARDBOARD_VIEWER") - } catch (t) { - console.error("Failed to load viewer profile: %s", t) - } - this.selectedKey || (this.selectedKey = t || "CardboardV1"), this.dialog = this.createDialog_(q.Viewers), this.root = null, this.onChangeCallbacks_ = [] - } - st.prototype.show = function(t) { - t || this.overlay.parentElement ? t && (this.overlay.parentElement && this.overlay.parentElement != t && this.overlay.parentElement.removeChild(this.overlay), t.appendChild(this.overlay)) : document.body.appendChild(this.overlay), this.overlay.style.display = "block"; - var e = this.overlay.querySelector("img").style; - m() ? (e.width = "20%", e.marginLeft = "40%", e.marginTop = "3%") : (e.width = "50%", e.marginLeft = "25%", e.marginTop = "25%") - }, st.prototype.hide = function() { - this.overlay.style.display = "none" - }, st.prototype.showTemporarily = function(t, e) { - this.show(e), this.timer = setTimeout(this.hide.bind(this), t) - }, st.prototype.disableShowTemporarily = function() { - clearTimeout(this.timer) - }, st.prototype.update = function() { - this.disableShowTemporarily(), !m() && _() ? this.show() : this.hide() - }, st.prototype.loadIcon_ = function() { - this.icon = "data:image/svg+xml," + encodeURIComponent("") - }, at.prototype.show = function(t) { - this.root = t, t.appendChild(this.dialog), this.dialog.querySelector("#" + this.selectedKey).checked = !0, this.dialog.style.display = "block" - }, at.prototype.hide = function() { - this.root && this.root.contains(this.dialog) && this.root.removeChild(this.dialog), this.dialog.style.display = "none" - }, at.prototype.getCurrentViewer = function() { - return q.Viewers[this.selectedKey] - }, at.prototype.getSelectedKey_ = function() { - var t = this.dialog.querySelector("input[name=field]:checked"); - return t ? t.id : null - }, at.prototype.onChange = function(t) { - this.onChangeCallbacks_.push(t) - }, at.prototype.fireOnChange_ = function(t) { - for (var e = 0; e < this.onChangeCallbacks_.length; e++) this.onChangeCallbacks_[e](t) - }, at.prototype.onSave_ = function() { - if (this.selectedKey = this.getSelectedKey_(), this.selectedKey && q.Viewers[this.selectedKey]) { - this.fireOnChange_(q.Viewers[this.selectedKey]); - try { - localStorage.setItem("WEBVR_CARDBOARD_VIEWER", this.selectedKey) - } catch (t) { - console.error("Failed to save viewer profile: %s", t) - } - this.hide() - } else console.error("ViewerSelector.onSave_: this should never happen!") - }, at.prototype.createDialog_ = function(t) { - var e = document.createElement("div"); - e.classList.add("webvr-polyfill-viewer-selector"), e.style.display = "none"; - var n = document.createElement("div"); - (r = n.style).position = "fixed", r.left = 0, r.top = 0, r.width = "100%", r.height = "100%", r.background = "rgba(0, 0, 0, 0.3)", n.addEventListener("click", this.hide.bind(this)); - var i = document.createElement("div"), - r = i.style; - for (var o in r.boxSizing = "border-box", r.position = "fixed", r.top = "24px", r.left = "50%", r.marginLeft = "-140px", r.width = "280px", r.padding = "24px", r.overflow = "hidden", r.background = "#fafafa", r.fontFamily = "'Roboto', sans-serif", r.boxShadow = "0px 5px 20px #666", i.appendChild(this.createH1_("Select your viewer")), t) i.appendChild(this.createChoice_(o, t[o].label)); - return i.appendChild(this.createButton_("Save", this.onSave_.bind(this))), e.appendChild(n), e.appendChild(i), e - }, at.prototype.createH1_ = function(t) { - var e = document.createElement("h1"), - n = e.style; - return n.color = "black", n.fontSize = "20px", n.fontWeight = "bold", n.marginTop = 0, n.marginBottom = "24px", e.innerHTML = t, e - }, at.prototype.createChoice_ = function(t, e) { - var n = document.createElement("div"); - n.style.marginTop = "8px", n.style.color = "black"; - var i = document.createElement("input"); - i.style.fontSize = "30px", i.setAttribute("id", t), i.setAttribute("type", "radio"), i.setAttribute("value", t), i.setAttribute("name", "field"); - var r = document.createElement("label"); - return r.style.marginLeft = "4px", r.setAttribute("for", t), r.innerHTML = e, n.appendChild(i), n.appendChild(r), n - }, at.prototype.createButton_ = function(t, e) { - var n = document.createElement("button"); - n.innerHTML = t; - var i = n.style; - return i.float = "right", i.textTransform = "uppercase", i.color = "#1094f7", i.fontSize = "14px", i.letterSpacing = 0, i.border = 0, i.background = "none", i.marginTop = "16px", n.addEventListener("click", e), n - }, "undefined" != typeof window ? window : void 0 !== e || "undefined" != typeof self && self; - var lt, ct = (lt = function(t, e) { - return t(e = { - exports: {} - }, e.exports), e.exports - }((function(t, e) { - ! function(e, n) { - t.exports = n() - }(0, (function() { - return function(t) { - var e = {}; - - function n(i) { - if (e[i]) return e[i].exports; - var r = e[i] = { - i: i, - l: !1, - exports: {} - }; - return t[i].call(r.exports, r, r.exports, n), r.l = !0, r.exports - } - return n.m = t, n.c = e, n.d = function(t, e, i) { - n.o(t, e) || Object.defineProperty(t, e, { - configurable: !1, - enumerable: !0, - get: i - }) - }, n.n = function(t) { - var e = t && t.__esModule ? function() { - return t.default - } : function() { - return t - }; - return n.d(e, "a", e), e - }, n.o = function(t, e) { - return Object.prototype.hasOwnProperty.call(t, e) - }, n.p = "", n(n.s = 0) - }([function(t, e, n) { - var i = function() { - function t(t, e) { - for (var n = 0; n < e.length; n++) { - var i = e[n]; - i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) - } - } - return function(e, n, i) { - return n && t(e.prototype, n), i && t(e, i), e - } - }(), - r = n(1), - o = "undefined" != typeof navigator && parseFloat(("" + (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ""])[1]).replace("undefined", "3_2").replace("_", ".").replace("_", "")) < 10 && !window.MSStream, - s = function() { - function t() { - ! function(t, e) { - if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") - }(this, t), o ? this.noSleepTimer = null : (this.noSleepVideo = document.createElement("video"), this.noSleepVideo.setAttribute("playsinline", ""), this.noSleepVideo.setAttribute("src", r), this.noSleepVideo.addEventListener("timeupdate", function(t) { - this.noSleepVideo.currentTime > .5 && (this.noSleepVideo.currentTime = Math.random()) - }.bind(this))) - } - return i(t, [{ - key: "enable", - value: function() { - o ? (this.disable(), this.noSleepTimer = window.setInterval((function() { - window.location.href = "/", window.setTimeout(window.stop, 0) - }), 15e3)) : this.noSleepVideo.play() - } - }, { - key: "disable", - value: function() { - o ? this.noSleepTimer && (window.clearInterval(this.noSleepTimer), this.noSleepTimer = null) : this.noSleepVideo.pause() - } - }]), t - }(); - t.exports = s - }, function(t, e, n) { - t.exports = "data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA=" - }]) - })) - }))) && lt.__esModule && Object.prototype.hasOwnProperty.call(lt, "default") ? lt.default : lt, - ht = 1e3, - ut = [0, 0, .5, 1], - dt = [.5, 0, .5, 1], - pt = window.requestAnimationFrame, - ft = window.cancelAnimationFrame; - - function mt(t) { - Object.defineProperties(this, { - hasPosition: { - writable: !1, - enumerable: !0, - value: t.hasPosition - }, - hasExternalDisplay: { - writable: !1, - enumerable: !0, - value: t.hasExternalDisplay - }, - canPresent: { - writable: !1, - enumerable: !0, - value: t.canPresent - }, - maxLayers: { - writable: !1, - enumerable: !0, - value: t.maxLayers - }, - hasOrientation: { - enumerable: !0, - get: function() { - return T("VRDisplayCapabilities.prototype.hasOrientation", "VRDisplay.prototype.getFrameData"), t.hasOrientation - } - } - }) - } - - function gt(t) { - var e = !("wakelock" in (t = t || {})) || t.wakelock; - this.isPolyfilled = !0, this.displayId = ht++, this.displayName = "", this.depthNear = .01, this.depthFar = 1e4, this.isPresenting = !1, Object.defineProperty(this, "isConnected", { - get: function() { - return T("VRDisplay.prototype.isConnected", "VRDisplayCapabilities.prototype.hasExternalDisplay"), !1 - } - }), this.capabilities = new mt({ - hasPosition: !1, - hasOrientation: !1, - hasExternalDisplay: !1, - canPresent: !1, - maxLayers: 1 - }), this.stageParameters = null, this.waitingForPresent_ = !1, this.layer_ = null, this.originalParent_ = null, this.fullscreenElement_ = null, this.fullscreenWrapper_ = null, this.fullscreenElementCachedStyle_ = null, this.fullscreenEventTarget_ = null, this.fullscreenChangeHandler_ = null, this.fullscreenErrorHandler_ = null, e && _() && (this.wakelock_ = new ct) - } - gt.prototype.getFrameData = function(t) { - return M(t, this._getPose(), this) - }, gt.prototype.getPose = function() { - return T("VRDisplay.prototype.getPose", "VRDisplay.prototype.getFrameData"), this._getPose() - }, gt.prototype.resetPose = function() { - return T("VRDisplay.prototype.resetPose"), this._resetPose() - }, gt.prototype.getImmediatePose = function() { - return T("VRDisplay.prototype.getImmediatePose", "VRDisplay.prototype.getFrameData"), this._getPose() - }, gt.prototype.requestAnimationFrame = function(t) { - return pt(t) - }, gt.prototype.cancelAnimationFrame = function(t) { - return ft(t) - }, gt.prototype.wrapForFullscreen = function(t) { - if (a()) return t; - if (!this.fullscreenWrapper_) { - this.fullscreenWrapper_ = document.createElement("div"); - var e = ["height: " + Math.min(screen.height, screen.width) + "px !important", "top: 0 !important", "left: 0 !important", "right: 0 !important", "border: 0", "margin: 0", "padding: 0", "z-index: 999999 !important", "position: fixed"]; - this.fullscreenWrapper_.setAttribute("style", e.join("; ") + ";"), this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper") - } - if (this.fullscreenElement_ == t) return this.fullscreenWrapper_; - if (this.fullscreenElement_ && (this.originalParent_ ? this.originalParent_.appendChild(this.fullscreenElement_) : this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)), this.fullscreenElement_ = t, this.originalParent_ = t.parentElement, this.originalParent_ || document.body.appendChild(t), !this.fullscreenWrapper_.parentElement) { - var n = this.fullscreenElement_.parentElement; - n.insertBefore(this.fullscreenWrapper_, this.fullscreenElement_), n.removeChild(this.fullscreenElement_) - } - this.fullscreenWrapper_.insertBefore(this.fullscreenElement_, this.fullscreenWrapper_.firstChild), this.fullscreenElementCachedStyle_ = this.fullscreenElement_.getAttribute("style"); - var i = this; - return function() { - if (i.fullscreenElement_) { - var t = ["position: absolute", "top: 0", "left: 0", "width: " + Math.max(screen.width, screen.height) + "px", "height: " + Math.min(screen.height, screen.width) + "px", "border: 0", "margin: 0", "padding: 0"]; - i.fullscreenElement_.setAttribute("style", t.join("; ") + ";") - } - }(), this.fullscreenWrapper_ - }, gt.prototype.removeFullscreenWrapper = function() { - if (this.fullscreenElement_) { - var t = this.fullscreenElement_; - this.fullscreenElementCachedStyle_ ? t.setAttribute("style", this.fullscreenElementCachedStyle_) : t.removeAttribute("style"), this.fullscreenElement_ = null, this.fullscreenElementCachedStyle_ = null; - var e = this.fullscreenWrapper_.parentElement; - return this.fullscreenWrapper_.removeChild(t), this.originalParent_ === e ? e.insertBefore(t, this.fullscreenWrapper_) : this.originalParent_ && this.originalParent_.appendChild(t), e.removeChild(this.fullscreenWrapper_), t - } - }, gt.prototype.requestPresent = function(t) { - var e = this.isPresenting, - n = this; - return t instanceof Array || (T("VRDisplay.prototype.requestPresent with non-array argument", "an array of VRLayers as the first argument"), t = [t]), new Promise((function(i, r) { - if (n.capabilities.canPresent) - if (0 == t.length || t.length > n.capabilities.maxLayers) r(new Error("Invalid number of layers.")); - else { - var o = t[0]; - if (o.source) { - var s = o.leftBounds || ut, - c = o.rightBounds || dt; - if (e) { - var h = n.layer_; - h.source !== o.source && (h.source = o.source); - for (var u = 0; u < 4; u++) h.leftBounds[u] = s[u], h.rightBounds[u] = c[u]; - return n.wrapForFullscreen(n.layer_.source), n.updatePresent_(), void i() - } - if (n.layer_ = { - predistorted: o.predistorted, - source: o.source, - leftBounds: s.slice(0), - rightBounds: c.slice(0) - }, n.waitingForPresent_ = !1, n.layer_ && n.layer_.source) { - var d = n.wrapForFullscreen(n.layer_.source); - n.addFullscreenListeners_(d, (function() { - var t = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement; - n.isPresenting = d === t, n.isPresenting ? (screen.orientation && screen.orientation.lock && screen.orientation.lock("landscape-primary").catch((function(t) { - console.error("screen.orientation.lock() failed due to", t.message) - })), n.waitingForPresent_ = !1, n.beginPresent_(), i()) : (screen.orientation && screen.orientation.unlock && screen.orientation.unlock(), n.removeFullscreenWrapper(), n.disableWakeLock(), n.endPresent_(), n.removeFullscreenListeners_()), n.fireVRDisplayPresentChange_() - }), (function() { - n.waitingForPresent_ && (n.removeFullscreenWrapper(), n.removeFullscreenListeners_(), n.disableWakeLock(), n.waitingForPresent_ = !1, n.isPresenting = !1, r(new Error("Unable to present."))) - })), - function(t) { - if (l()) return !1; - if (t.requestFullscreen) t.requestFullscreen(); - else if (t.webkitRequestFullscreen) t.webkitRequestFullscreen(); - else if (t.mozRequestFullScreen) t.mozRequestFullScreen(); - else { - if (!t.msRequestFullscreen) return !1; - t.msRequestFullscreen() - } - return !0 - }(d) ? (n.enableWakeLock(), n.waitingForPresent_ = !0) : (a() || l()) && (n.enableWakeLock(), n.isPresenting = !0, n.beginPresent_(), n.fireVRDisplayPresentChange_(), i()) - } - n.waitingForPresent_ || a() || (y(), r(new Error("Unable to present."))) - } else i() - } - else r(new Error("VRDisplay is not capable of presenting.")) - })) - }, gt.prototype.exitPresent = function() { - var t = this.isPresenting, - e = this; - return this.isPresenting = !1, this.layer_ = null, this.disableWakeLock(), new Promise((function(n, i) { - t ? (!y() && a() && (e.endPresent_(), e.fireVRDisplayPresentChange_()), l() && (e.removeFullscreenWrapper(), e.removeFullscreenListeners_(), e.endPresent_(), e.fireVRDisplayPresentChange_()), n()) : i(new Error("Was not presenting to VRDisplay.")) - })) - }, gt.prototype.getLayers = function() { - return this.layer_ ? [this.layer_] : [] - }, gt.prototype.fireVRDisplayPresentChange_ = function() { - var t = new CustomEvent("vrdisplaypresentchange", { - detail: { - display: this - } - }); - window.dispatchEvent(t) - }, gt.prototype.fireVRDisplayConnect_ = function() { - var t = new CustomEvent("vrdisplayconnect", { - detail: { - display: this - } - }); - window.dispatchEvent(t) - }, gt.prototype.addFullscreenListeners_ = function(t, e, n) { - this.removeFullscreenListeners_(), this.fullscreenEventTarget_ = t, this.fullscreenChangeHandler_ = e, this.fullscreenErrorHandler_ = n, e && (document.fullscreenEnabled ? t.addEventListener("fullscreenchange", e, !1) : document.webkitFullscreenEnabled ? t.addEventListener("webkitfullscreenchange", e, !1) : document.mozFullScreenEnabled ? document.addEventListener("mozfullscreenchange", e, !1) : document.msFullscreenEnabled && t.addEventListener("msfullscreenchange", e, !1)), n && (document.fullscreenEnabled ? t.addEventListener("fullscreenerror", n, !1) : document.webkitFullscreenEnabled ? t.addEventListener("webkitfullscreenerror", n, !1) : document.mozFullScreenEnabled ? document.addEventListener("mozfullscreenerror", n, !1) : document.msFullscreenEnabled && t.addEventListener("msfullscreenerror", n, !1)) - }, gt.prototype.removeFullscreenListeners_ = function() { - if (this.fullscreenEventTarget_) { - var t = this.fullscreenEventTarget_; - if (this.fullscreenChangeHandler_) { - var e = this.fullscreenChangeHandler_; - t.removeEventListener("fullscreenchange", e, !1), t.removeEventListener("webkitfullscreenchange", e, !1), document.removeEventListener("mozfullscreenchange", e, !1), t.removeEventListener("msfullscreenchange", e, !1) - } - if (this.fullscreenErrorHandler_) { - var n = this.fullscreenErrorHandler_; - t.removeEventListener("fullscreenerror", n, !1), t.removeEventListener("webkitfullscreenerror", n, !1), document.removeEventListener("mozfullscreenerror", n, !1), t.removeEventListener("msfullscreenerror", n, !1) - } - this.fullscreenEventTarget_ = null, this.fullscreenChangeHandler_ = null, this.fullscreenErrorHandler_ = null - } - }, gt.prototype.enableWakeLock = function() { - this.wakelock_ && this.wakelock_.enable() - }, gt.prototype.disableWakeLock = function() { - this.wakelock_ && this.wakelock_.disable() - }, gt.prototype.beginPresent_ = function() {}, gt.prototype.endPresent_ = function() {}, gt.prototype.submitFrame = function(t) {}, gt.prototype.getEyeParameters = function(t) { - return null - }; - var vt = { - ADDITIONAL_VIEWERS: [], - DEFAULT_VIEWER: "", - MOBILE_WAKE_LOCK: !0, - DEBUG: !1, - DPDB_URL: "https://dpdb.webvr.rocks/dpdb.json", - K_FILTER: .98, - PREDICTION_TIME_S: .04, - CARDBOARD_UI_DISABLED: !1, - ROTATE_INSTRUCTIONS_DISABLED: !1, - YAW_ONLY: !1, - BUFFER_SCALE: .5, - DIRTY_SUBMIT_FRAME_BINDINGS: !1 - }, - yt = "left", - At = "right"; - - function xt(t) { - var e = b({}, vt); - t = b(e, t || {}), gt.call(this, { - wakelock: t.MOBILE_WAKE_LOCK - }), this.config = t, this.displayName = "Cardboard VRDisplay", this.capabilities = new mt({ - hasPosition: !1, - hasOrientation: !0, - hasExternalDisplay: !1, - canPresent: !0, - maxLayers: 1 - }), this.stageParameters = null, this.bufferScale_ = this.config.BUFFER_SCALE, this.poseSensor_ = new ot(this.config), this.distorter_ = null, this.cardboardUI_ = null, this.dpdb_ = new Z(this.config.DPDB_URL, this.onDeviceParamsUpdated_.bind(this)), this.deviceInfo_ = new q(this.dpdb_.getDeviceParams(), t.ADDITIONAL_VIEWERS), this.viewerSelector_ = new at(t.DEFAULT_VIEWER), this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)), this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()), this.config.ROTATE_INSTRUCTIONS_DISABLED || (this.rotateInstructions_ = new st), a() && window.addEventListener("resize", this.onResize_.bind(this)) - } - return xt.prototype = Object.create(gt.prototype), xt.prototype._getPose = function() { - return { - position: null, - orientation: this.poseSensor_.getOrientation(), - linearVelocity: null, - linearAcceleration: null, - angularVelocity: null, - angularAcceleration: null - } - }, xt.prototype._resetPose = function() { - this.poseSensor_.resetPose && this.poseSensor_.resetPose() - }, xt.prototype._getFieldOfView = function(t) { - var e; - if (t == yt) e = this.deviceInfo_.getFieldOfViewLeftEye(); - else { - if (t != At) return console.error("Invalid eye provided: %s", t), null; - e = this.deviceInfo_.getFieldOfViewRightEye() - } - return e - }, xt.prototype._getEyeOffset = function(t) { - var e; - if (t == yt) e = [.5 * -this.deviceInfo_.viewer.interLensDistance, 0, 0]; - else { - if (t != At) return console.error("Invalid eye provided: %s", t), null; - e = [.5 * this.deviceInfo_.viewer.interLensDistance, 0, 0] - } - return e - }, xt.prototype.getEyeParameters = function(t) { - var e = this._getEyeOffset(t), - n = this._getFieldOfView(t), - i = { - offset: e, - renderWidth: .5 * this.deviceInfo_.device.width * this.bufferScale_, - renderHeight: this.deviceInfo_.device.height * this.bufferScale_ - }; - return Object.defineProperty(i, "fieldOfView", { - enumerable: !0, - get: function() { - return T("VRFieldOfView", "VRFrameData's projection matrices"), n - } - }), i - }, xt.prototype.onDeviceParamsUpdated_ = function(t) { - this.config.DEBUG && console.log("DPDB reported that device params were updated."), this.deviceInfo_.updateDeviceParams(t), this.distorter_ && this.distorter_.updateDeviceInfo(this.deviceInfo_) - }, xt.prototype.updateBounds_ = function() { - this.layer_ && this.distorter_ && (this.layer_.leftBounds || this.layer_.rightBounds) && this.distorter_.setTextureBounds(this.layer_.leftBounds, this.layer_.rightBounds) - }, xt.prototype.beginPresent_ = function() { - var t = this.layer_.source.getContext("webgl"); - t || (t = this.layer_.source.getContext("experimental-webgl")), t || (t = this.layer_.source.getContext("webgl2")), t && (this.layer_.predistorted ? this.config.CARDBOARD_UI_DISABLED || (t.canvas.width = g() * this.bufferScale_, t.canvas.height = v() * this.bufferScale_, this.cardboardUI_ = new N(t)) : (this.config.CARDBOARD_UI_DISABLED || (this.cardboardUI_ = new N(t)), this.distorter_ = new P(t, this.cardboardUI_, this.config.BUFFER_SCALE, this.config.DIRTY_SUBMIT_FRAME_BINDINGS), this.distorter_.updateDeviceInfo(this.deviceInfo_)), this.cardboardUI_ && this.cardboardUI_.listen(function(t) { - this.viewerSelector_.show(this.layer_.source.parentElement), t.stopPropagation(), t.preventDefault() - }.bind(this), function(t) { - this.exitPresent(), t.stopPropagation(), t.preventDefault() - }.bind(this)), this.rotateInstructions_ && (m() && _() ? this.rotateInstructions_.showTemporarily(3e3, this.layer_.source.parentElement) : this.rotateInstructions_.update()), this.orientationHandler = this.onOrientationChange_.bind(this), window.addEventListener("orientationchange", this.orientationHandler), this.vrdisplaypresentchangeHandler = this.updateBounds_.bind(this), window.addEventListener("vrdisplaypresentchange", this.vrdisplaypresentchangeHandler), this.fireVRDisplayDeviceParamsChange_()) - }, xt.prototype.endPresent_ = function() { - this.distorter_ && (this.distorter_.destroy(), this.distorter_ = null), this.cardboardUI_ && (this.cardboardUI_.destroy(), this.cardboardUI_ = null), this.rotateInstructions_ && this.rotateInstructions_.hide(), this.viewerSelector_.hide(), window.removeEventListener("orientationchange", this.orientationHandler), window.removeEventListener("vrdisplaypresentchange", this.vrdisplaypresentchangeHandler) - }, xt.prototype.updatePresent_ = function() { - this.endPresent_(), this.beginPresent_() - }, xt.prototype.submitFrame = function(t) { - if (this.distorter_) this.updateBounds_(), this.distorter_.submitFrame(); - else if (this.cardboardUI_ && this.layer_) { - var e = this.layer_.source.getContext("webgl"); - e || (e = this.layer_.source.getContext("experimental-webgl")), e || (e = this.layer_.source.getContext("webgl2")); - var n = e.canvas; - n.width == this.lastWidth && n.height == this.lastHeight || this.cardboardUI_.onResize(), this.lastWidth = n.width, this.lastHeight = n.height, this.cardboardUI_.render() - } - }, xt.prototype.onOrientationChange_ = function(t) { - this.viewerSelector_.hide(), this.rotateInstructions_ && this.rotateInstructions_.update(), this.onResize_() - }, xt.prototype.onResize_ = function(t) { - if (this.layer_) { - var e = this.layer_.source.getContext("webgl"); - e || (e = this.layer_.source.getContext("experimental-webgl")), e || (e = this.layer_.source.getContext("webgl2")), e.canvas.setAttribute("style", ["position: absolute", "top: 0", "left: 0", "width: 100vw", "height: 100vh", "border: 0", "margin: 0", "padding: 0px", "box-sizing: content-box"].join("; ") + ";"), w(e.canvas) - } - }, xt.prototype.onViewerChanged_ = function(t) { - this.deviceInfo_.setViewer(t), this.distorter_ && this.distorter_.updateDeviceInfo(this.deviceInfo_), this.fireVRDisplayDeviceParamsChange_() - }, xt.prototype.fireVRDisplayDeviceParamsChange_ = function() { - var t = new CustomEvent("vrdisplaydeviceparamschange", { - detail: { - vrdisplay: this, - deviceInfo: this.deviceInfo_ - } - }); - window.dispatchEvent(t) - }, xt.VRFrameData = function() { - this.leftProjectionMatrix = new Float32Array(16), this.leftViewMatrix = new Float32Array(16), this.rightProjectionMatrix = new Float32Array(16), this.rightViewMatrix = new Float32Array(16), this.pose = null - }, xt.VRDisplay = gt, xt - }() - }))) && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t, - a = { - ADDITIONAL_VIEWERS: [], - DEFAULT_VIEWER: "", - PROVIDE_MOBILE_VRDISPLAY: !0, - MOBILE_WAKE_LOCK: !0, - DEBUG: !1, - DPDB_URL: "https://dpdb.webvr.rocks/dpdb.json", - K_FILTER: .98, - PREDICTION_TIME_S: .04, - CARDBOARD_UI_DISABLED: !1, - ROTATE_INSTRUCTIONS_DISABLED: !1, - YAW_ONLY: !1, - BUFFER_SCALE: .5, - DIRTY_SUBMIT_FRAME_BINDINGS: !1 - }; - - function l(t) { - this.config = o(o({}, a), t), this.polyfillDisplays = [], this.enabled = !1, this.hasNative = "getVRDisplays" in navigator, this.native = {}, this.native.getVRDisplays = navigator.getVRDisplays, this.native.VRFrameData = window.VRFrameData, this.native.VRDisplay = window.VRDisplay, (!this.hasNative || this.config.PROVIDE_MOBILE_VRDISPLAY && n()) && (this.enable(), this.getVRDisplays().then((function(t) { - t && t[0] && t[0].fireVRDisplayConnect_ && t[0].fireVRDisplayConnect_() - }))) - } - l.prototype.getPolyfillDisplays = function() { - if (this._polyfillDisplaysPopulated) return this.polyfillDisplays; - if (n()) { - var t = new s({ - ADDITIONAL_VIEWERS: this.config.ADDITIONAL_VIEWERS, - DEFAULT_VIEWER: this.config.DEFAULT_VIEWER, - MOBILE_WAKE_LOCK: this.config.MOBILE_WAKE_LOCK, - DEBUG: this.config.DEBUG, - DPDB_URL: this.config.DPDB_URL, - CARDBOARD_UI_DISABLED: this.config.CARDBOARD_UI_DISABLED, - K_FILTER: this.config.K_FILTER, - PREDICTION_TIME_S: this.config.PREDICTION_TIME_S, - ROTATE_INSTRUCTIONS_DISABLED: this.config.ROTATE_INSTRUCTIONS_DISABLED, - YAW_ONLY: this.config.YAW_ONLY, - BUFFER_SCALE: this.config.BUFFER_SCALE, - DIRTY_SUBMIT_FRAME_BINDINGS: this.config.DIRTY_SUBMIT_FRAME_BINDINGS - }); - this.polyfillDisplays.push(t) - } - return this._polyfillDisplaysPopulated = !0, this.polyfillDisplays - }, l.prototype.enable = function() { - if (this.enabled = !0, this.hasNative && this.native.VRFrameData) { - var t = this.native.VRFrameData, - e = new this.native.VRFrameData, - n = this.native.VRDisplay.prototype.getFrameData; - window.VRDisplay.prototype.getFrameData = function(i) { - i instanceof t ? n.call(this, i) : (n.call(this, e), i.pose = e.pose, r(e.leftProjectionMatrix, i.leftProjectionMatrix), r(e.rightProjectionMatrix, i.rightProjectionMatrix), r(e.leftViewMatrix, i.leftViewMatrix), r(e.rightViewMatrix, i.rightViewMatrix)) - } - } - navigator.getVRDisplays = this.getVRDisplays.bind(this), window.VRDisplay = s.VRDisplay, window.VRFrameData = s.VRFrameData - }, l.prototype.getVRDisplays = function() { - var t = this; - return this.config, this.hasNative ? this.native.getVRDisplays.call(navigator).then((function(e) { - return e.length > 0 ? e : t.getPolyfillDisplays() - })) : Promise.resolve(this.getPolyfillDisplays()) - }, l.version = "0.10.12", l.VRFrameData = s.VRFrameData, l.VRDisplay = s.VRDisplay; - var c = Object.freeze({ - default: l - }), - h = c && l || c; - return void 0 !== e && e.window && (e.document || (e.document = e.window.document), e.navigator || (e.navigator = e.window.navigator)), h - }() - }))); - const h = 0, - u = 1, - d = 2; - - function p() {} - Object.assign(p.prototype, { - addEventListener: function(t, e) { - void 0 === this._listeners && (this._listeners = {}); - const n = this._listeners; - void 0 === n[t] && (n[t] = []), -1 === n[t].indexOf(e) && n[t].push(e) - }, - hasEventListener: function(t, e) { - if (void 0 === this._listeners) return !1; - const n = this._listeners; - return void 0 !== n[t] && -1 !== n[t].indexOf(e) - }, - removeEventListener: function(t, e) { - if (void 0 === this._listeners) return; - const n = this._listeners[t]; - if (void 0 !== n) { - const t = n.indexOf(e); - 1 !== t && n.splice(t, 1) - } - }, - dispatchEvent: function(t) { - if (void 0 === this._listeners) return; - const e = this._listeners[t.type]; - if (void 0 !== e) { - t.target = this; - const n = e.slice(0); - for (let e = 0, i = n.length; e < i; e++) n[e].call(this, t) - } - } - }); - const f = []; - for (let t = 0; t < 256; t++) f[t] = (t < 16 ? "0" : "") + t.toString(16); - let m = 1234567; - const g = { - DEG2RAD: Math.PI / 180, - RAD2DEG: 180 / Math.PI, - generateUUID: function() { - const t = 4294967295 * Math.random() | 0, - e = 4294967295 * Math.random() | 0, - n = 4294967295 * Math.random() | 0, - i = 4294967295 * Math.random() | 0; - return (f[255 & t] + f[t >> 8 & 255] + f[t >> 16 & 255] + f[t >> 24 & 255] + "-" + f[255 & e] + f[e >> 8 & 255] + "-" + f[e >> 16 & 15 | 64] + f[e >> 24 & 255] + "-" + f[63 & n | 128] + f[n >> 8 & 255] + "-" + f[n >> 16 & 255] + f[n >> 24 & 255] + f[255 & i] + f[i >> 8 & 255] + f[i >> 16 & 255] + f[i >> 24 & 255]).toUpperCase() - }, - clamp: function(t, e, n) { - return Math.max(e, Math.min(n, t)) - }, - euclideanModulo: function(t, e) { - return (t % e + e) % e - }, - mapLinear: function(t, e, n, i, r) { - return i + (t - e) * (r - i) / (n - e) - }, - lerp: function(t, e, n) { - return (1 - n) * t + n * e - }, - damp: function(t, e, n, i) { - return g.lerp(t, e, 1 - Math.exp(-n * i)) - }, - pingpong: function(t, e = 1) { - return e - Math.abs(g.euclideanModulo(t, 2 * e) - e) - }, - smoothstep: function(t, e, n) { - return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * (3 - 2 * t) - }, - smootherstep: function(t, e, n) { - return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * t * (t * (6 * t - 15) + 10) - }, - randInt: function(t, e) { - return t + Math.floor(Math.random() * (e - t + 1)) - }, - randFloat: function(t, e) { - return t + Math.random() * (e - t) - }, - randFloatSpread: function(t) { - return t * (.5 - Math.random()) - }, - seededRandom: function(t) { - return void 0 !== t && (m = t % 2147483647), m = 16807 * m % 2147483647, (m - 1) / 2147483646 - }, - degToRad: function(t) { - return t * g.DEG2RAD - }, - radToDeg: function(t) { - return t * g.RAD2DEG - }, - isPowerOfTwo: function(t) { - return 0 == (t & t - 1) && 0 !== t - }, - ceilPowerOfTwo: function(t) { - return Math.pow(2, Math.ceil(Math.log(t) / Math.LN2)) - }, - floorPowerOfTwo: function(t) { - return Math.pow(2, Math.floor(Math.log(t) / Math.LN2)) - }, - setQuaternionFromProperEuler: function(t, e, n, i, r) { - const o = Math.cos, - s = Math.sin, - a = o(n / 2), - l = s(n / 2), - c = o((e + i) / 2), - h = s((e + i) / 2), - u = o((e - i) / 2), - d = s((e - i) / 2), - p = o((i - e) / 2), - f = s((i - e) / 2); - switch (r) { - case "XYX": - t.set(a * h, l * u, l * d, a * c); - break; - case "YZY": - t.set(l * d, a * h, l * u, a * c); - break; - case "ZXZ": - t.set(l * u, l * d, a * h, a * c); - break; - case "XZX": - t.set(a * h, l * f, l * p, a * c); - break; - case "YXY": - t.set(l * p, a * h, l * f, a * c); - break; - case "ZYZ": - t.set(l * f, l * p, a * h, a * c); - break; - default: - console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + r) - } - } - }; - class v { - constructor(t = 0, e = 0) { - Object.defineProperty(this, "isVector2", { - value: !0 - }), this.x = t, this.y = e - } - get width() { - return this.x - } - set width(t) { - this.x = t - } - get height() { - return this.y - } - set height(t) { - this.y = t - } - set(t, e) { - return this.x = t, this.y = e, this - } - setScalar(t) { - return this.x = t, this.y = t, this - } - setX(t) { - return this.x = t, this - } - setY(t) { - return this.y = t, this - } - setComponent(t, e) { - switch (t) { - case 0: - this.x = e; - break; - case 1: - this.y = e; - break; - default: - throw new Error("index is out of range: " + t) - } - return this - } - getComponent(t) { - switch (t) { - case 0: - return this.x; - case 1: - return this.y; - default: - throw new Error("index is out of range: " + t) - } - } - clone() { - return new this.constructor(this.x, this.y) - } - copy(t) { - return this.x = t.x, this.y = t.y, this - } - add(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this) - } - addScalar(t) { - return this.x += t, this.y += t, this - } - addVectors(t, e) { - return this.x = t.x + e.x, this.y = t.y + e.y, this - } - addScaledVector(t, e) { - return this.x += t.x * e, this.y += t.y * e, this - } - sub(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this) - } - subScalar(t) { - return this.x -= t, this.y -= t, this - } - subVectors(t, e) { - return this.x = t.x - e.x, this.y = t.y - e.y, this - } - multiply(t) { - return this.x *= t.x, this.y *= t.y, this - } - multiplyScalar(t) { - return this.x *= t, this.y *= t, this - } - divide(t) { - return this.x /= t.x, this.y /= t.y, this - } - divideScalar(t) { - return this.multiplyScalar(1 / t) - } - applyMatrix3(t) { - const e = this.x, - n = this.y, - i = t.elements; - return this.x = i[0] * e + i[3] * n + i[6], this.y = i[1] * e + i[4] * n + i[7], this - } - min(t) { - return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this - } - max(t) { - return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this - } - clamp(t, e) { - return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this - } - clampScalar(t, e) { - return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this - } - clampLength(t, e) { - const n = this.length(); - return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) - } - floor() { - return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this - } - ceil() { - return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this - } - round() { - return this.x = Math.round(this.x), this.y = Math.round(this.y), this - } - roundToZero() { - return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this - } - negate() { - return this.x = -this.x, this.y = -this.y, this - } - dot(t) { - return this.x * t.x + this.y * t.y - } - cross(t) { - return this.x * t.y - this.y * t.x - } - lengthSq() { - return this.x * this.x + this.y * this.y - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y) - } - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) - } - normalize() { - return this.divideScalar(this.length() || 1) - } - angle() { - return Math.atan2(-this.y, -this.x) + Math.PI - } - distanceTo(t) { - return Math.sqrt(this.distanceToSquared(t)) - } - distanceToSquared(t) { - const e = this.x - t.x, - n = this.y - t.y; - return e * e + n * n - } - manhattanDistanceTo(t) { - return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) - } - setLength(t) { - return this.normalize().multiplyScalar(t) - } - lerp(t, e) { - return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this - } - lerpVectors(t, e, n) { - return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this - } - equals(t) { - return t.x === this.x && t.y === this.y - } - fromArray(t, e = 0) { - return this.x = t[e], this.y = t[e + 1], this - } - toArray(t = [], e = 0) { - return t[e] = this.x, t[e + 1] = this.y, t - } - fromBufferAttribute(t, e, n) { - return void 0 !== n && console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this - } - rotateAround(t, e) { - const n = Math.cos(e), - i = Math.sin(e), - r = this.x - t.x, - o = this.y - t.y; - return this.x = r * n - o * i + t.x, this.y = r * i + o * n + t.y, this - } - random() { - return this.x = Math.random(), this.y = Math.random(), this - } - } - class y { - constructor() { - Object.defineProperty(this, "isMatrix3", { - value: !0 - }), this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], arguments.length > 0 && console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.") - } - set(t, e, n, i, r, o, s, a, l) { - const c = this.elements; - return c[0] = t, c[1] = i, c[2] = s, c[3] = e, c[4] = r, c[5] = a, c[6] = n, c[7] = o, c[8] = l, this - } - identity() { - return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this - } - clone() { - return (new this.constructor).fromArray(this.elements) - } - copy(t) { - const e = this.elements, - n = t.elements; - return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], this - } - extractBasis(t, e, n) { - return t.setFromMatrix3Column(this, 0), e.setFromMatrix3Column(this, 1), n.setFromMatrix3Column(this, 2), this - } - setFromMatrix4(t) { - const e = t.elements; - return this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), this - } - multiply(t) { - return this.multiplyMatrices(this, t) - } - premultiply(t) { - return this.multiplyMatrices(t, this) - } - multiplyMatrices(t, e) { - const n = t.elements, - i = e.elements, - r = this.elements, - o = n[0], - s = n[3], - a = n[6], - l = n[1], - c = n[4], - h = n[7], - u = n[2], - d = n[5], - p = n[8], - f = i[0], - m = i[3], - g = i[6], - v = i[1], - y = i[4], - A = i[7], - x = i[2], - _ = i[5], - b = i[8]; - return r[0] = o * f + s * v + a * x, r[3] = o * m + s * y + a * _, r[6] = o * g + s * A + a * b, r[1] = l * f + c * v + h * x, r[4] = l * m + c * y + h * _, r[7] = l * g + c * A + h * b, r[2] = u * f + d * v + p * x, r[5] = u * m + d * y + p * _, r[8] = u * g + d * A + p * b, this - } - multiplyScalar(t) { - const e = this.elements; - return e[0] *= t, e[3] *= t, e[6] *= t, e[1] *= t, e[4] *= t, e[7] *= t, e[2] *= t, e[5] *= t, e[8] *= t, this - } - determinant() { - const t = this.elements, - e = t[0], - n = t[1], - i = t[2], - r = t[3], - o = t[4], - s = t[5], - a = t[6], - l = t[7], - c = t[8]; - return e * o * c - e * s * l - n * r * c + n * s * a + i * r * l - i * o * a - } - invert() { - const t = this.elements, - e = t[0], - n = t[1], - i = t[2], - r = t[3], - o = t[4], - s = t[5], - a = t[6], - l = t[7], - c = t[8], - h = c * o - s * l, - u = s * a - c * r, - d = l * r - o * a, - p = e * h + n * u + i * d; - if (0 === p) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); - const f = 1 / p; - return t[0] = h * f, t[1] = (i * l - c * n) * f, t[2] = (s * n - i * o) * f, t[3] = u * f, t[4] = (c * e - i * a) * f, t[5] = (i * r - s * e) * f, t[6] = d * f, t[7] = (n * a - l * e) * f, t[8] = (o * e - n * r) * f, this - } - transpose() { - let t; - const e = this.elements; - return t = e[1], e[1] = e[3], e[3] = t, t = e[2], e[2] = e[6], e[6] = t, t = e[5], e[5] = e[7], e[7] = t, this - } - getNormalMatrix(t) { - return this.setFromMatrix4(t).copy(this).invert().transpose() - } - transposeIntoArray(t) { - const e = this.elements; - return t[0] = e[0], t[1] = e[3], t[2] = e[6], t[3] = e[1], t[4] = e[4], t[5] = e[7], t[6] = e[2], t[7] = e[5], t[8] = e[8], this - } - setUvTransform(t, e, n, i, r, o, s) { - const a = Math.cos(r), - l = Math.sin(r); - return this.set(n * a, n * l, -n * (a * o + l * s) + o + t, -i * l, i * a, -i * (-l * o + a * s) + s + e, 0, 0, 1), this - } - scale(t, e) { - const n = this.elements; - return n[0] *= t, n[3] *= t, n[6] *= t, n[1] *= e, n[4] *= e, n[7] *= e, this - } - rotate(t) { - const e = Math.cos(t), - n = Math.sin(t), - i = this.elements, - r = i[0], - o = i[3], - s = i[6], - a = i[1], - l = i[4], - c = i[7]; - return i[0] = e * r + n * a, i[3] = e * o + n * l, i[6] = e * s + n * c, i[1] = -n * r + e * a, i[4] = -n * o + e * l, i[7] = -n * s + e * c, this - } - translate(t, e) { - const n = this.elements; - return n[0] += t * n[2], n[3] += t * n[5], n[6] += t * n[8], n[1] += e * n[2], n[4] += e * n[5], n[7] += e * n[8], this - } - equals(t) { - const e = this.elements, - n = t.elements; - for (let t = 0; t < 9; t++) - if (e[t] !== n[t]) return !1; - return !0 - } - fromArray(t, e = 0) { - for (let n = 0; n < 9; n++) this.elements[n] = t[n + e]; - return this - } - toArray(t = [], e = 0) { - const n = this.elements; - return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t - } - } - let A; - const x = { - getDataURL: function(t) { - if (/^data:/i.test(t.src)) return t.src; - if ("undefined" == typeof HTMLCanvasElement) return t.src; - let e; - if (t instanceof HTMLCanvasElement) e = t; - else { - void 0 === A && (A = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas")), A.width = t.width, A.height = t.height; - const n = A.getContext("2d"); - t instanceof ImageData ? n.putImageData(t, 0, 0) : n.drawImage(t, 0, 0, t.width, t.height), e = A - } - return e.width > 2048 || e.height > 2048 ? e.toDataURL("image/jpeg", .6) : e.toDataURL("image/png") - } - }; - let _ = 0; - - function b(t = b.DEFAULT_IMAGE, e = b.DEFAULT_MAPPING, n = 1001, i = 1001, r = 1006, o = 1008, s = 1023, a = 1009, l = 1, c = 3e3) { - Object.defineProperty(this, "id", { - value: _++ - }), this.uuid = g.generateUUID(), this.name = "", this.image = t, this.mipmaps = [], this.mapping = e, this.wrapS = n, this.wrapT = i, this.magFilter = r, this.minFilter = o, this.anisotropy = l, this.format = s, this.internalFormat = null, this.type = a, this.offset = new v(0, 0), this.repeat = new v(1, 1), this.center = new v(0, 0), this.rotation = 0, this.matrixAutoUpdate = !0, this.matrix = new y, this.generateMipmaps = !0, this.premultiplyAlpha = !1, this.flipY = !0, this.unpackAlignment = 4, this.encoding = c, this.version = 0, this.onUpdate = null - } - - function w(t) { - return "undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap ? x.getDataURL(t) : t.data ? { - data: Array.prototype.slice.call(t.data), - width: t.width, - height: t.height, - type: t.data.constructor.name - } : (console.warn("THREE.Texture: Unable to serialize Texture."), {}) - } - b.DEFAULT_IMAGE = void 0, b.DEFAULT_MAPPING = 300, b.prototype = Object.assign(Object.create(p.prototype), { - constructor: b, - isTexture: !0, - updateMatrix: function() { - this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y) - }, - clone: function() { - return (new this.constructor).copy(this) - }, - copy: function(t) { - return this.name = t.name, this.image = t.image, this.mipmaps = t.mipmaps.slice(0), this.mapping = t.mapping, this.wrapS = t.wrapS, this.wrapT = t.wrapT, this.magFilter = t.magFilter, this.minFilter = t.minFilter, this.anisotropy = t.anisotropy, this.format = t.format, this.internalFormat = t.internalFormat, this.type = t.type, this.offset.copy(t.offset), this.repeat.copy(t.repeat), this.center.copy(t.center), this.rotation = t.rotation, this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrix.copy(t.matrix), this.generateMipmaps = t.generateMipmaps, this.premultiplyAlpha = t.premultiplyAlpha, this.flipY = t.flipY, this.unpackAlignment = t.unpackAlignment, this.encoding = t.encoding, this - }, - toJSON: function(t) { - const e = void 0 === t || "string" == typeof t; - if (!e && void 0 !== t.textures[this.uuid]) return t.textures[this.uuid]; - const n = { - metadata: { - version: 4.5, - type: "Texture", - generator: "Texture.toJSON" - }, - uuid: this.uuid, - name: this.name, - mapping: this.mapping, - repeat: [this.repeat.x, this.repeat.y], - offset: [this.offset.x, this.offset.y], - center: [this.center.x, this.center.y], - rotation: this.rotation, - wrap: [this.wrapS, this.wrapT], - format: this.format, - type: this.type, - encoding: this.encoding, - minFilter: this.minFilter, - magFilter: this.magFilter, - anisotropy: this.anisotropy, - flipY: this.flipY, - premultiplyAlpha: this.premultiplyAlpha, - unpackAlignment: this.unpackAlignment - }; - if (void 0 !== this.image) { - const i = this.image; - if (void 0 === i.uuid && (i.uuid = g.generateUUID()), !e && void 0 === t.images[i.uuid]) { - let e; - if (Array.isArray(i)) { - e = []; - for (let t = 0, n = i.length; t < n; t++) i[t].isDataTexture ? e.push(w(i[t].image)) : e.push(w(i[t])) - } else e = w(i); - t.images[i.uuid] = { - uuid: i.uuid, - url: e - } - } - n.image = i.uuid - } - return e || (t.textures[this.uuid] = n), n - }, - dispose: function() { - this.dispatchEvent({ - type: "dispose" - }) - }, - transformUv: function(t) { - if (300 !== this.mapping) return t; - if (t.applyMatrix3(this.matrix), t.x < 0 || t.x > 1) switch (this.wrapS) { - case 1e3: - t.x = t.x - Math.floor(t.x); - break; - case 1001: - t.x = t.x < 0 ? 0 : 1; - break; - case 1002: - 1 === Math.abs(Math.floor(t.x) % 2) ? t.x = Math.ceil(t.x) - t.x : t.x = t.x - Math.floor(t.x) - } - if (t.y < 0 || t.y > 1) switch (this.wrapT) { - case 1e3: - t.y = t.y - Math.floor(t.y); - break; - case 1001: - t.y = t.y < 0 ? 0 : 1; - break; - case 1002: - 1 === Math.abs(Math.floor(t.y) % 2) ? t.y = Math.ceil(t.y) - t.y : t.y = t.y - Math.floor(t.y) - } - return this.flipY && (t.y = 1 - t.y), t - } - }), Object.defineProperty(b.prototype, "needsUpdate", { - set: function(t) { - !0 === t && this.version++ - } - }); - class M { - constructor(t = 0, e = 0, n = 0, i = 1) { - Object.defineProperty(this, "isVector4", { - value: !0 - }), this.x = t, this.y = e, this.z = n, this.w = i - } - get width() { - return this.z - } - set width(t) { - this.z = t - } - get height() { - return this.w - } - set height(t) { - this.w = t - } - set(t, e, n, i) { - return this.x = t, this.y = e, this.z = n, this.w = i, this - } - setScalar(t) { - return this.x = t, this.y = t, this.z = t, this.w = t, this - } - setX(t) { - return this.x = t, this - } - setY(t) { - return this.y = t, this - } - setZ(t) { - return this.z = t, this - } - setW(t) { - return this.w = t, this - } - setComponent(t, e) { - switch (t) { - case 0: - this.x = e; - break; - case 1: - this.y = e; - break; - case 2: - this.z = e; - break; - case 3: - this.w = e; - break; - default: - throw new Error("index is out of range: " + t) - } - return this - } - getComponent(t) { - switch (t) { - case 0: - return this.x; - case 1: - return this.y; - case 2: - return this.z; - case 3: - return this.w; - default: - throw new Error("index is out of range: " + t) - } - } - clone() { - return new this.constructor(this.x, this.y, this.z, this.w) - } - copy(t) { - return this.x = t.x, this.y = t.y, this.z = t.z, this.w = void 0 !== t.w ? t.w : 1, this - } - add(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this.w += t.w, this) - } - addScalar(t) { - return this.x += t, this.y += t, this.z += t, this.w += t, this - } - addVectors(t, e) { - return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this.w = t.w + e.w, this - } - addScaledVector(t, e) { - return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this.w += t.w * e, this - } - sub(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this.w -= t.w, this) - } - subScalar(t) { - return this.x -= t, this.y -= t, this.z -= t, this.w -= t, this - } - subVectors(t, e) { - return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this.w = t.w - e.w, this - } - multiply(t) { - return this.x *= t.x, this.y *= t.y, this.z *= t.z, this.w *= t.w, this - } - multiplyScalar(t) { - return this.x *= t, this.y *= t, this.z *= t, this.w *= t, this - } - applyMatrix4(t) { - const e = this.x, - n = this.y, - i = this.z, - r = this.w, - o = t.elements; - return this.x = o[0] * e + o[4] * n + o[8] * i + o[12] * r, this.y = o[1] * e + o[5] * n + o[9] * i + o[13] * r, this.z = o[2] * e + o[6] * n + o[10] * i + o[14] * r, this.w = o[3] * e + o[7] * n + o[11] * i + o[15] * r, this - } - divideScalar(t) { - return this.multiplyScalar(1 / t) - } - setAxisAngleFromQuaternion(t) { - this.w = 2 * Math.acos(t.w); - const e = Math.sqrt(1 - t.w * t.w); - return e < 1e-4 ? (this.x = 1, this.y = 0, this.z = 0) : (this.x = t.x / e, this.y = t.y / e, this.z = t.z / e), this - } - setAxisAngleFromRotationMatrix(t) { - let e, n, i, r; - const o = t.elements, - s = o[0], - a = o[4], - l = o[8], - c = o[1], - h = o[5], - u = o[9], - d = o[2], - p = o[6], - f = o[10]; - if (Math.abs(a - c) < .01 && Math.abs(l - d) < .01 && Math.abs(u - p) < .01) { - if (Math.abs(a + c) < .1 && Math.abs(l + d) < .1 && Math.abs(u + p) < .1 && Math.abs(s + h + f - 3) < .1) return this.set(1, 0, 0, 0), this; - e = Math.PI; - const t = (s + 1) / 2, - o = (h + 1) / 2, - m = (f + 1) / 2, - g = (a + c) / 4, - v = (l + d) / 4, - y = (u + p) / 4; - return t > o && t > m ? t < .01 ? (n = 0, i = .707106781, r = .707106781) : (n = Math.sqrt(t), i = g / n, r = v / n) : o > m ? o < .01 ? (n = .707106781, i = 0, r = .707106781) : (i = Math.sqrt(o), n = g / i, r = y / i) : m < .01 ? (n = .707106781, i = .707106781, r = 0) : (r = Math.sqrt(m), n = v / r, i = y / r), this.set(n, i, r, e), this - } - let m = Math.sqrt((p - u) * (p - u) + (l - d) * (l - d) + (c - a) * (c - a)); - return Math.abs(m) < .001 && (m = 1), this.x = (p - u) / m, this.y = (l - d) / m, this.z = (c - a) / m, this.w = Math.acos((s + h + f - 1) / 2), this - } - min(t) { - return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this.w = Math.min(this.w, t.w), this - } - max(t) { - return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this.w = Math.max(this.w, t.w), this - } - clamp(t, e) { - return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this.w = Math.max(t.w, Math.min(e.w, this.w)), this - } - clampScalar(t, e) { - return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this.w = Math.max(t, Math.min(e, this.w)), this - } - clampLength(t, e) { - const n = this.length(); - return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) - } - floor() { - return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this.w = Math.floor(this.w), this - } - ceil() { - return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this.w = Math.ceil(this.w), this - } - round() { - return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this.w = Math.round(this.w), this - } - roundToZero() { - return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w), this - } - negate() { - return this.x = -this.x, this.y = -this.y, this.z = -this.z, this.w = -this.w, this - } - dot(t) { - return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w - } - lengthSq() { - return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) - } - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) - } - normalize() { - return this.divideScalar(this.length() || 1) - } - setLength(t) { - return this.normalize().multiplyScalar(t) - } - lerp(t, e) { - return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this.w += (t.w - this.w) * e, this - } - lerpVectors(t, e, n) { - return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this.z = t.z + (e.z - t.z) * n, this.w = t.w + (e.w - t.w) * n, this - } - equals(t) { - return t.x === this.x && t.y === this.y && t.z === this.z && t.w === this.w - } - fromArray(t, e = 0) { - return this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this.w = t[e + 3], this - } - toArray(t = [], e = 0) { - return t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t[e + 3] = this.w, t - } - fromBufferAttribute(t, e, n) { - return void 0 !== n && console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this.w = t.getW(e), this - } - random() { - return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this.w = Math.random(), this - } - } - class E extends p { - constructor(t, e, n) { - super(), Object.defineProperty(this, "isWebGLRenderTarget", { - value: !0 - }), this.width = t, this.height = e, this.scissor = new M(0, 0, t, e), this.scissorTest = !1, this.viewport = new M(0, 0, t, e), n = n || {}, this.texture = new b(void 0, n.mapping, n.wrapS, n.wrapT, n.magFilter, n.minFilter, n.format, n.type, n.anisotropy, n.encoding), this.texture.image = {}, this.texture.image.width = t, this.texture.image.height = e, this.texture.generateMipmaps = void 0 !== n.generateMipmaps && n.generateMipmaps, this.texture.minFilter = void 0 !== n.minFilter ? n.minFilter : 1006, this.depthBuffer = void 0 === n.depthBuffer || n.depthBuffer, this.stencilBuffer = void 0 !== n.stencilBuffer && n.stencilBuffer, this.depthTexture = void 0 !== n.depthTexture ? n.depthTexture : null - } - setSize(t, e) { - this.width === t && this.height === e || (this.width = t, this.height = e, this.texture.image.width = t, this.texture.image.height = e, this.dispose()), this.viewport.set(0, 0, t, e), this.scissor.set(0, 0, t, e) - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.width = t.width, this.height = t.height, this.viewport.copy(t.viewport), this.texture = t.texture.clone(), this.depthBuffer = t.depthBuffer, this.stencilBuffer = t.stencilBuffer, this.depthTexture = t.depthTexture, this - } - dispose() { - this.dispatchEvent({ - type: "dispose" - }) - } - } - class S { - constructor(t = 0, e = 0, n = 0, i = 1) { - Object.defineProperty(this, "isQuaternion", { - value: !0 - }), this._x = t, this._y = e, this._z = n, this._w = i - } - static slerp(t, e, n, i) { - return n.copy(t).slerp(e, i) - } - static slerpFlat(t, e, n, i, r, o, s) { - let a = n[i + 0], - l = n[i + 1], - c = n[i + 2], - h = n[i + 3]; - const u = r[o + 0], - d = r[o + 1], - p = r[o + 2], - f = r[o + 3]; - if (h !== f || a !== u || l !== d || c !== p) { - let t = 1 - s; - const e = a * u + l * d + c * p + h * f, - n = e >= 0 ? 1 : -1, - i = 1 - e * e; - if (i > Number.EPSILON) { - const r = Math.sqrt(i), - o = Math.atan2(r, e * n); - t = Math.sin(t * o) / r, s = Math.sin(s * o) / r - } - const r = s * n; - if (a = a * t + u * r, l = l * t + d * r, c = c * t + p * r, h = h * t + f * r, t === 1 - s) { - const t = 1 / Math.sqrt(a * a + l * l + c * c + h * h); - a *= t, l *= t, c *= t, h *= t - } - } - t[e] = a, t[e + 1] = l, t[e + 2] = c, t[e + 3] = h - } - static multiplyQuaternionsFlat(t, e, n, i, r, o) { - const s = n[i], - a = n[i + 1], - l = n[i + 2], - c = n[i + 3], - h = r[o], - u = r[o + 1], - d = r[o + 2], - p = r[o + 3]; - return t[e] = s * p + c * h + a * d - l * u, t[e + 1] = a * p + c * u + l * h - s * d, t[e + 2] = l * p + c * d + s * u - a * h, t[e + 3] = c * p - s * h - a * u - l * d, t - } - get x() { - return this._x - } - set x(t) { - this._x = t, this._onChangeCallback() - } - get y() { - return this._y - } - set y(t) { - this._y = t, this._onChangeCallback() - } - get z() { - return this._z - } - set z(t) { - this._z = t, this._onChangeCallback() - } - get w() { - return this._w - } - set w(t) { - this._w = t, this._onChangeCallback() - } - set(t, e, n, i) { - return this._x = t, this._y = e, this._z = n, this._w = i, this._onChangeCallback(), this - } - clone() { - return new this.constructor(this._x, this._y, this._z, this._w) - } - copy(t) { - return this._x = t.x, this._y = t.y, this._z = t.z, this._w = t.w, this._onChangeCallback(), this - } - setFromEuler(t, e) { - if (!t || !t.isEuler) throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); - const n = t._x, - i = t._y, - r = t._z, - o = t._order, - s = Math.cos, - a = Math.sin, - l = s(n / 2), - c = s(i / 2), - h = s(r / 2), - u = a(n / 2), - d = a(i / 2), - p = a(r / 2); - switch (o) { - case "XYZ": - this._x = u * c * h + l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h - u * d * p; - break; - case "YXZ": - this._x = u * c * h + l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h + u * d * p; - break; - case "ZXY": - this._x = u * c * h - l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h - u * d * p; - break; - case "ZYX": - this._x = u * c * h - l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h + u * d * p; - break; - case "YZX": - this._x = u * c * h + l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h - u * d * p; - break; - case "XZY": - this._x = u * c * h - l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h + u * d * p; - break; - default: - console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + o) - } - return !1 !== e && this._onChangeCallback(), this - } - setFromAxisAngle(t, e) { - const n = e / 2, - i = Math.sin(n); - return this._x = t.x * i, this._y = t.y * i, this._z = t.z * i, this._w = Math.cos(n), this._onChangeCallback(), this - } - setFromRotationMatrix(t) { - const e = t.elements, - n = e[0], - i = e[4], - r = e[8], - o = e[1], - s = e[5], - a = e[9], - l = e[2], - c = e[6], - h = e[10], - u = n + s + h; - if (u > 0) { - const t = .5 / Math.sqrt(u + 1); - this._w = .25 / t, this._x = (c - a) * t, this._y = (r - l) * t, this._z = (o - i) * t - } else if (n > s && n > h) { - const t = 2 * Math.sqrt(1 + n - s - h); - this._w = (c - a) / t, this._x = .25 * t, this._y = (i + o) / t, this._z = (r + l) / t - } else if (s > h) { - const t = 2 * Math.sqrt(1 + s - n - h); - this._w = (r - l) / t, this._x = (i + o) / t, this._y = .25 * t, this._z = (a + c) / t - } else { - const t = 2 * Math.sqrt(1 + h - n - s); - this._w = (o - i) / t, this._x = (r + l) / t, this._y = (a + c) / t, this._z = .25 * t - } - return this._onChangeCallback(), this - } - setFromUnitVectors(t, e) { - let n = t.dot(e) + 1; - return n < 1e-6 ? (n = 0, Math.abs(t.x) > Math.abs(t.z) ? (this._x = -t.y, this._y = t.x, this._z = 0, this._w = n) : (this._x = 0, this._y = -t.z, this._z = t.y, this._w = n)) : (this._x = t.y * e.z - t.z * e.y, this._y = t.z * e.x - t.x * e.z, this._z = t.x * e.y - t.y * e.x, this._w = n), this.normalize() - } - angleTo(t) { - return 2 * Math.acos(Math.abs(g.clamp(this.dot(t), -1, 1))) - } - rotateTowards(t, e) { - const n = this.angleTo(t); - if (0 === n) return this; - const i = Math.min(1, e / n); - return this.slerp(t, i), this - } - identity() { - return this.set(0, 0, 0, 1) - } - invert() { - return this.conjugate() - } - conjugate() { - return this._x *= -1, this._y *= -1, this._z *= -1, this._onChangeCallback(), this - } - dot(t) { - return this._x * t._x + this._y * t._y + this._z * t._z + this._w * t._w - } - lengthSq() { - return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w - } - length() { - return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) - } - normalize() { - let t = this.length(); - return 0 === t ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (t = 1 / t, this._x = this._x * t, this._y = this._y * t, this._z = this._z * t, this._w = this._w * t), this._onChangeCallback(), this - } - multiply(t, e) { - return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), this.multiplyQuaternions(t, e)) : this.multiplyQuaternions(this, t) - } - premultiply(t) { - return this.multiplyQuaternions(t, this) - } - multiplyQuaternions(t, e) { - const n = t._x, - i = t._y, - r = t._z, - o = t._w, - s = e._x, - a = e._y, - l = e._z, - c = e._w; - return this._x = n * c + o * s + i * l - r * a, this._y = i * c + o * a + r * s - n * l, this._z = r * c + o * l + n * a - i * s, this._w = o * c - n * s - i * a - r * l, this._onChangeCallback(), this - } - slerp(t, e) { - if (0 === e) return this; - if (1 === e) return this.copy(t); - const n = this._x, - i = this._y, - r = this._z, - o = this._w; - let s = o * t._w + n * t._x + i * t._y + r * t._z; - if (s < 0 ? (this._w = -t._w, this._x = -t._x, this._y = -t._y, this._z = -t._z, s = -s) : this.copy(t), s >= 1) return this._w = o, this._x = n, this._y = i, this._z = r, this; - const a = 1 - s * s; - if (a <= Number.EPSILON) { - const t = 1 - e; - return this._w = t * o + e * this._w, this._x = t * n + e * this._x, this._y = t * i + e * this._y, this._z = t * r + e * this._z, this.normalize(), this._onChangeCallback(), this - } - const l = Math.sqrt(a), - c = Math.atan2(l, s), - h = Math.sin((1 - e) * c) / l, - u = Math.sin(e * c) / l; - return this._w = o * h + this._w * u, this._x = n * h + this._x * u, this._y = i * h + this._y * u, this._z = r * h + this._z * u, this._onChangeCallback(), this - } - equals(t) { - return t._x === this._x && t._y === this._y && t._z === this._z && t._w === this._w - } - fromArray(t, e = 0) { - return this._x = t[e], this._y = t[e + 1], this._z = t[e + 2], this._w = t[e + 3], this._onChangeCallback(), this - } - toArray(t = [], e = 0) { - return t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._w, t - } - fromBufferAttribute(t, e) { - return this._x = t.getX(e), this._y = t.getY(e), this._z = t.getZ(e), this._w = t.getW(e), this - } - _onChange(t) { - return this._onChangeCallback = t, this - } - _onChangeCallback() {} - } - class T { - constructor(t = 0, e = 0, n = 0) { - Object.defineProperty(this, "isVector3", { - value: !0 - }), this.x = t, this.y = e, this.z = n - } - set(t, e, n) { - return void 0 === n && (n = this.z), this.x = t, this.y = e, this.z = n, this - } - setScalar(t) { - return this.x = t, this.y = t, this.z = t, this - } - setX(t) { - return this.x = t, this - } - setY(t) { - return this.y = t, this - } - setZ(t) { - return this.z = t, this - } - setComponent(t, e) { - switch (t) { - case 0: - this.x = e; - break; - case 1: - this.y = e; - break; - case 2: - this.z = e; - break; - default: - throw new Error("index is out of range: " + t) - } - return this - } - getComponent(t) { - switch (t) { - case 0: - return this.x; - case 1: - return this.y; - case 2: - return this.z; - default: - throw new Error("index is out of range: " + t) - } - } - clone() { - return new this.constructor(this.x, this.y, this.z) - } - copy(t) { - return this.x = t.x, this.y = t.y, this.z = t.z, this - } - add(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this) - } - addScalar(t) { - return this.x += t, this.y += t, this.z += t, this - } - addVectors(t, e) { - return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this - } - addScaledVector(t, e) { - return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this - } - sub(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this) - } - subScalar(t) { - return this.x -= t, this.y -= t, this.z -= t, this - } - subVectors(t, e) { - return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this - } - multiply(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), this.multiplyVectors(t, e)) : (this.x *= t.x, this.y *= t.y, this.z *= t.z, this) - } - multiplyScalar(t) { - return this.x *= t, this.y *= t, this.z *= t, this - } - multiplyVectors(t, e) { - return this.x = t.x * e.x, this.y = t.y * e.y, this.z = t.z * e.z, this - } - applyEuler(t) { - return t && t.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."), this.applyQuaternion(R.setFromEuler(t)) - } - applyAxisAngle(t, e) { - return this.applyQuaternion(R.setFromAxisAngle(t, e)) - } - applyMatrix3(t) { - const e = this.x, - n = this.y, - i = this.z, - r = t.elements; - return this.x = r[0] * e + r[3] * n + r[6] * i, this.y = r[1] * e + r[4] * n + r[7] * i, this.z = r[2] * e + r[5] * n + r[8] * i, this - } - applyNormalMatrix(t) { - return this.applyMatrix3(t).normalize() - } - applyMatrix4(t) { - const e = this.x, - n = this.y, - i = this.z, - r = t.elements, - o = 1 / (r[3] * e + r[7] * n + r[11] * i + r[15]); - return this.x = (r[0] * e + r[4] * n + r[8] * i + r[12]) * o, this.y = (r[1] * e + r[5] * n + r[9] * i + r[13]) * o, this.z = (r[2] * e + r[6] * n + r[10] * i + r[14]) * o, this - } - applyQuaternion(t) { - const e = this.x, - n = this.y, - i = this.z, - r = t.x, - o = t.y, - s = t.z, - a = t.w, - l = a * e + o * i - s * n, - c = a * n + s * e - r * i, - h = a * i + r * n - o * e, - u = -r * e - o * n - s * i; - return this.x = l * a + u * -r + c * -s - h * -o, this.y = c * a + u * -o + h * -r - l * -s, this.z = h * a + u * -s + l * -o - c * -r, this - } - project(t) { - return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix) - } - unproject(t) { - return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld) - } - transformDirection(t) { - const e = this.x, - n = this.y, - i = this.z, - r = t.elements; - return this.x = r[0] * e + r[4] * n + r[8] * i, this.y = r[1] * e + r[5] * n + r[9] * i, this.z = r[2] * e + r[6] * n + r[10] * i, this.normalize() - } - divide(t) { - return this.x /= t.x, this.y /= t.y, this.z /= t.z, this - } - divideScalar(t) { - return this.multiplyScalar(1 / t) - } - min(t) { - return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this - } - max(t) { - return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this - } - clamp(t, e) { - return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this - } - clampScalar(t, e) { - return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this - } - clampLength(t, e) { - const n = this.length(); - return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) - } - floor() { - return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this - } - ceil() { - return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this - } - round() { - return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this - } - roundToZero() { - return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this - } - negate() { - return this.x = -this.x, this.y = -this.y, this.z = -this.z, this - } - dot(t) { - return this.x * t.x + this.y * t.y + this.z * t.z - } - lengthSq() { - return this.x * this.x + this.y * this.y + this.z * this.z - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) - } - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) - } - normalize() { - return this.divideScalar(this.length() || 1) - } - setLength(t) { - return this.normalize().multiplyScalar(t) - } - lerp(t, e) { - return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this - } - lerpVectors(t, e, n) { - return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this.z = t.z + (e.z - t.z) * n, this - } - cross(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), this.crossVectors(t, e)) : this.crossVectors(this, t) - } - crossVectors(t, e) { - const n = t.x, - i = t.y, - r = t.z, - o = e.x, - s = e.y, - a = e.z; - return this.x = i * a - r * s, this.y = r * o - n * a, this.z = n * s - i * o, this - } - projectOnVector(t) { - const e = t.lengthSq(); - if (0 === e) return this.set(0, 0, 0); - const n = t.dot(this) / e; - return this.copy(t).multiplyScalar(n) - } - projectOnPlane(t) { - return L.copy(this).projectOnVector(t), this.sub(L) - } - reflect(t) { - return this.sub(L.copy(t).multiplyScalar(2 * this.dot(t))) - } - angleTo(t) { - const e = Math.sqrt(this.lengthSq() * t.lengthSq()); - if (0 === e) return Math.PI / 2; - const n = this.dot(t) / e; - return Math.acos(g.clamp(n, -1, 1)) - } - distanceTo(t) { - return Math.sqrt(this.distanceToSquared(t)) - } - distanceToSquared(t) { - const e = this.x - t.x, - n = this.y - t.y, - i = this.z - t.z; - return e * e + n * n + i * i - } - manhattanDistanceTo(t) { - return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + Math.abs(this.z - t.z) - } - setFromSpherical(t) { - return this.setFromSphericalCoords(t.radius, t.phi, t.theta) - } - setFromSphericalCoords(t, e, n) { - const i = Math.sin(e) * t; - return this.x = i * Math.sin(n), this.y = Math.cos(e) * t, this.z = i * Math.cos(n), this - } - setFromCylindrical(t) { - return this.setFromCylindricalCoords(t.radius, t.theta, t.y) - } - setFromCylindricalCoords(t, e, n) { - return this.x = t * Math.sin(e), this.y = n, this.z = t * Math.cos(e), this - } - setFromMatrixPosition(t) { - const e = t.elements; - return this.x = e[12], this.y = e[13], this.z = e[14], this - } - setFromMatrixScale(t) { - const e = this.setFromMatrixColumn(t, 0).length(), - n = this.setFromMatrixColumn(t, 1).length(), - i = this.setFromMatrixColumn(t, 2).length(); - return this.x = e, this.y = n, this.z = i, this - } - setFromMatrixColumn(t, e) { - return this.fromArray(t.elements, 4 * e) - } - setFromMatrix3Column(t, e) { - return this.fromArray(t.elements, 3 * e) - } - equals(t) { - return t.x === this.x && t.y === this.y && t.z === this.z - } - fromArray(t, e = 0) { - return this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this - } - toArray(t = [], e = 0) { - return t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t - } - fromBufferAttribute(t, e, n) { - return void 0 !== n && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this - } - random() { - return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this - } - } - const L = new T, - R = new S; - class C { - constructor(t, e) { - Object.defineProperty(this, "isBox3", { - value: !0 - }), this.min = void 0 !== t ? t : new T(1 / 0, 1 / 0, 1 / 0), this.max = void 0 !== e ? e : new T(-1 / 0, -1 / 0, -1 / 0) - } - set(t, e) { - return this.min.copy(t), this.max.copy(e), this - } - setFromArray(t) { - let e = 1 / 0, - n = 1 / 0, - i = 1 / 0, - r = -1 / 0, - o = -1 / 0, - s = -1 / 0; - for (let a = 0, l = t.length; a < l; a += 3) { - const l = t[a], - c = t[a + 1], - h = t[a + 2]; - l < e && (e = l), c < n && (n = c), h < i && (i = h), l > r && (r = l), c > o && (o = c), h > s && (s = h) - } - return this.min.set(e, n, i), this.max.set(r, o, s), this - } - setFromBufferAttribute(t) { - let e = 1 / 0, - n = 1 / 0, - i = 1 / 0, - r = -1 / 0, - o = -1 / 0, - s = -1 / 0; - for (let a = 0, l = t.count; a < l; a++) { - const l = t.getX(a), - c = t.getY(a), - h = t.getZ(a); - l < e && (e = l), c < n && (n = c), h < i && (i = h), l > r && (r = l), c > o && (o = c), h > s && (s = h) - } - return this.min.set(e, n, i), this.max.set(r, o, s), this - } - setFromPoints(t) { - this.makeEmpty(); - for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); - return this - } - setFromCenterAndSize(t, e) { - const n = I.copy(e).multiplyScalar(.5); - return this.min.copy(t).sub(n), this.max.copy(t).add(n), this - } - setFromObject(t) { - return this.makeEmpty(), this.expandByObject(t) - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.min.copy(t.min), this.max.copy(t.max), this - } - makeEmpty() { - return this.min.x = this.min.y = this.min.z = 1 / 0, this.max.x = this.max.y = this.max.z = -1 / 0, this - } - isEmpty() { - return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z - } - getCenter(t) { - return void 0 === t && (console.warn("THREE.Box3: .getCenter() target is now required"), t = new T), this.isEmpty() ? t.set(0, 0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5) - } - getSize(t) { - return void 0 === t && (console.warn("THREE.Box3: .getSize() target is now required"), t = new T), this.isEmpty() ? t.set(0, 0, 0) : t.subVectors(this.max, this.min) - } - expandByPoint(t) { - return this.min.min(t), this.max.max(t), this - } - expandByVector(t) { - return this.min.sub(t), this.max.add(t), this - } - expandByScalar(t) { - return this.min.addScalar(-t), this.max.addScalar(t), this - } - expandByObject(t) { - t.updateWorldMatrix(!1, !1); - const e = t.geometry; - void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), O.copy(e.boundingBox), O.applyMatrix4(t.matrixWorld), this.union(O)); - const n = t.children; - for (let t = 0, e = n.length; t < e; t++) this.expandByObject(n[t]); - return this - } - containsPoint(t) { - return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y || t.z < this.min.z || t.z > this.max.z) - } - containsBox(t) { - return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y && this.min.z <= t.min.z && t.max.z <= this.max.z - } - getParameter(t, e) { - return void 0 === e && (console.warn("THREE.Box3: .getParameter() target is now required"), e = new T), e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y), (t.z - this.min.z) / (this.max.z - this.min.z)) - } - intersectsBox(t) { - return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y || t.max.z < this.min.z || t.min.z > this.max.z) - } - intersectsSphere(t) { - return this.clampPoint(t.center, I), I.distanceToSquared(t.center) <= t.radius * t.radius - } - intersectsPlane(t) { - let e, n; - return t.normal.x > 0 ? (e = t.normal.x * this.min.x, n = t.normal.x * this.max.x) : (e = t.normal.x * this.max.x, n = t.normal.x * this.min.x), t.normal.y > 0 ? (e += t.normal.y * this.min.y, n += t.normal.y * this.max.y) : (e += t.normal.y * this.max.y, n += t.normal.y * this.min.y), t.normal.z > 0 ? (e += t.normal.z * this.min.z, n += t.normal.z * this.max.z) : (e += t.normal.z * this.max.z, n += t.normal.z * this.min.z), e <= -t.constant && n >= -t.constant - } - intersectsTriangle(t) { - if (this.isEmpty()) return !1; - this.getCenter(G), V.subVectors(this.max, G), N.subVectors(t.a, G), B.subVectors(t.b, G), F.subVectors(t.c, G), z.subVectors(B, N), U.subVectors(F, B), H.subVectors(N, F); - let e = [0, -z.z, z.y, 0, -U.z, U.y, 0, -H.z, H.y, z.z, 0, -z.x, U.z, 0, -U.x, H.z, 0, -H.x, -z.y, z.x, 0, -U.y, U.x, 0, -H.y, H.x, 0]; - return !!P(e, N, B, F, V) && (e = [1, 0, 0, 0, 1, 0, 0, 0, 1], !!P(e, N, B, F, V) && (k.crossVectors(z, U), e = [k.x, k.y, k.z], P(e, N, B, F, V))) - } - clampPoint(t, e) { - return void 0 === e && (console.warn("THREE.Box3: .clampPoint() target is now required"), e = new T), e.copy(t).clamp(this.min, this.max) - } - distanceToPoint(t) { - return I.copy(t).clamp(this.min, this.max).sub(t).length() - } - getBoundingSphere(t) { - return void 0 === t && console.error("THREE.Box3: .getBoundingSphere() target is now required"), this.getCenter(t.center), t.radius = .5 * this.getSize(I).length(), t - } - intersect(t) { - return this.min.max(t.min), this.max.min(t.max), this.isEmpty() && this.makeEmpty(), this - } - union(t) { - return this.min.min(t.min), this.max.max(t.max), this - } - applyMatrix4(t) { - return this.isEmpty() || (D[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(t), D[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(t), D[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(t), D[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(t), D[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(t), D[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(t), D[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(t), D[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(t), this.setFromPoints(D)), this - } - translate(t) { - return this.min.add(t), this.max.add(t), this - } - equals(t) { - return t.min.equals(this.min) && t.max.equals(this.max) - } - } - - function P(t, e, n, i, r) { - for (let o = 0, s = t.length - 3; o <= s; o += 3) { - W.fromArray(t, o); - const s = r.x * Math.abs(W.x) + r.y * Math.abs(W.y) + r.z * Math.abs(W.z), - a = e.dot(W), - l = n.dot(W), - c = i.dot(W); - if (Math.max(-Math.max(a, l, c), Math.min(a, l, c)) > s) return !1 - } - return !0 - } - const D = [new T, new T, new T, new T, new T, new T, new T, new T], - I = new T, - O = new C, - N = new T, - B = new T, - F = new T, - z = new T, - U = new T, - H = new T, - G = new T, - V = new T, - k = new T, - W = new T, - j = new C; - class X { - constructor(t, e) { - this.center = void 0 !== t ? t : new T, this.radius = void 0 !== e ? e : -1 - } - set(t, e) { - return this.center.copy(t), this.radius = e, this - } - setFromPoints(t, e) { - const n = this.center; - void 0 !== e ? n.copy(e) : j.setFromPoints(t).getCenter(n); - let i = 0; - for (let e = 0, r = t.length; e < r; e++) i = Math.max(i, n.distanceToSquared(t[e])); - return this.radius = Math.sqrt(i), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.center.copy(t.center), this.radius = t.radius, this - } - isEmpty() { - return this.radius < 0 - } - makeEmpty() { - return this.center.set(0, 0, 0), this.radius = -1, this - } - containsPoint(t) { - return t.distanceToSquared(this.center) <= this.radius * this.radius - } - distanceToPoint(t) { - return t.distanceTo(this.center) - this.radius - } - intersectsSphere(t) { - const e = this.radius + t.radius; - return t.center.distanceToSquared(this.center) <= e * e - } - intersectsBox(t) { - return t.intersectsSphere(this) - } - intersectsPlane(t) { - return Math.abs(t.distanceToPoint(this.center)) <= this.radius - } - clampPoint(t, e) { - const n = this.center.distanceToSquared(t); - return void 0 === e && (console.warn("THREE.Sphere: .clampPoint() target is now required"), e = new T), e.copy(t), n > this.radius * this.radius && (e.sub(this.center).normalize(), e.multiplyScalar(this.radius).add(this.center)), e - } - getBoundingBox(t) { - return void 0 === t && (console.warn("THREE.Sphere: .getBoundingBox() target is now required"), t = new C), this.isEmpty() ? (t.makeEmpty(), t) : (t.set(this.center, this.center), t.expandByScalar(this.radius), t) - } - applyMatrix4(t) { - return this.center.applyMatrix4(t), this.radius = this.radius * t.getMaxScaleOnAxis(), this - } - translate(t) { - return this.center.add(t), this - } - equals(t) { - return t.center.equals(this.center) && t.radius === this.radius - } - } - const q = new T, - Y = new T, - Q = new T, - Z = new T, - J = new T, - K = new T, - $ = new T; - class tt { - constructor(t, e) { - this.origin = void 0 !== t ? t : new T, this.direction = void 0 !== e ? e : new T(0, 0, -1) - } - set(t, e) { - return this.origin.copy(t), this.direction.copy(e), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.origin.copy(t.origin), this.direction.copy(t.direction), this - } - at(t, e) { - return void 0 === e && (console.warn("THREE.Ray: .at() target is now required"), e = new T), e.copy(this.direction).multiplyScalar(t).add(this.origin) - } - lookAt(t) { - return this.direction.copy(t).sub(this.origin).normalize(), this - } - recast(t) { - return this.origin.copy(this.at(t, q)), this - } - closestPointToPoint(t, e) { - void 0 === e && (console.warn("THREE.Ray: .closestPointToPoint() target is now required"), e = new T), e.subVectors(t, this.origin); - const n = e.dot(this.direction); - return n < 0 ? e.copy(this.origin) : e.copy(this.direction).multiplyScalar(n).add(this.origin) - } - distanceToPoint(t) { - return Math.sqrt(this.distanceSqToPoint(t)) - } - distanceSqToPoint(t) { - const e = q.subVectors(t, this.origin).dot(this.direction); - return e < 0 ? this.origin.distanceToSquared(t) : (q.copy(this.direction).multiplyScalar(e).add(this.origin), q.distanceToSquared(t)) - } - distanceSqToSegment(t, e, n, i) { - Y.copy(t).add(e).multiplyScalar(.5), Q.copy(e).sub(t).normalize(), Z.copy(this.origin).sub(Y); - const r = .5 * t.distanceTo(e), - o = -this.direction.dot(Q), - s = Z.dot(this.direction), - a = -Z.dot(Q), - l = Z.lengthSq(), - c = Math.abs(1 - o * o); - let h, u, d, p; - if (c > 0) - if (h = o * a - s, u = o * s - a, p = r * c, h >= 0) - if (u >= -p) - if (u <= p) { - const t = 1 / c; - h *= t, u *= t, d = h * (h + o * u + 2 * s) + u * (o * h + u + 2 * a) + l - } else u = r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; - else u = -r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; - else u <= -p ? (h = Math.max(0, -(-o * r + s)), u = h > 0 ? -r : Math.min(Math.max(-r, -a), r), d = -h * h + u * (u + 2 * a) + l) : u <= p ? (h = 0, u = Math.min(Math.max(-r, -a), r), d = u * (u + 2 * a) + l) : (h = Math.max(0, -(o * r + s)), u = h > 0 ? r : Math.min(Math.max(-r, -a), r), d = -h * h + u * (u + 2 * a) + l); - else u = o > 0 ? -r : r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; - return n && n.copy(this.direction).multiplyScalar(h).add(this.origin), i && i.copy(Q).multiplyScalar(u).add(Y), d - } - intersectSphere(t, e) { - q.subVectors(t.center, this.origin); - const n = q.dot(this.direction), - i = q.dot(q) - n * n, - r = t.radius * t.radius; - if (i > r) return null; - const o = Math.sqrt(r - i), - s = n - o, - a = n + o; - return s < 0 && a < 0 ? null : s < 0 ? this.at(a, e) : this.at(s, e) - } - intersectsSphere(t) { - return this.distanceSqToPoint(t.center) <= t.radius * t.radius - } - distanceToPlane(t) { - const e = t.normal.dot(this.direction); - if (0 === e) return 0 === t.distanceToPoint(this.origin) ? 0 : null; - const n = -(this.origin.dot(t.normal) + t.constant) / e; - return n >= 0 ? n : null - } - intersectPlane(t, e) { - const n = this.distanceToPlane(t); - return null === n ? null : this.at(n, e) - } - intersectsPlane(t) { - const e = t.distanceToPoint(this.origin); - if (0 === e) return !0; - return t.normal.dot(this.direction) * e < 0 - } - intersectBox(t, e) { - let n, i, r, o, s, a; - const l = 1 / this.direction.x, - c = 1 / this.direction.y, - h = 1 / this.direction.z, - u = this.origin; - return l >= 0 ? (n = (t.min.x - u.x) * l, i = (t.max.x - u.x) * l) : (n = (t.max.x - u.x) * l, i = (t.min.x - u.x) * l), c >= 0 ? (r = (t.min.y - u.y) * c, o = (t.max.y - u.y) * c) : (r = (t.max.y - u.y) * c, o = (t.min.y - u.y) * c), n > o || r > i ? null : ((r > n || n != n) && (n = r), (o < i || i != i) && (i = o), h >= 0 ? (s = (t.min.z - u.z) * h, a = (t.max.z - u.z) * h) : (s = (t.max.z - u.z) * h, a = (t.min.z - u.z) * h), n > a || s > i ? null : ((s > n || n != n) && (n = s), (a < i || i != i) && (i = a), i < 0 ? null : this.at(n >= 0 ? n : i, e))) - } - intersectsBox(t) { - return null !== this.intersectBox(t, q) - } - intersectTriangle(t, e, n, i, r) { - J.subVectors(e, t), K.subVectors(n, t), $.crossVectors(J, K); - let o, s = this.direction.dot($); - if (s > 0) { - if (i) return null; - o = 1 - } else { - if (!(s < 0)) return null; - o = -1, s = -s - } - Z.subVectors(this.origin, t); - const a = o * this.direction.dot(K.crossVectors(Z, K)); - if (a < 0) return null; - const l = o * this.direction.dot(J.cross(Z)); - if (l < 0) return null; - if (a + l > s) return null; - const c = -o * Z.dot($); - return c < 0 ? null : this.at(c / s, r) - } - applyMatrix4(t) { - return this.origin.applyMatrix4(t), this.direction.transformDirection(t), this - } - equals(t) { - return t.origin.equals(this.origin) && t.direction.equals(this.direction) - } - } - class et { - constructor() { - Object.defineProperty(this, "isMatrix4", { - value: !0 - }), this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], arguments.length > 0 && console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.") - } - set(t, e, n, i, r, o, s, a, l, c, h, u, d, p, f, m) { - const g = this.elements; - return g[0] = t, g[4] = e, g[8] = n, g[12] = i, g[1] = r, g[5] = o, g[9] = s, g[13] = a, g[2] = l, g[6] = c, g[10] = h, g[14] = u, g[3] = d, g[7] = p, g[11] = f, g[15] = m, this - } - identity() { - return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this - } - clone() { - return (new et).fromArray(this.elements) - } - copy(t) { - const e = this.elements, - n = t.elements; - return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], e[9] = n[9], e[10] = n[10], e[11] = n[11], e[12] = n[12], e[13] = n[13], e[14] = n[14], e[15] = n[15], this - } - copyPosition(t) { - const e = this.elements, - n = t.elements; - return e[12] = n[12], e[13] = n[13], e[14] = n[14], this - } - setFromMatrix3(t) { - const e = t.elements; - return this.set(e[0], e[3], e[6], 0, e[1], e[4], e[7], 0, e[2], e[5], e[8], 0, 0, 0, 0, 1), this - } - extractBasis(t, e, n) { - return t.setFromMatrixColumn(this, 0), e.setFromMatrixColumn(this, 1), n.setFromMatrixColumn(this, 2), this - } - makeBasis(t, e, n) { - return this.set(t.x, e.x, n.x, 0, t.y, e.y, n.y, 0, t.z, e.z, n.z, 0, 0, 0, 0, 1), this - } - extractRotation(t) { - const e = this.elements, - n = t.elements, - i = 1 / nt.setFromMatrixColumn(t, 0).length(), - r = 1 / nt.setFromMatrixColumn(t, 1).length(), - o = 1 / nt.setFromMatrixColumn(t, 2).length(); - return e[0] = n[0] * i, e[1] = n[1] * i, e[2] = n[2] * i, e[3] = 0, e[4] = n[4] * r, e[5] = n[5] * r, e[6] = n[6] * r, e[7] = 0, e[8] = n[8] * o, e[9] = n[9] * o, e[10] = n[10] * o, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this - } - makeRotationFromEuler(t) { - t && t.isEuler || console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); - const e = this.elements, - n = t.x, - i = t.y, - r = t.z, - o = Math.cos(n), - s = Math.sin(n), - a = Math.cos(i), - l = Math.sin(i), - c = Math.cos(r), - h = Math.sin(r); - if ("XYZ" === t.order) { - const t = o * c, - n = o * h, - i = s * c, - r = s * h; - e[0] = a * c, e[4] = -a * h, e[8] = l, e[1] = n + i * l, e[5] = t - r * l, e[9] = -s * a, e[2] = r - t * l, e[6] = i + n * l, e[10] = o * a - } else if ("YXZ" === t.order) { - const t = a * c, - n = a * h, - i = l * c, - r = l * h; - e[0] = t + r * s, e[4] = i * s - n, e[8] = o * l, e[1] = o * h, e[5] = o * c, e[9] = -s, e[2] = n * s - i, e[6] = r + t * s, e[10] = o * a - } else if ("ZXY" === t.order) { - const t = a * c, - n = a * h, - i = l * c, - r = l * h; - e[0] = t - r * s, e[4] = -o * h, e[8] = i + n * s, e[1] = n + i * s, e[5] = o * c, e[9] = r - t * s, e[2] = -o * l, e[6] = s, e[10] = o * a - } else if ("ZYX" === t.order) { - const t = o * c, - n = o * h, - i = s * c, - r = s * h; - e[0] = a * c, e[4] = i * l - n, e[8] = t * l + r, e[1] = a * h, e[5] = r * l + t, e[9] = n * l - i, e[2] = -l, e[6] = s * a, e[10] = o * a - } else if ("YZX" === t.order) { - const t = o * a, - n = o * l, - i = s * a, - r = s * l; - e[0] = a * c, e[4] = r - t * h, e[8] = i * h + n, e[1] = h, e[5] = o * c, e[9] = -s * c, e[2] = -l * c, e[6] = n * h + i, e[10] = t - r * h - } else if ("XZY" === t.order) { - const t = o * a, - n = o * l, - i = s * a, - r = s * l; - e[0] = a * c, e[4] = -h, e[8] = l * c, e[1] = t * h + r, e[5] = o * c, e[9] = n * h - i, e[2] = i * h - n, e[6] = s * c, e[10] = r * h + t - } - return e[3] = 0, e[7] = 0, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this - } - makeRotationFromQuaternion(t) { - return this.compose(rt, t, ot) - } - lookAt(t, e, n) { - const i = this.elements; - return lt.subVectors(t, e), 0 === lt.lengthSq() && (lt.z = 1), lt.normalize(), st.crossVectors(n, lt), 0 === st.lengthSq() && (1 === Math.abs(n.z) ? lt.x += 1e-4 : lt.z += 1e-4, lt.normalize(), st.crossVectors(n, lt)), st.normalize(), at.crossVectors(lt, st), i[0] = st.x, i[4] = at.x, i[8] = lt.x, i[1] = st.y, i[5] = at.y, i[9] = lt.y, i[2] = st.z, i[6] = at.z, i[10] = lt.z, this - } - multiply(t, e) { - return void 0 !== e ? (console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), this.multiplyMatrices(t, e)) : this.multiplyMatrices(this, t) - } - premultiply(t) { - return this.multiplyMatrices(t, this) - } - multiplyMatrices(t, e) { - const n = t.elements, - i = e.elements, - r = this.elements, - o = n[0], - s = n[4], - a = n[8], - l = n[12], - c = n[1], - h = n[5], - u = n[9], - d = n[13], - p = n[2], - f = n[6], - m = n[10], - g = n[14], - v = n[3], - y = n[7], - A = n[11], - x = n[15], - _ = i[0], - b = i[4], - w = i[8], - M = i[12], - E = i[1], - S = i[5], - T = i[9], - L = i[13], - R = i[2], - C = i[6], - P = i[10], - D = i[14], - I = i[3], - O = i[7], - N = i[11], - B = i[15]; - return r[0] = o * _ + s * E + a * R + l * I, r[4] = o * b + s * S + a * C + l * O, r[8] = o * w + s * T + a * P + l * N, r[12] = o * M + s * L + a * D + l * B, r[1] = c * _ + h * E + u * R + d * I, r[5] = c * b + h * S + u * C + d * O, r[9] = c * w + h * T + u * P + d * N, r[13] = c * M + h * L + u * D + d * B, r[2] = p * _ + f * E + m * R + g * I, r[6] = p * b + f * S + m * C + g * O, r[10] = p * w + f * T + m * P + g * N, r[14] = p * M + f * L + m * D + g * B, r[3] = v * _ + y * E + A * R + x * I, r[7] = v * b + y * S + A * C + x * O, r[11] = v * w + y * T + A * P + x * N, r[15] = v * M + y * L + A * D + x * B, this - } - multiplyScalar(t) { - const e = this.elements; - return e[0] *= t, e[4] *= t, e[8] *= t, e[12] *= t, e[1] *= t, e[5] *= t, e[9] *= t, e[13] *= t, e[2] *= t, e[6] *= t, e[10] *= t, e[14] *= t, e[3] *= t, e[7] *= t, e[11] *= t, e[15] *= t, this - } - determinant() { - const t = this.elements, - e = t[0], - n = t[4], - i = t[8], - r = t[12], - o = t[1], - s = t[5], - a = t[9], - l = t[13], - c = t[2], - h = t[6], - u = t[10], - d = t[14]; - return t[3] * (+r * a * h - i * l * h - r * s * u + n * l * u + i * s * d - n * a * d) + t[7] * (+e * a * d - e * l * u + r * o * u - i * o * d + i * l * c - r * a * c) + t[11] * (+e * l * h - e * s * d - r * o * h + n * o * d + r * s * c - n * l * c) + t[15] * (-i * s * c - e * a * h + e * s * u + i * o * h - n * o * u + n * a * c) - } - transpose() { - const t = this.elements; - let e; - return e = t[1], t[1] = t[4], t[4] = e, e = t[2], t[2] = t[8], t[8] = e, e = t[6], t[6] = t[9], t[9] = e, e = t[3], t[3] = t[12], t[12] = e, e = t[7], t[7] = t[13], t[13] = e, e = t[11], t[11] = t[14], t[14] = e, this - } - setPosition(t, e, n) { - const i = this.elements; - return t.isVector3 ? (i[12] = t.x, i[13] = t.y, i[14] = t.z) : (i[12] = t, i[13] = e, i[14] = n), this - } - invert() { - const t = this.elements, - e = t[0], - n = t[1], - i = t[2], - r = t[3], - o = t[4], - s = t[5], - a = t[6], - l = t[7], - c = t[8], - h = t[9], - u = t[10], - d = t[11], - p = t[12], - f = t[13], - m = t[14], - g = t[15], - v = h * m * l - f * u * l + f * a * d - s * m * d - h * a * g + s * u * g, - y = p * u * l - c * m * l - p * a * d + o * m * d + c * a * g - o * u * g, - A = c * f * l - p * h * l + p * s * d - o * f * d - c * s * g + o * h * g, - x = p * h * a - c * f * a - p * s * u + o * f * u + c * s * m - o * h * m, - _ = e * v + n * y + i * A + r * x; - if (0 === _) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - const b = 1 / _; - return t[0] = v * b, t[1] = (f * u * r - h * m * r - f * i * d + n * m * d + h * i * g - n * u * g) * b, t[2] = (s * m * r - f * a * r + f * i * l - n * m * l - s * i * g + n * a * g) * b, t[3] = (h * a * r - s * u * r - h * i * l + n * u * l + s * i * d - n * a * d) * b, t[4] = y * b, t[5] = (c * m * r - p * u * r + p * i * d - e * m * d - c * i * g + e * u * g) * b, t[6] = (p * a * r - o * m * r - p * i * l + e * m * l + o * i * g - e * a * g) * b, t[7] = (o * u * r - c * a * r + c * i * l - e * u * l - o * i * d + e * a * d) * b, t[8] = A * b, t[9] = (p * h * r - c * f * r - p * n * d + e * f * d + c * n * g - e * h * g) * b, t[10] = (o * f * r - p * s * r + p * n * l - e * f * l - o * n * g + e * s * g) * b, t[11] = (c * s * r - o * h * r - c * n * l + e * h * l + o * n * d - e * s * d) * b, t[12] = x * b, t[13] = (c * f * i - p * h * i + p * n * u - e * f * u - c * n * m + e * h * m) * b, t[14] = (p * s * i - o * f * i - p * n * a + e * f * a + o * n * m - e * s * m) * b, t[15] = (o * h * i - c * s * i + c * n * a - e * h * a - o * n * u + e * s * u) * b, this - } - scale(t) { - const e = this.elements, - n = t.x, - i = t.y, - r = t.z; - return e[0] *= n, e[4] *= i, e[8] *= r, e[1] *= n, e[5] *= i, e[9] *= r, e[2] *= n, e[6] *= i, e[10] *= r, e[3] *= n, e[7] *= i, e[11] *= r, this - } - getMaxScaleOnAxis() { - const t = this.elements, - e = t[0] * t[0] + t[1] * t[1] + t[2] * t[2], - n = t[4] * t[4] + t[5] * t[5] + t[6] * t[6], - i = t[8] * t[8] + t[9] * t[9] + t[10] * t[10]; - return Math.sqrt(Math.max(e, n, i)) - } - makeTranslation(t, e, n) { - return this.set(1, 0, 0, t, 0, 1, 0, e, 0, 0, 1, n, 0, 0, 0, 1), this - } - makeRotationX(t) { - const e = Math.cos(t), - n = Math.sin(t); - return this.set(1, 0, 0, 0, 0, e, -n, 0, 0, n, e, 0, 0, 0, 0, 1), this - } - makeRotationY(t) { - const e = Math.cos(t), - n = Math.sin(t); - return this.set(e, 0, n, 0, 0, 1, 0, 0, -n, 0, e, 0, 0, 0, 0, 1), this - } - makeRotationZ(t) { - const e = Math.cos(t), - n = Math.sin(t); - return this.set(e, -n, 0, 0, n, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this - } - makeRotationAxis(t, e) { - const n = Math.cos(e), - i = Math.sin(e), - r = 1 - n, - o = t.x, - s = t.y, - a = t.z, - l = r * o, - c = r * s; - return this.set(l * o + n, l * s - i * a, l * a + i * s, 0, l * s + i * a, c * s + n, c * a - i * o, 0, l * a - i * s, c * a + i * o, r * a * a + n, 0, 0, 0, 0, 1), this - } - makeScale(t, e, n) { - return this.set(t, 0, 0, 0, 0, e, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this - } - makeShear(t, e, n) { - return this.set(1, e, n, 0, t, 1, n, 0, t, e, 1, 0, 0, 0, 0, 1), this - } - compose(t, e, n) { - const i = this.elements, - r = e._x, - o = e._y, - s = e._z, - a = e._w, - l = r + r, - c = o + o, - h = s + s, - u = r * l, - d = r * c, - p = r * h, - f = o * c, - m = o * h, - g = s * h, - v = a * l, - y = a * c, - A = a * h, - x = n.x, - _ = n.y, - b = n.z; - return i[0] = (1 - (f + g)) * x, i[1] = (d + A) * x, i[2] = (p - y) * x, i[3] = 0, i[4] = (d - A) * _, i[5] = (1 - (u + g)) * _, i[6] = (m + v) * _, i[7] = 0, i[8] = (p + y) * b, i[9] = (m - v) * b, i[10] = (1 - (u + f)) * b, i[11] = 0, i[12] = t.x, i[13] = t.y, i[14] = t.z, i[15] = 1, this - } - decompose(t, e, n) { - const i = this.elements; - let r = nt.set(i[0], i[1], i[2]).length(); - const o = nt.set(i[4], i[5], i[6]).length(), - s = nt.set(i[8], i[9], i[10]).length(); - this.determinant() < 0 && (r = -r), t.x = i[12], t.y = i[13], t.z = i[14], it.copy(this); - const a = 1 / r, - l = 1 / o, - c = 1 / s; - return it.elements[0] *= a, it.elements[1] *= a, it.elements[2] *= a, it.elements[4] *= l, it.elements[5] *= l, it.elements[6] *= l, it.elements[8] *= c, it.elements[9] *= c, it.elements[10] *= c, e.setFromRotationMatrix(it), n.x = r, n.y = o, n.z = s, this - } - makePerspective(t, e, n, i, r, o) { - void 0 === o && console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs."); - const s = this.elements, - a = 2 * r / (e - t), - l = 2 * r / (n - i), - c = (e + t) / (e - t), - h = (n + i) / (n - i), - u = -(o + r) / (o - r), - d = -2 * o * r / (o - r); - return s[0] = a, s[4] = 0, s[8] = c, s[12] = 0, s[1] = 0, s[5] = l, s[9] = h, s[13] = 0, s[2] = 0, s[6] = 0, s[10] = u, s[14] = d, s[3] = 0, s[7] = 0, s[11] = -1, s[15] = 0, this - } - makeOrthographic(t, e, n, i, r, o) { - const s = this.elements, - a = 1 / (e - t), - l = 1 / (n - i), - c = 1 / (o - r), - h = (e + t) * a, - u = (n + i) * l, - d = (o + r) * c; - return s[0] = 2 * a, s[4] = 0, s[8] = 0, s[12] = -h, s[1] = 0, s[5] = 2 * l, s[9] = 0, s[13] = -u, s[2] = 0, s[6] = 0, s[10] = -2 * c, s[14] = -d, s[3] = 0, s[7] = 0, s[11] = 0, s[15] = 1, this - } - equals(t) { - const e = this.elements, - n = t.elements; - for (let t = 0; t < 16; t++) - if (e[t] !== n[t]) return !1; - return !0 - } - fromArray(t, e = 0) { - for (let n = 0; n < 16; n++) this.elements[n] = t[n + e]; - return this - } - toArray(t = [], e = 0) { - const n = this.elements; - return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t[e + 9] = n[9], t[e + 10] = n[10], t[e + 11] = n[11], t[e + 12] = n[12], t[e + 13] = n[13], t[e + 14] = n[14], t[e + 15] = n[15], t - } - } - const nt = new T, - it = new et, - rt = new T(0, 0, 0), - ot = new T(1, 1, 1), - st = new T, - at = new T, - lt = new T; - class ct { - constructor(t = 0, e = 0, n = 0, i = ct.DefaultOrder) { - Object.defineProperty(this, "isEuler", { - value: !0 - }), this._x = t, this._y = e, this._z = n, this._order = i - } - get x() { - return this._x - } - set x(t) { - this._x = t, this._onChangeCallback() - } - get y() { - return this._y - } - set y(t) { - this._y = t, this._onChangeCallback() - } - get z() { - return this._z - } - set z(t) { - this._z = t, this._onChangeCallback() - } - get order() { - return this._order - } - set order(t) { - this._order = t, this._onChangeCallback() - } - set(t, e, n, i) { - return this._x = t, this._y = e, this._z = n, this._order = i || this._order, this._onChangeCallback(), this - } - clone() { - return new this.constructor(this._x, this._y, this._z, this._order) - } - copy(t) { - return this._x = t._x, this._y = t._y, this._z = t._z, this._order = t._order, this._onChangeCallback(), this - } - setFromRotationMatrix(t, e, n) { - const i = g.clamp, - r = t.elements, - o = r[0], - s = r[4], - a = r[8], - l = r[1], - c = r[5], - h = r[9], - u = r[2], - d = r[6], - p = r[10]; - switch (e = e || this._order) { - case "XYZ": - this._y = Math.asin(i(a, -1, 1)), Math.abs(a) < .9999999 ? (this._x = Math.atan2(-h, p), this._z = Math.atan2(-s, o)) : (this._x = Math.atan2(d, c), this._z = 0); - break; - case "YXZ": - this._x = Math.asin(-i(h, -1, 1)), Math.abs(h) < .9999999 ? (this._y = Math.atan2(a, p), this._z = Math.atan2(l, c)) : (this._y = Math.atan2(-u, o), this._z = 0); - break; - case "ZXY": - this._x = Math.asin(i(d, -1, 1)), Math.abs(d) < .9999999 ? (this._y = Math.atan2(-u, p), this._z = Math.atan2(-s, c)) : (this._y = 0, this._z = Math.atan2(l, o)); - break; - case "ZYX": - this._y = Math.asin(-i(u, -1, 1)), Math.abs(u) < .9999999 ? (this._x = Math.atan2(d, p), this._z = Math.atan2(l, o)) : (this._x = 0, this._z = Math.atan2(-s, c)); - break; - case "YZX": - this._z = Math.asin(i(l, -1, 1)), Math.abs(l) < .9999999 ? (this._x = Math.atan2(-h, c), this._y = Math.atan2(-u, o)) : (this._x = 0, this._y = Math.atan2(a, p)); - break; - case "XZY": - this._z = Math.asin(-i(s, -1, 1)), Math.abs(s) < .9999999 ? (this._x = Math.atan2(d, c), this._y = Math.atan2(a, o)) : (this._x = Math.atan2(-h, p), this._y = 0); - break; - default: - console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: " + e) - } - return this._order = e, !1 !== n && this._onChangeCallback(), this - } - setFromQuaternion(t, e, n) { - return ht.makeRotationFromQuaternion(t), this.setFromRotationMatrix(ht, e, n) - } - setFromVector3(t, e) { - return this.set(t.x, t.y, t.z, e || this._order) - } - reorder(t) { - return ut.setFromEuler(this), this.setFromQuaternion(ut, t) - } - equals(t) { - return t._x === this._x && t._y === this._y && t._z === this._z && t._order === this._order - } - fromArray(t) { - return this._x = t[0], this._y = t[1], this._z = t[2], void 0 !== t[3] && (this._order = t[3]), this._onChangeCallback(), this - } - toArray(t = [], e = 0) { - return t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._order, t - } - toVector3(t) { - return t ? t.set(this._x, this._y, this._z) : new T(this._x, this._y, this._z) - } - _onChange(t) { - return this._onChangeCallback = t, this - } - _onChangeCallback() {} - } - ct.DefaultOrder = "XYZ", ct.RotationOrders = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"]; - const ht = new et, - ut = new S; - class dt { - constructor() { - this.mask = 1 - } - set(t) { - this.mask = 1 << t | 0 - } - enable(t) { - this.mask |= 1 << t | 0 - } - enableAll() { - this.mask = -1 - } - toggle(t) { - this.mask ^= 1 << t | 0 - } - disable(t) { - this.mask &= ~(1 << t | 0) - } - disableAll() { - this.mask = 0 - } - test(t) { - return 0 != (this.mask & t.mask) - } - } - let pt = 0; - const ft = new T, - mt = new S, - gt = new et, - vt = new T, - yt = new T, - At = new T, - xt = new S, - _t = new T(1, 0, 0), - bt = new T(0, 1, 0), - wt = new T(0, 0, 1), - Mt = { - type: "added" - }, - Et = { - type: "removed" - }; - - function St() { - Object.defineProperty(this, "id", { - value: pt++ - }), this.uuid = g.generateUUID(), this.name = "", this.type = "Object3D", this.parent = null, this.children = [], this.up = St.DefaultUp.clone(); - const t = new T, - e = new ct, - n = new S, - i = new T(1, 1, 1); - e._onChange((function() { - n.setFromEuler(e, !1) - })), n._onChange((function() { - e.setFromQuaternion(n, void 0, !1) - })), Object.defineProperties(this, { - position: { - configurable: !0, - enumerable: !0, - value: t - }, - rotation: { - configurable: !0, - enumerable: !0, - value: e - }, - quaternion: { - configurable: !0, - enumerable: !0, - value: n - }, - scale: { - configurable: !0, - enumerable: !0, - value: i - }, - modelViewMatrix: { - value: new et - }, - normalMatrix: { - value: new y - } - }), this.matrix = new et, this.matrixWorld = new et, this.matrixAutoUpdate = St.DefaultMatrixAutoUpdate, this.matrixWorldNeedsUpdate = !1, this.layers = new dt, this.visible = !0, this.castShadow = !1, this.receiveShadow = !1, this.frustumCulled = !0, this.renderOrder = 0, this.animations = [], this.userData = {} - } - St.DefaultUp = new T(0, 1, 0), St.DefaultMatrixAutoUpdate = !0, St.prototype = Object.assign(Object.create(p.prototype), { - constructor: St, - isObject3D: !0, - onBeforeRender: function() {}, - onAfterRender: function() {}, - applyMatrix4: function(t) { - this.matrixAutoUpdate && this.updateMatrix(), this.matrix.premultiply(t), this.matrix.decompose(this.position, this.quaternion, this.scale) - }, - applyQuaternion: function(t) { - return this.quaternion.premultiply(t), this - }, - setRotationFromAxisAngle: function(t, e) { - this.quaternion.setFromAxisAngle(t, e) - }, - setRotationFromEuler: function(t) { - this.quaternion.setFromEuler(t, !0) - }, - setRotationFromMatrix: function(t) { - this.quaternion.setFromRotationMatrix(t) - }, - setRotationFromQuaternion: function(t) { - this.quaternion.copy(t) - }, - rotateOnAxis: function(t, e) { - return mt.setFromAxisAngle(t, e), this.quaternion.multiply(mt), this - }, - rotateOnWorldAxis: function(t, e) { - return mt.setFromAxisAngle(t, e), this.quaternion.premultiply(mt), this - }, - rotateX: function(t) { - return this.rotateOnAxis(_t, t) - }, - rotateY: function(t) { - return this.rotateOnAxis(bt, t) - }, - rotateZ: function(t) { - return this.rotateOnAxis(wt, t) - }, - translateOnAxis: function(t, e) { - return ft.copy(t).applyQuaternion(this.quaternion), this.position.add(ft.multiplyScalar(e)), this - }, - translateX: function(t) { - return this.translateOnAxis(_t, t) - }, - translateY: function(t) { - return this.translateOnAxis(bt, t) - }, - translateZ: function(t) { - return this.translateOnAxis(wt, t) - }, - localToWorld: function(t) { - return t.applyMatrix4(this.matrixWorld) - }, - worldToLocal: function(t) { - return t.applyMatrix4(gt.copy(this.matrixWorld).invert()) - }, - lookAt: function(t, e, n) { - t.isVector3 ? vt.copy(t) : vt.set(t, e, n); - const i = this.parent; - this.updateWorldMatrix(!0, !1), yt.setFromMatrixPosition(this.matrixWorld), this.isCamera || this.isLight ? gt.lookAt(yt, vt, this.up) : gt.lookAt(vt, yt, this.up), this.quaternion.setFromRotationMatrix(gt), i && (gt.extractRotation(i.matrixWorld), mt.setFromRotationMatrix(gt), this.quaternion.premultiply(mt.invert())) - }, - add: function(t) { - if (arguments.length > 1) { - for (let t = 0; t < arguments.length; t++) this.add(arguments[t]); - return this - } - return t === this ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", t), this) : (t && t.isObject3D ? (null !== t.parent && t.parent.remove(t), t.parent = this, this.children.push(t), t.dispatchEvent(Mt)) : console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", t), this) - }, - remove: function(t) { - if (arguments.length > 1) { - for (let t = 0; t < arguments.length; t++) this.remove(arguments[t]); - return this - } - const e = this.children.indexOf(t); - return -1 !== e && (t.parent = null, this.children.splice(e, 1), t.dispatchEvent(Et)), this - }, - clear: function() { - for (let t = 0; t < this.children.length; t++) { - const e = this.children[t]; - e.parent = null, e.dispatchEvent(Et) - } - return this.children.length = 0, this - }, - attach: function(t) { - return this.updateWorldMatrix(!0, !1), gt.copy(this.matrixWorld).invert(), null !== t.parent && (t.parent.updateWorldMatrix(!0, !1), gt.multiply(t.parent.matrixWorld)), t.applyMatrix4(gt), t.updateWorldMatrix(!1, !1), this.add(t), this - }, - getObjectById: function(t) { - return this.getObjectByProperty("id", t) - }, - getObjectByName: function(t) { - return this.getObjectByProperty("name", t) - }, - getObjectByProperty: function(t, e) { - if (this[t] === e) return this; - for (let n = 0, i = this.children.length; n < i; n++) { - const i = this.children[n].getObjectByProperty(t, e); - if (void 0 !== i) return i - } - }, - getWorldPosition: function(t) { - return void 0 === t && (console.warn("THREE.Object3D: .getWorldPosition() target is now required"), t = new T), this.updateWorldMatrix(!0, !1), t.setFromMatrixPosition(this.matrixWorld) - }, - getWorldQuaternion: function(t) { - return void 0 === t && (console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"), t = new S), this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(yt, t, At), t - }, - getWorldScale: function(t) { - return void 0 === t && (console.warn("THREE.Object3D: .getWorldScale() target is now required"), t = new T), this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(yt, xt, t), t - }, - getWorldDirection: function(t) { - void 0 === t && (console.warn("THREE.Object3D: .getWorldDirection() target is now required"), t = new T), this.updateWorldMatrix(!0, !1); - const e = this.matrixWorld.elements; - return t.set(e[8], e[9], e[10]).normalize() - }, - raycast: function() {}, - traverse: function(t) { - t(this); - const e = this.children; - for (let n = 0, i = e.length; n < i; n++) e[n].traverse(t) - }, - traverseVisible: function(t) { - if (!1 === this.visible) return; - t(this); - const e = this.children; - for (let n = 0, i = e.length; n < i; n++) e[n].traverseVisible(t) - }, - traverseAncestors: function(t) { - const e = this.parent; - null !== e && (t(e), e.traverseAncestors(t)) - }, - updateMatrix: function() { - this.matrix.compose(this.position, this.quaternion, this.scale), this.matrixWorldNeedsUpdate = !0 - }, - updateMatrixWorld: function(t) { - this.matrixAutoUpdate && this.updateMatrix(), (this.matrixWorldNeedsUpdate || t) && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), this.matrixWorldNeedsUpdate = !1, t = !0); - const e = this.children; - for (let n = 0, i = e.length; n < i; n++) e[n].updateMatrixWorld(t) - }, - updateWorldMatrix: function(t, e) { - const n = this.parent; - if (!0 === t && null !== n && n.updateWorldMatrix(!0, !1), this.matrixAutoUpdate && this.updateMatrix(), null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), !0 === e) { - const t = this.children; - for (let e = 0, n = t.length; e < n; e++) t[e].updateWorldMatrix(!1, !0) - } - }, - toJSON: function(t) { - const e = void 0 === t || "string" == typeof t, - n = {}; - e && (t = { - geometries: {}, - materials: {}, - textures: {}, - images: {}, - shapes: {}, - skeletons: {}, - animations: {} - }, n.metadata = { - version: 4.5, - type: "Object", - generator: "Object3D.toJSON" - }); - const i = {}; - - function r(e, n) { - return void 0 === e[n.uuid] && (e[n.uuid] = n.toJSON(t)), n.uuid - } - if (i.uuid = this.uuid, i.type = this.type, "" !== this.name && (i.name = this.name), !0 === this.castShadow && (i.castShadow = !0), !0 === this.receiveShadow && (i.receiveShadow = !0), !1 === this.visible && (i.visible = !1), !1 === this.frustumCulled && (i.frustumCulled = !1), 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), "{}" !== JSON.stringify(this.userData) && (i.userData = this.userData), i.layers = this.layers.mask, i.matrix = this.matrix.toArray(), !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), this.isInstancedMesh && (i.type = "InstancedMesh", i.count = this.count, i.instanceMatrix = this.instanceMatrix.toJSON()), this.isMesh || this.isLine || this.isPoints) { - i.geometry = r(t.geometries, this.geometry); - const e = this.geometry.parameters; - if (void 0 !== e && void 0 !== e.shapes) { - const n = e.shapes; - if (Array.isArray(n)) - for (let e = 0, i = n.length; e < i; e++) { - const i = n[e]; - r(t.shapes, i) - } else r(t.shapes, n) - } - } - if (this.isSkinnedMesh && (i.bindMode = this.bindMode, i.bindMatrix = this.bindMatrix.toArray(), void 0 !== this.skeleton && (r(t.skeletons, this.skeleton), i.skeleton = this.skeleton.uuid)), void 0 !== this.material) - if (Array.isArray(this.material)) { - const e = []; - for (let n = 0, i = this.material.length; n < i; n++) e.push(r(t.materials, this.material[n])); - i.material = e - } else i.material = r(t.materials, this.material); - if (this.children.length > 0) { - i.children = []; - for (let e = 0; e < this.children.length; e++) i.children.push(this.children[e].toJSON(t).object) - } - if (this.animations.length > 0) { - i.animations = []; - for (let e = 0; e < this.animations.length; e++) { - const n = this.animations[e]; - i.animations.push(r(t.animations, n)) - } - } - if (e) { - const e = o(t.geometries), - i = o(t.materials), - r = o(t.textures), - s = o(t.images), - a = o(t.shapes), - l = o(t.skeletons), - c = o(t.animations); - e.length > 0 && (n.geometries = e), i.length > 0 && (n.materials = i), r.length > 0 && (n.textures = r), s.length > 0 && (n.images = s), a.length > 0 && (n.shapes = a), l.length > 0 && (n.skeletons = l), c.length > 0 && (n.animations = c) - } - return n.object = i, n; - - function o(t) { - const e = []; - for (const n in t) { - const i = t[n]; - delete i.metadata, e.push(i) - } - return e - } - }, - clone: function(t) { - return (new this.constructor).copy(this, t) - }, - copy: function(t, e = !0) { - if (this.name = t.name, this.up.copy(t.up), this.position.copy(t.position), this.rotation.order = t.rotation.order, this.quaternion.copy(t.quaternion), this.scale.copy(t.scale), this.matrix.copy(t.matrix), this.matrixWorld.copy(t.matrixWorld), this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrixWorldNeedsUpdate = t.matrixWorldNeedsUpdate, this.layers.mask = t.layers.mask, this.visible = t.visible, this.castShadow = t.castShadow, this.receiveShadow = t.receiveShadow, this.frustumCulled = t.frustumCulled, this.renderOrder = t.renderOrder, this.userData = JSON.parse(JSON.stringify(t.userData)), !0 === e) - for (let e = 0; e < t.children.length; e++) { - const n = t.children[e]; - this.add(n.clone()) - } - return this - } - }); - const Tt = new T, - Lt = new T, - Rt = new y; - class Ct { - constructor(t, e) { - Object.defineProperty(this, "isPlane", { - value: !0 - }), this.normal = void 0 !== t ? t : new T(1, 0, 0), this.constant = void 0 !== e ? e : 0 - } - set(t, e) { - return this.normal.copy(t), this.constant = e, this - } - setComponents(t, e, n, i) { - return this.normal.set(t, e, n), this.constant = i, this - } - setFromNormalAndCoplanarPoint(t, e) { - return this.normal.copy(t), this.constant = -e.dot(this.normal), this - } - setFromCoplanarPoints(t, e, n) { - const i = Tt.subVectors(n, e).cross(Lt.subVectors(t, e)).normalize(); - return this.setFromNormalAndCoplanarPoint(i, t), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.normal.copy(t.normal), this.constant = t.constant, this - } - normalize() { - const t = 1 / this.normal.length(); - return this.normal.multiplyScalar(t), this.constant *= t, this - } - negate() { - return this.constant *= -1, this.normal.negate(), this - } - distanceToPoint(t) { - return this.normal.dot(t) + this.constant - } - distanceToSphere(t) { - return this.distanceToPoint(t.center) - t.radius - } - projectPoint(t, e) { - return void 0 === e && (console.warn("THREE.Plane: .projectPoint() target is now required"), e = new T), e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t) - } - intersectLine(t, e) { - void 0 === e && (console.warn("THREE.Plane: .intersectLine() target is now required"), e = new T); - const n = t.delta(Tt), - i = this.normal.dot(n); - if (0 === i) return 0 === this.distanceToPoint(t.start) ? e.copy(t.start) : void 0; - const r = -(t.start.dot(this.normal) + this.constant) / i; - return r < 0 || r > 1 ? void 0 : e.copy(n).multiplyScalar(r).add(t.start) - } - intersectsLine(t) { - const e = this.distanceToPoint(t.start), - n = this.distanceToPoint(t.end); - return e < 0 && n > 0 || n < 0 && e > 0 - } - intersectsBox(t) { - return t.intersectsPlane(this) - } - intersectsSphere(t) { - return t.intersectsPlane(this) - } - coplanarPoint(t) { - return void 0 === t && (console.warn("THREE.Plane: .coplanarPoint() target is now required"), t = new T), t.copy(this.normal).multiplyScalar(-this.constant) - } - applyMatrix4(t, e) { - const n = e || Rt.getNormalMatrix(t), - i = this.coplanarPoint(Tt).applyMatrix4(t), - r = this.normal.applyMatrix3(n).normalize(); - return this.constant = -i.dot(r), this - } - translate(t) { - return this.constant -= t.dot(this.normal), this - } - equals(t) { - return t.normal.equals(this.normal) && t.constant === this.constant - } - } - const Pt = new T, - Dt = new T, - It = new T, - Ot = new T, - Nt = new T, - Bt = new T, - Ft = new T, - zt = new T, - Ut = new T, - Ht = new T; - class Gt { - constructor(t, e, n) { - this.a = void 0 !== t ? t : new T, this.b = void 0 !== e ? e : new T, this.c = void 0 !== n ? n : new T - } - static getNormal(t, e, n, i) { - void 0 === i && (console.warn("THREE.Triangle: .getNormal() target is now required"), i = new T), i.subVectors(n, e), Pt.subVectors(t, e), i.cross(Pt); - const r = i.lengthSq(); - return r > 0 ? i.multiplyScalar(1 / Math.sqrt(r)) : i.set(0, 0, 0) - } - static getBarycoord(t, e, n, i, r) { - Pt.subVectors(i, e), Dt.subVectors(n, e), It.subVectors(t, e); - const o = Pt.dot(Pt), - s = Pt.dot(Dt), - a = Pt.dot(It), - l = Dt.dot(Dt), - c = Dt.dot(It), - h = o * l - s * s; - if (void 0 === r && (console.warn("THREE.Triangle: .getBarycoord() target is now required"), r = new T), 0 === h) return r.set(-2, -1, -1); - const u = 1 / h, - d = (l * a - s * c) * u, - p = (o * c - s * a) * u; - return r.set(1 - d - p, p, d) - } - static containsPoint(t, e, n, i) { - return this.getBarycoord(t, e, n, i, Ot), Ot.x >= 0 && Ot.y >= 0 && Ot.x + Ot.y <= 1 - } - static getUV(t, e, n, i, r, o, s, a) { - return this.getBarycoord(t, e, n, i, Ot), a.set(0, 0), a.addScaledVector(r, Ot.x), a.addScaledVector(o, Ot.y), a.addScaledVector(s, Ot.z), a - } - static isFrontFacing(t, e, n, i) { - return Pt.subVectors(n, e), Dt.subVectors(t, e), Pt.cross(Dt).dot(i) < 0 - } - set(t, e, n) { - return this.a.copy(t), this.b.copy(e), this.c.copy(n), this - } - setFromPointsAndIndices(t, e, n, i) { - return this.a.copy(t[e]), this.b.copy(t[n]), this.c.copy(t[i]), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.a.copy(t.a), this.b.copy(t.b), this.c.copy(t.c), this - } - getArea() { - return Pt.subVectors(this.c, this.b), Dt.subVectors(this.a, this.b), .5 * Pt.cross(Dt).length() - } - getMidpoint(t) { - return void 0 === t && (console.warn("THREE.Triangle: .getMidpoint() target is now required"), t = new T), t.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3) - } - getNormal(t) { - return Gt.getNormal(this.a, this.b, this.c, t) - } - getPlane(t) { - return void 0 === t && (console.warn("THREE.Triangle: .getPlane() target is now required"), t = new Ct), t.setFromCoplanarPoints(this.a, this.b, this.c) - } - getBarycoord(t, e) { - return Gt.getBarycoord(t, this.a, this.b, this.c, e) - } - getUV(t, e, n, i, r) { - return Gt.getUV(t, this.a, this.b, this.c, e, n, i, r) - } - containsPoint(t) { - return Gt.containsPoint(t, this.a, this.b, this.c) - } - isFrontFacing(t) { - return Gt.isFrontFacing(this.a, this.b, this.c, t) - } - intersectsBox(t) { - return t.intersectsTriangle(this) - } - closestPointToPoint(t, e) { - void 0 === e && (console.warn("THREE.Triangle: .closestPointToPoint() target is now required"), e = new T); - const n = this.a, - i = this.b, - r = this.c; - let o, s; - Nt.subVectors(i, n), Bt.subVectors(r, n), zt.subVectors(t, n); - const a = Nt.dot(zt), - l = Bt.dot(zt); - if (a <= 0 && l <= 0) return e.copy(n); - Ut.subVectors(t, i); - const c = Nt.dot(Ut), - h = Bt.dot(Ut); - if (c >= 0 && h <= c) return e.copy(i); - const u = a * h - c * l; - if (u <= 0 && a >= 0 && c <= 0) return o = a / (a - c), e.copy(n).addScaledVector(Nt, o); - Ht.subVectors(t, r); - const d = Nt.dot(Ht), - p = Bt.dot(Ht); - if (p >= 0 && d <= p) return e.copy(r); - const f = d * l - a * p; - if (f <= 0 && l >= 0 && p <= 0) return s = l / (l - p), e.copy(n).addScaledVector(Bt, s); - const m = c * p - d * h; - if (m <= 0 && h - c >= 0 && d - p >= 0) return Ft.subVectors(r, i), s = (h - c) / (h - c + (d - p)), e.copy(i).addScaledVector(Ft, s); - const g = 1 / (m + f + u); - return o = f * g, s = u * g, e.copy(n).addScaledVector(Nt, o).addScaledVector(Bt, s) - } - equals(t) { - return t.a.equals(this.a) && t.b.equals(this.b) && t.c.equals(this.c) - } - } - const Vt = { - aliceblue: 15792383, - antiquewhite: 16444375, - aqua: 65535, - aquamarine: 8388564, - azure: 15794175, - beige: 16119260, - bisque: 16770244, - black: 0, - blanchedalmond: 16772045, - blue: 255, - blueviolet: 9055202, - brown: 10824234, - burlywood: 14596231, - cadetblue: 6266528, - chartreuse: 8388352, - chocolate: 13789470, - coral: 16744272, - cornflowerblue: 6591981, - cornsilk: 16775388, - crimson: 14423100, - cyan: 65535, - darkblue: 139, - darkcyan: 35723, - darkgoldenrod: 12092939, - darkgray: 11119017, - darkgreen: 25600, - darkgrey: 11119017, - darkkhaki: 12433259, - darkmagenta: 9109643, - darkolivegreen: 5597999, - darkorange: 16747520, - darkorchid: 10040012, - darkred: 9109504, - darksalmon: 15308410, - darkseagreen: 9419919, - darkslateblue: 4734347, - darkslategray: 3100495, - darkslategrey: 3100495, - darkturquoise: 52945, - darkviolet: 9699539, - deeppink: 16716947, - deepskyblue: 49151, - dimgray: 6908265, - dimgrey: 6908265, - dodgerblue: 2003199, - firebrick: 11674146, - floralwhite: 16775920, - forestgreen: 2263842, - fuchsia: 16711935, - gainsboro: 14474460, - ghostwhite: 16316671, - gold: 16766720, - goldenrod: 14329120, - gray: 8421504, - green: 32768, - greenyellow: 11403055, - grey: 8421504, - honeydew: 15794160, - hotpink: 16738740, - indianred: 13458524, - indigo: 4915330, - ivory: 16777200, - khaki: 15787660, - lavender: 15132410, - lavenderblush: 16773365, - lawngreen: 8190976, - lemonchiffon: 16775885, - lightblue: 11393254, - lightcoral: 15761536, - lightcyan: 14745599, - lightgoldenrodyellow: 16448210, - lightgray: 13882323, - lightgreen: 9498256, - lightgrey: 13882323, - lightpink: 16758465, - lightsalmon: 16752762, - lightseagreen: 2142890, - lightskyblue: 8900346, - lightslategray: 7833753, - lightslategrey: 7833753, - lightsteelblue: 11584734, - lightyellow: 16777184, - lime: 65280, - limegreen: 3329330, - linen: 16445670, - magenta: 16711935, - maroon: 8388608, - mediumaquamarine: 6737322, - mediumblue: 205, - mediumorchid: 12211667, - mediumpurple: 9662683, - mediumseagreen: 3978097, - mediumslateblue: 8087790, - mediumspringgreen: 64154, - mediumturquoise: 4772300, - mediumvioletred: 13047173, - midnightblue: 1644912, - mintcream: 16121850, - mistyrose: 16770273, - moccasin: 16770229, - navajowhite: 16768685, - navy: 128, - oldlace: 16643558, - olive: 8421376, - olivedrab: 7048739, - orange: 16753920, - orangered: 16729344, - orchid: 14315734, - palegoldenrod: 15657130, - palegreen: 10025880, - paleturquoise: 11529966, - palevioletred: 14381203, - papayawhip: 16773077, - peachpuff: 16767673, - peru: 13468991, - pink: 16761035, - plum: 14524637, - powderblue: 11591910, - purple: 8388736, - rebeccapurple: 6697881, - red: 16711680, - rosybrown: 12357519, - royalblue: 4286945, - saddlebrown: 9127187, - salmon: 16416882, - sandybrown: 16032864, - seagreen: 3050327, - seashell: 16774638, - sienna: 10506797, - silver: 12632256, - skyblue: 8900331, - slateblue: 6970061, - slategray: 7372944, - slategrey: 7372944, - snow: 16775930, - springgreen: 65407, - steelblue: 4620980, - tan: 13808780, - teal: 32896, - thistle: 14204888, - tomato: 16737095, - turquoise: 4251856, - violet: 15631086, - wheat: 16113331, - white: 16777215, - whitesmoke: 16119285, - yellow: 16776960, - yellowgreen: 10145074 - }, - kt = { - h: 0, - s: 0, - l: 0 - }, - Wt = { - h: 0, - s: 0, - l: 0 - }; - - function jt(t, e, n) { - return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? t + 6 * (e - t) * n : n < .5 ? e : n < 2 / 3 ? t + 6 * (e - t) * (2 / 3 - n) : t - } - - function Xt(t) { - return t < .04045 ? .0773993808 * t : Math.pow(.9478672986 * t + .0521327014, 2.4) - } - - function qt(t) { - return t < .0031308 ? 12.92 * t : 1.055 * Math.pow(t, .41666) - .055 - } - class Yt { - constructor(t, e, n) { - return Object.defineProperty(this, "isColor", { - value: !0 - }), void 0 === e && void 0 === n ? this.set(t) : this.setRGB(t, e, n) - } - set(t) { - return t && t.isColor ? this.copy(t) : "number" == typeof t ? this.setHex(t) : "string" == typeof t && this.setStyle(t), this - } - setScalar(t) { - return this.r = t, this.g = t, this.b = t, this - } - setHex(t) { - return t = Math.floor(t), this.r = (t >> 16 & 255) / 255, this.g = (t >> 8 & 255) / 255, this.b = (255 & t) / 255, this - } - setRGB(t, e, n) { - return this.r = t, this.g = e, this.b = n, this - } - setHSL(t, e, n) { - if (t = g.euclideanModulo(t, 1), e = g.clamp(e, 0, 1), n = g.clamp(n, 0, 1), 0 === e) this.r = this.g = this.b = n; - else { - const i = n <= .5 ? n * (1 + e) : n + e - n * e, - r = 2 * n - i; - this.r = jt(r, i, t + 1 / 3), this.g = jt(r, i, t), this.b = jt(r, i, t - 1 / 3) - } - return this - } - setStyle(t) { - function e(e) { - void 0 !== e && parseFloat(e) < 1 && console.warn("THREE.Color: Alpha component of " + t + " will be ignored.") - } - let n; - if (n = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)) { - let t; - const i = n[1], - r = n[2]; - switch (i) { - case "rgb": - case "rgba": - if (t = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) return this.r = Math.min(255, parseInt(t[1], 10)) / 255, this.g = Math.min(255, parseInt(t[2], 10)) / 255, this.b = Math.min(255, parseInt(t[3], 10)) / 255, e(t[4]), this; - if (t = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) return this.r = Math.min(100, parseInt(t[1], 10)) / 100, this.g = Math.min(100, parseInt(t[2], 10)) / 100, this.b = Math.min(100, parseInt(t[3], 10)) / 100, e(t[4]), this; - break; - case "hsl": - case "hsla": - if (t = /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) { - const n = parseFloat(t[1]) / 360, - i = parseInt(t[2], 10) / 100, - r = parseInt(t[3], 10) / 100; - return e(t[4]), this.setHSL(n, i, r) - } - } - } else if (n = /^\#([A-Fa-f\d]+)$/.exec(t)) { - const t = n[1], - e = t.length; - if (3 === e) return this.r = parseInt(t.charAt(0) + t.charAt(0), 16) / 255, this.g = parseInt(t.charAt(1) + t.charAt(1), 16) / 255, this.b = parseInt(t.charAt(2) + t.charAt(2), 16) / 255, this; - if (6 === e) return this.r = parseInt(t.charAt(0) + t.charAt(1), 16) / 255, this.g = parseInt(t.charAt(2) + t.charAt(3), 16) / 255, this.b = parseInt(t.charAt(4) + t.charAt(5), 16) / 255, this - } - return t && t.length > 0 ? this.setColorName(t) : this - } - setColorName(t) { - const e = Vt[t]; - return void 0 !== e ? this.setHex(e) : console.warn("THREE.Color: Unknown color " + t), this - } - clone() { - return new this.constructor(this.r, this.g, this.b) - } - copy(t) { - return this.r = t.r, this.g = t.g, this.b = t.b, this - } - copyGammaToLinear(t, e = 2) { - return this.r = Math.pow(t.r, e), this.g = Math.pow(t.g, e), this.b = Math.pow(t.b, e), this - } - copyLinearToGamma(t, e = 2) { - const n = e > 0 ? 1 / e : 1; - return this.r = Math.pow(t.r, n), this.g = Math.pow(t.g, n), this.b = Math.pow(t.b, n), this - } - convertGammaToLinear(t) { - return this.copyGammaToLinear(this, t), this - } - convertLinearToGamma(t) { - return this.copyLinearToGamma(this, t), this - } - copySRGBToLinear(t) { - return this.r = Xt(t.r), this.g = Xt(t.g), this.b = Xt(t.b), this - } - copyLinearToSRGB(t) { - return this.r = qt(t.r), this.g = qt(t.g), this.b = qt(t.b), this - } - convertSRGBToLinear() { - return this.copySRGBToLinear(this), this - } - convertLinearToSRGB() { - return this.copyLinearToSRGB(this), this - } - getHex() { - return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0 - } - getHexString() { - return ("000000" + this.getHex().toString(16)).slice(-6) - } - getHSL(t) { - void 0 === t && (console.warn("THREE.Color: .getHSL() target is now required"), t = { - h: 0, - s: 0, - l: 0 - }); - const e = this.r, - n = this.g, - i = this.b, - r = Math.max(e, n, i), - o = Math.min(e, n, i); - let s, a; - const l = (o + r) / 2; - if (o === r) s = 0, a = 0; - else { - const t = r - o; - switch (a = l <= .5 ? t / (r + o) : t / (2 - r - o), r) { - case e: - s = (n - i) / t + (n < i ? 6 : 0); - break; - case n: - s = (i - e) / t + 2; - break; - case i: - s = (e - n) / t + 4 - } - s /= 6 - } - return t.h = s, t.s = a, t.l = l, t - } - getStyle() { - return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" - } - offsetHSL(t, e, n) { - return this.getHSL(kt), kt.h += t, kt.s += e, kt.l += n, this.setHSL(kt.h, kt.s, kt.l), this - } - add(t) { - return this.r += t.r, this.g += t.g, this.b += t.b, this - } - addColors(t, e) { - return this.r = t.r + e.r, this.g = t.g + e.g, this.b = t.b + e.b, this - } - addScalar(t) { - return this.r += t, this.g += t, this.b += t, this - } - sub(t) { - return this.r = Math.max(0, this.r - t.r), this.g = Math.max(0, this.g - t.g), this.b = Math.max(0, this.b - t.b), this - } - multiply(t) { - return this.r *= t.r, this.g *= t.g, this.b *= t.b, this - } - multiplyScalar(t) { - return this.r *= t, this.g *= t, this.b *= t, this - } - lerp(t, e) { - return this.r += (t.r - this.r) * e, this.g += (t.g - this.g) * e, this.b += (t.b - this.b) * e, this - } - lerpColors(t, e, n) { - return this.r = t.r + (e.r - t.r) * n, this.g = t.g + (e.g - t.g) * n, this.b = t.b + (e.b - t.b) * n, this - } - lerpHSL(t, e) { - this.getHSL(kt), t.getHSL(Wt); - const n = g.lerp(kt.h, Wt.h, e), - i = g.lerp(kt.s, Wt.s, e), - r = g.lerp(kt.l, Wt.l, e); - return this.setHSL(n, i, r), this - } - equals(t) { - return t.r === this.r && t.g === this.g && t.b === this.b - } - fromArray(t, e = 0) { - return this.r = t[e], this.g = t[e + 1], this.b = t[e + 2], this - } - toArray(t = [], e = 0) { - return t[e] = this.r, t[e + 1] = this.g, t[e + 2] = this.b, t - } - fromBufferAttribute(t, e) { - return this.r = t.getX(e), this.g = t.getY(e), this.b = t.getZ(e), !0 === t.normalized && (this.r /= 255, this.g /= 255, this.b /= 255), this - } - toJSON() { - return this.getHex() - } - } - Yt.NAMES = Vt, Yt.prototype.r = 1, Yt.prototype.g = 1, Yt.prototype.b = 1; - class Qt { - constructor(t, e, n, i, r, o = 0) { - this.a = t, this.b = e, this.c = n, this.normal = i && i.isVector3 ? i : new T, this.vertexNormals = Array.isArray(i) ? i : [], this.color = r && r.isColor ? r : new Yt, this.vertexColors = Array.isArray(r) ? r : [], this.materialIndex = o - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - this.a = t.a, this.b = t.b, this.c = t.c, this.normal.copy(t.normal), this.color.copy(t.color), this.materialIndex = t.materialIndex; - for (let e = 0, n = t.vertexNormals.length; e < n; e++) this.vertexNormals[e] = t.vertexNormals[e].clone(); - for (let e = 0, n = t.vertexColors.length; e < n; e++) this.vertexColors[e] = t.vertexColors[e].clone(); - return this - } - } - let Zt = 0; - - function Jt() { - Object.defineProperty(this, "id", { - value: Zt++ - }), this.uuid = g.generateUUID(), this.name = "", this.type = "Material", this.fog = !0, this.blending = 1, this.side = 0, this.flatShading = !1, this.vertexColors = !1, this.opacity = 1, this.transparent = !1, this.blendSrc = 204, this.blendDst = 205, this.blendEquation = 100, this.blendSrcAlpha = null, this.blendDstAlpha = null, this.blendEquationAlpha = null, this.depthFunc = 3, this.depthTest = !0, this.depthWrite = !0, this.stencilWriteMask = 255, this.stencilFunc = 519, this.stencilRef = 0, this.stencilFuncMask = 255, this.stencilFail = 7680, this.stencilZFail = 7680, this.stencilZPass = 7680, this.stencilWrite = !1, this.clippingPlanes = null, this.clipIntersection = !1, this.clipShadows = !1, this.shadowSide = null, this.colorWrite = !0, this.precision = null, this.polygonOffset = !1, this.polygonOffsetFactor = 0, this.polygonOffsetUnits = 0, this.dithering = !1, this.alphaTest = 0, this.premultipliedAlpha = !1, this.visible = !0, this.toneMapped = !0, this.userData = {}, this.version = 0 - } - - function Kt(t) { - Jt.call(this), this.type = "MeshBasicMaterial", this.color = new Yt(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.setValues(t) - } - Jt.prototype = Object.assign(Object.create(p.prototype), { - constructor: Jt, - isMaterial: !0, - onBeforeCompile: function() {}, - customProgramCacheKey: function() { - return this.onBeforeCompile.toString() - }, - setValues: function(t) { - if (void 0 !== t) - for (const e in t) { - const n = t[e]; - if (void 0 === n) { - console.warn("THREE.Material: '" + e + "' parameter is undefined."); - continue - } - if ("shading" === e) { - console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === n; - continue - } - const i = this[e]; - void 0 !== i ? i && i.isColor ? i.set(n) : i && i.isVector3 && n && n.isVector3 ? i.copy(n) : this[e] = n : console.warn("THREE." + this.type + ": '" + e + "' is not a property of this material.") - } - }, - toJSON: function(t) { - const e = void 0 === t || "string" == typeof t; - e && (t = { - textures: {}, - images: {} - }); - const n = { - metadata: { - version: 4.5, - type: "Material", - generator: "Material.toJSON" - } - }; - - function i(t) { - const e = []; - for (const n in t) { - const i = t[n]; - delete i.metadata, e.push(i) - } - return e - } - if (n.uuid = this.uuid, n.type = this.type, "" !== this.name && (n.name = this.name), this.color && this.color.isColor && (n.color = this.color.getHex()), void 0 !== this.roughness && (n.roughness = this.roughness), void 0 !== this.metalness && (n.metalness = this.metalness), this.sheen && this.sheen.isColor && (n.sheen = this.sheen.getHex()), this.emissive && this.emissive.isColor && (n.emissive = this.emissive.getHex()), this.emissiveIntensity && 1 !== this.emissiveIntensity && (n.emissiveIntensity = this.emissiveIntensity), this.specular && this.specular.isColor && (n.specular = this.specular.getHex()), void 0 !== this.shininess && (n.shininess = this.shininess), void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat), void 0 !== this.clearcoatRoughness && (n.clearcoatRoughness = this.clearcoatRoughness), this.clearcoatMap && this.clearcoatMap.isTexture && (n.clearcoatMap = this.clearcoatMap.toJSON(t).uuid), this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture && (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(t).uuid), this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(t).uuid, n.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), this.map && this.map.isTexture && (n.map = this.map.toJSON(t).uuid), this.matcap && this.matcap.isTexture && (n.matcap = this.matcap.toJSON(t).uuid), this.alphaMap && this.alphaMap.isTexture && (n.alphaMap = this.alphaMap.toJSON(t).uuid), this.lightMap && this.lightMap.isTexture && (n.lightMap = this.lightMap.toJSON(t).uuid), this.aoMap && this.aoMap.isTexture && (n.aoMap = this.aoMap.toJSON(t).uuid, n.aoMapIntensity = this.aoMapIntensity), this.bumpMap && this.bumpMap.isTexture && (n.bumpMap = this.bumpMap.toJSON(t).uuid, n.bumpScale = this.bumpScale), this.normalMap && this.normalMap.isTexture && (n.normalMap = this.normalMap.toJSON(t).uuid, n.normalMapType = this.normalMapType, n.normalScale = this.normalScale.toArray()), this.displacementMap && this.displacementMap.isTexture && (n.displacementMap = this.displacementMap.toJSON(t).uuid, n.displacementScale = this.displacementScale, n.displacementBias = this.displacementBias), this.roughnessMap && this.roughnessMap.isTexture && (n.roughnessMap = this.roughnessMap.toJSON(t).uuid), this.metalnessMap && this.metalnessMap.isTexture && (n.metalnessMap = this.metalnessMap.toJSON(t).uuid), this.emissiveMap && this.emissiveMap.isTexture && (n.emissiveMap = this.emissiveMap.toJSON(t).uuid), this.specularMap && this.specularMap.isTexture && (n.specularMap = this.specularMap.toJSON(t).uuid), this.envMap && this.envMap.isTexture && (n.envMap = this.envMap.toJSON(t).uuid, n.reflectivity = this.reflectivity, n.refractionRatio = this.refractionRatio, void 0 !== this.combine && (n.combine = this.combine), void 0 !== this.envMapIntensity && (n.envMapIntensity = this.envMapIntensity)), this.gradientMap && this.gradientMap.isTexture && (n.gradientMap = this.gradientMap.toJSON(t).uuid), void 0 !== this.size && (n.size = this.size), void 0 !== this.sizeAttenuation && (n.sizeAttenuation = this.sizeAttenuation), 1 !== this.blending && (n.blending = this.blending), !0 === this.flatShading && (n.flatShading = this.flatShading), 0 !== this.side && (n.side = this.side), this.vertexColors && (n.vertexColors = !0), this.opacity < 1 && (n.opacity = this.opacity), !0 === this.transparent && (n.transparent = this.transparent), n.depthFunc = this.depthFunc, n.depthTest = this.depthTest, n.depthWrite = this.depthWrite, n.stencilWrite = this.stencilWrite, n.stencilWriteMask = this.stencilWriteMask, n.stencilFunc = this.stencilFunc, n.stencilRef = this.stencilRef, n.stencilFuncMask = this.stencilFuncMask, n.stencilFail = this.stencilFail, n.stencilZFail = this.stencilZFail, n.stencilZPass = this.stencilZPass, this.rotation && 0 !== this.rotation && (n.rotation = this.rotation), !0 === this.polygonOffset && (n.polygonOffset = !0), 0 !== this.polygonOffsetFactor && (n.polygonOffsetFactor = this.polygonOffsetFactor), 0 !== this.polygonOffsetUnits && (n.polygonOffsetUnits = this.polygonOffsetUnits), this.linewidth && 1 !== this.linewidth && (n.linewidth = this.linewidth), void 0 !== this.dashSize && (n.dashSize = this.dashSize), void 0 !== this.gapSize && (n.gapSize = this.gapSize), void 0 !== this.scale && (n.scale = this.scale), !0 === this.dithering && (n.dithering = !0), this.alphaTest > 0 && (n.alphaTest = this.alphaTest), !0 === this.premultipliedAlpha && (n.premultipliedAlpha = this.premultipliedAlpha), !0 === this.wireframe && (n.wireframe = this.wireframe), this.wireframeLinewidth > 1 && (n.wireframeLinewidth = this.wireframeLinewidth), "round" !== this.wireframeLinecap && (n.wireframeLinecap = this.wireframeLinecap), "round" !== this.wireframeLinejoin && (n.wireframeLinejoin = this.wireframeLinejoin), !0 === this.morphTargets && (n.morphTargets = !0), !0 === this.morphNormals && (n.morphNormals = !0), !0 === this.skinning && (n.skinning = !0), !1 === this.visible && (n.visible = !1), !1 === this.toneMapped && (n.toneMapped = !1), "{}" !== JSON.stringify(this.userData) && (n.userData = this.userData), e) { - const e = i(t.textures), - r = i(t.images); - e.length > 0 && (n.textures = e), r.length > 0 && (n.images = r) - } - return n - }, - clone: function() { - return (new this.constructor).copy(this) - }, - copy: function(t) { - this.name = t.name, this.fog = t.fog, this.blending = t.blending, this.side = t.side, this.flatShading = t.flatShading, this.vertexColors = t.vertexColors, this.opacity = t.opacity, this.transparent = t.transparent, this.blendSrc = t.blendSrc, this.blendDst = t.blendDst, this.blendEquation = t.blendEquation, this.blendSrcAlpha = t.blendSrcAlpha, this.blendDstAlpha = t.blendDstAlpha, this.blendEquationAlpha = t.blendEquationAlpha, this.depthFunc = t.depthFunc, this.depthTest = t.depthTest, this.depthWrite = t.depthWrite, this.stencilWriteMask = t.stencilWriteMask, this.stencilFunc = t.stencilFunc, this.stencilRef = t.stencilRef, this.stencilFuncMask = t.stencilFuncMask, this.stencilFail = t.stencilFail, this.stencilZFail = t.stencilZFail, this.stencilZPass = t.stencilZPass, this.stencilWrite = t.stencilWrite; - const e = t.clippingPlanes; - let n = null; - if (null !== e) { - const t = e.length; - n = new Array(t); - for (let i = 0; i !== t; ++i) n[i] = e[i].clone() - } - return this.clippingPlanes = n, this.clipIntersection = t.clipIntersection, this.clipShadows = t.clipShadows, this.shadowSide = t.shadowSide, this.colorWrite = t.colorWrite, this.precision = t.precision, this.polygonOffset = t.polygonOffset, this.polygonOffsetFactor = t.polygonOffsetFactor, this.polygonOffsetUnits = t.polygonOffsetUnits, this.dithering = t.dithering, this.alphaTest = t.alphaTest, this.premultipliedAlpha = t.premultipliedAlpha, this.visible = t.visible, this.toneMapped = t.toneMapped, this.userData = JSON.parse(JSON.stringify(t.userData)), this - }, - dispose: function() { - this.dispatchEvent({ - type: "dispose" - }) - } - }), Object.defineProperty(Jt.prototype, "needsUpdate", { - set: function(t) { - !0 === t && this.version++ - } - }), Kt.prototype = Object.create(Jt.prototype), Kt.prototype.constructor = Kt, Kt.prototype.isMeshBasicMaterial = !0, Kt.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this - }; - const $t = new T, - te = new v; - - function ee(t, e, n) { - if (Array.isArray(t)) throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); - this.name = "", this.array = t, this.itemSize = e, this.count = void 0 !== t ? t.length / e : 0, this.normalized = !0 === n, this.usage = 35044, this.updateRange = { - offset: 0, - count: -1 - }, this.version = 0 - } - - function ne(t, e, n) { - ee.call(this, new Int8Array(t), e, n) - } - - function ie(t, e, n) { - ee.call(this, new Uint8Array(t), e, n) - } - - function re(t, e, n) { - ee.call(this, new Uint8ClampedArray(t), e, n) - } - - function oe(t, e, n) { - ee.call(this, new Int16Array(t), e, n) - } - - function se(t, e, n) { - ee.call(this, new Uint16Array(t), e, n) - } - - function ae(t, e, n) { - ee.call(this, new Int32Array(t), e, n) - } - - function le(t, e, n) { - ee.call(this, new Uint32Array(t), e, n) - } - - function ce(t, e, n) { - ee.call(this, new Uint16Array(t), e, n) - } - - function he(t, e, n) { - ee.call(this, new Float32Array(t), e, n) - } - - function ue(t, e, n) { - ee.call(this, new Float64Array(t), e, n) - } - - function de(t) { - if (0 === t.length) return -1 / 0; - let e = t[0]; - for (let n = 1, i = t.length; n < i; ++n) t[n] > e && (e = t[n]); - return e - } - Object.defineProperty(ee.prototype, "needsUpdate", { - set: function(t) { - !0 === t && this.version++ - } - }), Object.assign(ee.prototype, { - isBufferAttribute: !0, - onUploadCallback: function() {}, - setUsage: function(t) { - return this.usage = t, this - }, - copy: function(t) { - return this.name = t.name, this.array = new t.array.constructor(t.array), this.itemSize = t.itemSize, this.count = t.count, this.normalized = t.normalized, this.usage = t.usage, this - }, - copyAt: function(t, e, n) { - t *= this.itemSize, n *= e.itemSize; - for (let i = 0, r = this.itemSize; i < r; i++) this.array[t + i] = e.array[n + i]; - return this - }, - copyArray: function(t) { - return this.array.set(t), this - }, - copyColorsArray: function(t) { - const e = this.array; - let n = 0; - for (let i = 0, r = t.length; i < r; i++) { - let r = t[i]; - void 0 === r && (console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined", i), r = new Yt), e[n++] = r.r, e[n++] = r.g, e[n++] = r.b - } - return this - }, - copyVector2sArray: function(t) { - const e = this.array; - let n = 0; - for (let i = 0, r = t.length; i < r; i++) { - let r = t[i]; - void 0 === r && (console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined", i), r = new v), e[n++] = r.x, e[n++] = r.y - } - return this - }, - copyVector3sArray: function(t) { - const e = this.array; - let n = 0; - for (let i = 0, r = t.length; i < r; i++) { - let r = t[i]; - void 0 === r && (console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined", i), r = new T), e[n++] = r.x, e[n++] = r.y, e[n++] = r.z - } - return this - }, - copyVector4sArray: function(t) { - const e = this.array; - let n = 0; - for (let i = 0, r = t.length; i < r; i++) { - let r = t[i]; - void 0 === r && (console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined", i), r = new M), e[n++] = r.x, e[n++] = r.y, e[n++] = r.z, e[n++] = r.w - } - return this - }, - applyMatrix3: function(t) { - if (2 === this.itemSize) - for (let e = 0, n = this.count; e < n; e++) te.fromBufferAttribute(this, e), te.applyMatrix3(t), this.setXY(e, te.x, te.y); - else if (3 === this.itemSize) - for (let e = 0, n = this.count; e < n; e++) $t.fromBufferAttribute(this, e), $t.applyMatrix3(t), this.setXYZ(e, $t.x, $t.y, $t.z); - return this - }, - applyMatrix4: function(t) { - for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.applyMatrix4(t), this.setXYZ(e, $t.x, $t.y, $t.z); - return this - }, - applyNormalMatrix: function(t) { - for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.applyNormalMatrix(t), this.setXYZ(e, $t.x, $t.y, $t.z); - return this - }, - transformDirection: function(t) { - for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.transformDirection(t), this.setXYZ(e, $t.x, $t.y, $t.z); - return this - }, - set: function(t, e = 0) { - return this.array.set(t, e), this - }, - getX: function(t) { - return this.array[t * this.itemSize] - }, - setX: function(t, e) { - return this.array[t * this.itemSize] = e, this - }, - getY: function(t) { - return this.array[t * this.itemSize + 1] - }, - setY: function(t, e) { - return this.array[t * this.itemSize + 1] = e, this - }, - getZ: function(t) { - return this.array[t * this.itemSize + 2] - }, - setZ: function(t, e) { - return this.array[t * this.itemSize + 2] = e, this - }, - getW: function(t) { - return this.array[t * this.itemSize + 3] - }, - setW: function(t, e) { - return this.array[t * this.itemSize + 3] = e, this - }, - setXY: function(t, e, n) { - return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this - }, - setXYZ: function(t, e, n, i) { - return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this - }, - setXYZW: function(t, e, n, i, r) { - return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this.array[t + 3] = r, this - }, - onUpload: function(t) { - return this.onUploadCallback = t, this - }, - clone: function() { - return new this.constructor(this.array, this.itemSize).copy(this) - }, - toJSON: function() { - return { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: Array.prototype.slice.call(this.array), - normalized: this.normalized - } - } - }), ne.prototype = Object.create(ee.prototype), ne.prototype.constructor = ne, ie.prototype = Object.create(ee.prototype), ie.prototype.constructor = ie, re.prototype = Object.create(ee.prototype), re.prototype.constructor = re, oe.prototype = Object.create(ee.prototype), oe.prototype.constructor = oe, se.prototype = Object.create(ee.prototype), se.prototype.constructor = se, ae.prototype = Object.create(ee.prototype), ae.prototype.constructor = ae, le.prototype = Object.create(ee.prototype), le.prototype.constructor = le, ce.prototype = Object.create(ee.prototype), ce.prototype.constructor = ce, ce.prototype.isFloat16BufferAttribute = !0, he.prototype = Object.create(ee.prototype), he.prototype.constructor = he, ue.prototype = Object.create(ee.prototype), ue.prototype.constructor = ue; - const pe = { - Int8Array: Int8Array, - Uint8Array: Uint8Array, - Uint8ClampedArray: "undefined" != typeof Uint8ClampedArray ? Uint8ClampedArray : Uint8Array, - Int16Array: Int16Array, - Uint16Array: Uint16Array, - Int32Array: Int32Array, - Uint32Array: Uint32Array, - Float32Array: Float32Array, - Float64Array: Float64Array - }; - - function fe(t, e) { - return new pe[t](e) - } - let me = 0; - const ge = new et, - ve = new St, - ye = new T, - Ae = new C, - xe = new C, - _e = new T; - - function be() { - Object.defineProperty(this, "id", { - value: me++ - }), this.uuid = g.generateUUID(), this.name = "", this.type = "BufferGeometry", this.index = null, this.attributes = {}, this.morphAttributes = {}, this.morphTargetsRelative = !1, this.groups = [], this.boundingBox = null, this.boundingSphere = null, this.drawRange = { - start: 0, - count: 1 / 0 - }, this.userData = {} - } - be.prototype = Object.assign(Object.create(p.prototype), { - constructor: be, - isBufferGeometry: !0, - getIndex: function() { - return this.index - }, - setIndex: function(t) { - return Array.isArray(t) ? this.index = new(de(t) > 65535 ? le : se)(t, 1) : this.index = t, this - }, - getAttribute: function(t) { - return this.attributes[t] - }, - setAttribute: function(t, e) { - return this.attributes[t] = e, this - }, - deleteAttribute: function(t) { - return delete this.attributes[t], this - }, - hasAttribute: function(t) { - return void 0 !== this.attributes[t] - }, - addGroup: function(t, e, n = 0) { - this.groups.push({ - start: t, - count: e, - materialIndex: n - }) - }, - clearGroups: function() { - this.groups = [] - }, - setDrawRange: function(t, e) { - this.drawRange.start = t, this.drawRange.count = e - }, - applyMatrix4: function(t) { - const e = this.attributes.position; - void 0 !== e && (e.applyMatrix4(t), e.needsUpdate = !0); - const n = this.attributes.normal; - if (void 0 !== n) { - const e = (new y).getNormalMatrix(t); - n.applyNormalMatrix(e), n.needsUpdate = !0 - } - const i = this.attributes.tangent; - return void 0 !== i && (i.transformDirection(t), i.needsUpdate = !0), null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this - }, - rotateX: function(t) { - return ge.makeRotationX(t), this.applyMatrix4(ge), this - }, - rotateY: function(t) { - return ge.makeRotationY(t), this.applyMatrix4(ge), this - }, - rotateZ: function(t) { - return ge.makeRotationZ(t), this.applyMatrix4(ge), this - }, - translate: function(t, e, n) { - return ge.makeTranslation(t, e, n), this.applyMatrix4(ge), this - }, - scale: function(t, e, n) { - return ge.makeScale(t, e, n), this.applyMatrix4(ge), this - }, - lookAt: function(t) { - return ve.lookAt(t), ve.updateMatrix(), this.applyMatrix4(ve.matrix), this - }, - center: function() { - return this.computeBoundingBox(), this.boundingBox.getCenter(ye).negate(), this.translate(ye.x, ye.y, ye.z), this - }, - setFromPoints: function(t) { - const e = []; - for (let n = 0, i = t.length; n < i; n++) { - const i = t[n]; - e.push(i.x, i.y, i.z || 0) - } - return this.setAttribute("position", new he(e, 3)), this - }, - computeBoundingBox: function() { - null === this.boundingBox && (this.boundingBox = new C); - const t = this.attributes.position, - e = this.morphAttributes.position; - if (t && t.isGLBufferAttribute) return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this), void this.boundingBox.set(new T(-1 / 0, -1 / 0, -1 / 0), new T(1 / 0, 1 / 0, 1 / 0)); - if (void 0 !== t) { - if (this.boundingBox.setFromBufferAttribute(t), e) - for (let t = 0, n = e.length; t < n; t++) { - const n = e[t]; - Ae.setFromBufferAttribute(n), this.morphTargetsRelative ? (_e.addVectors(this.boundingBox.min, Ae.min), this.boundingBox.expandByPoint(_e), _e.addVectors(this.boundingBox.max, Ae.max), this.boundingBox.expandByPoint(_e)) : (this.boundingBox.expandByPoint(Ae.min), this.boundingBox.expandByPoint(Ae.max)) - } - } else 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() { - null === this.boundingSphere && (this.boundingSphere = new X); - const t = this.attributes.position, - e = this.morphAttributes.position; - if (t && t.isGLBufferAttribute) return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this), void this.boundingSphere.set(new T, 1 / 0); - if (t) { - const n = this.boundingSphere.center; - if (Ae.setFromBufferAttribute(t), e) - for (let t = 0, n = e.length; t < n; t++) { - const n = e[t]; - xe.setFromBufferAttribute(n), this.morphTargetsRelative ? (_e.addVectors(Ae.min, xe.min), Ae.expandByPoint(_e), _e.addVectors(Ae.max, xe.max), Ae.expandByPoint(_e)) : (Ae.expandByPoint(xe.min), Ae.expandByPoint(xe.max)) - } - Ae.getCenter(n); - let i = 0; - for (let e = 0, r = t.count; e < r; e++) _e.fromBufferAttribute(t, e), i = Math.max(i, n.distanceToSquared(_e)); - if (e) - for (let r = 0, o = e.length; r < o; r++) { - const o = e[r], - s = this.morphTargetsRelative; - for (let e = 0, r = o.count; e < r; e++) _e.fromBufferAttribute(o, e), s && (ye.fromBufferAttribute(t, e), _e.add(ye)), i = Math.max(i, n.distanceToSquared(_e)) - } - this.boundingSphere.radius = Math.sqrt(i), 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() {}, - computeTangents: function() { - const t = this.index, - e = this.attributes; - if (null === t || void 0 === e.position || void 0 === e.normal || void 0 === e.uv) return void console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)"); - const n = t.array, - i = e.position.array, - r = e.normal.array, - o = e.uv.array, - s = i.length / 3; - void 0 === e.tangent && this.setAttribute("tangent", new ee(new Float32Array(4 * s), 4)); - const a = e.tangent.array, - l = [], - c = []; - for (let t = 0; t < s; t++) l[t] = new T, c[t] = new T; - const h = new T, - u = new T, - d = new T, - p = new v, - f = new v, - m = new v, - g = new T, - y = new T; - - function A(t, e, n) { - h.fromArray(i, 3 * t), u.fromArray(i, 3 * e), d.fromArray(i, 3 * n), p.fromArray(o, 2 * t), f.fromArray(o, 2 * e), m.fromArray(o, 2 * n), u.sub(h), d.sub(h), f.sub(p), m.sub(p); - const r = 1 / (f.x * m.y - m.x * f.y); - isFinite(r) && (g.copy(u).multiplyScalar(m.y).addScaledVector(d, -f.y).multiplyScalar(r), y.copy(d).multiplyScalar(f.x).addScaledVector(u, -m.x).multiplyScalar(r), l[t].add(g), l[e].add(g), l[n].add(g), c[t].add(y), c[e].add(y), c[n].add(y)) - } - let x = this.groups; - 0 === x.length && (x = [{ - start: 0, - count: n.length - }]); - for (let t = 0, e = x.length; t < e; ++t) { - const e = x[t], - i = e.start; - for (let t = i, r = i + e.count; t < r; t += 3) A(n[t + 0], n[t + 1], n[t + 2]) - } - const _ = new T, - b = new T, - w = new T, - M = new T; - - function E(t) { - w.fromArray(r, 3 * t), M.copy(w); - const e = l[t]; - _.copy(e), _.sub(w.multiplyScalar(w.dot(e))).normalize(), b.crossVectors(M, e); - const n = b.dot(c[t]) < 0 ? -1 : 1; - a[4 * t] = _.x, a[4 * t + 1] = _.y, a[4 * t + 2] = _.z, a[4 * t + 3] = n - } - for (let t = 0, e = x.length; t < e; ++t) { - const e = x[t], - i = e.start; - for (let t = i, r = i + e.count; t < r; t += 3) E(n[t + 0]), E(n[t + 1]), E(n[t + 2]) - } - }, - computeVertexNormals: function() { - const t = this.index, - e = this.getAttribute("position"); - if (void 0 !== e) { - let n = this.getAttribute("normal"); - if (void 0 === n) n = new ee(new Float32Array(3 * e.count), 3), this.setAttribute("normal", n); - else - for (let t = 0, e = n.count; t < e; t++) n.setXYZ(t, 0, 0, 0); - const i = new T, - r = new T, - o = new T, - s = new T, - a = new T, - l = new T, - c = new T, - h = new T; - if (t) - for (let u = 0, d = t.count; u < d; u += 3) { - const d = t.getX(u + 0), - p = t.getX(u + 1), - f = t.getX(u + 2); - i.fromBufferAttribute(e, d), r.fromBufferAttribute(e, p), o.fromBufferAttribute(e, f), c.subVectors(o, r), h.subVectors(i, r), c.cross(h), s.fromBufferAttribute(n, d), a.fromBufferAttribute(n, p), l.fromBufferAttribute(n, f), s.add(c), a.add(c), l.add(c), n.setXYZ(d, s.x, s.y, s.z), n.setXYZ(p, a.x, a.y, a.z), n.setXYZ(f, l.x, l.y, l.z) - } else - for (let t = 0, s = e.count; t < s; t += 3) i.fromBufferAttribute(e, t + 0), r.fromBufferAttribute(e, t + 1), o.fromBufferAttribute(e, t + 2), c.subVectors(o, r), h.subVectors(i, r), c.cross(h), n.setXYZ(t + 0, c.x, c.y, c.z), n.setXYZ(t + 1, c.x, c.y, c.z), n.setXYZ(t + 2, c.x, c.y, c.z); - this.normalizeNormals(), n.needsUpdate = !0 - } - }, - merge: function(t, e) { - if (!t || !t.isBufferGeometry) return void console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.", t); - void 0 === e && (e = 0, console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.")); - const n = this.attributes; - for (const i in n) { - if (void 0 === t.attributes[i]) continue; - const r = n[i].array, - o = t.attributes[i], - s = o.array, - a = o.itemSize * e, - l = Math.min(s.length, r.length - a); - for (let t = 0, e = a; t < l; t++, e++) r[e] = s[t] - } - return this - }, - normalizeNormals: function() { - const t = this.attributes.normal; - for (let e = 0, n = t.count; e < n; e++) _e.fromBufferAttribute(t, e), _e.normalize(), t.setXYZ(e, _e.x, _e.y, _e.z) - }, - toNonIndexed: function() { - function t(t, e) { - const n = t.array, - i = t.itemSize, - r = t.normalized, - o = new n.constructor(e.length * i); - let s = 0, - a = 0; - for (let t = 0, r = e.length; t < r; t++) { - s = e[t] * i; - for (let t = 0; t < i; t++) o[a++] = n[s++] - } - return new ee(o, i, r) - } - if (null === this.index) return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."), this; - const e = new be, - n = this.index.array, - i = this.attributes; - for (const r in i) { - const o = t(i[r], n); - e.setAttribute(r, o) - } - const r = this.morphAttributes; - for (const i in r) { - const o = [], - s = r[i]; - for (let e = 0, i = s.length; e < i; e++) { - const i = t(s[e], n); - o.push(i) - } - e.morphAttributes[i] = o - } - e.morphTargetsRelative = this.morphTargetsRelative; - const o = this.groups; - for (let t = 0, n = o.length; t < n; t++) { - const n = o[t]; - e.addGroup(n.start, n.count, n.materialIndex) - } - return e - }, - toJSON: function() { - const t = { - metadata: { - version: 4.5, - type: "BufferGeometry", - generator: "BufferGeometry.toJSON" - } - }; - if (t.uuid = this.uuid, t.type = this.type, "" !== this.name && (t.name = this.name), Object.keys(this.userData).length > 0 && (t.userData = this.userData), void 0 !== this.parameters) { - const e = this.parameters; - for (const n in e) void 0 !== e[n] && (t[n] = e[n]); - return t - } - t.data = { - attributes: {} - }; - const e = this.index; - null !== e && (t.data.index = { - type: e.array.constructor.name, - array: Array.prototype.slice.call(e.array) - }); - const n = this.attributes; - for (const e in n) { - const i = n[e], - r = i.toJSON(t.data); - "" !== i.name && (r.name = i.name), t.data.attributes[e] = r - } - const i = {}; - let r = !1; - for (const e in this.morphAttributes) { - const n = this.morphAttributes[e], - o = []; - for (let e = 0, i = n.length; e < i; e++) { - const i = n[e], - r = i.toJSON(t.data); - "" !== i.name && (r.name = i.name), o.push(r) - } - o.length > 0 && (i[e] = o, r = !0) - } - r && (t.data.morphAttributes = i, t.data.morphTargetsRelative = this.morphTargetsRelative); - const o = this.groups; - o.length > 0 && (t.data.groups = JSON.parse(JSON.stringify(o))); - const s = this.boundingSphere; - return null !== s && (t.data.boundingSphere = { - center: s.center.toArray(), - radius: s.radius - }), t - }, - clone: function() { - return (new be).copy(this) - }, - copy: function(t) { - this.index = null, this.attributes = {}, this.morphAttributes = {}, this.groups = [], this.boundingBox = null, this.boundingSphere = null; - const e = {}; - this.name = t.name; - const n = t.index; - null !== n && this.setIndex(n.clone(e)); - const i = t.attributes; - for (const t in i) { - const n = i[t]; - this.setAttribute(t, n.clone(e)) - } - const r = t.morphAttributes; - for (const t in r) { - const n = [], - i = r[t]; - for (let t = 0, r = i.length; t < r; t++) n.push(i[t].clone(e)); - this.morphAttributes[t] = n - } - this.morphTargetsRelative = t.morphTargetsRelative; - const o = t.groups; - for (let t = 0, e = o.length; t < e; t++) { - const e = o[t]; - this.addGroup(e.start, e.count, e.materialIndex) - } - const s = t.boundingBox; - null !== s && (this.boundingBox = s.clone()); - const a = t.boundingSphere; - return null !== a && (this.boundingSphere = a.clone()), this.drawRange.start = t.drawRange.start, this.drawRange.count = t.drawRange.count, this.userData = t.userData, this - }, - dispose: function() { - this.dispatchEvent({ - type: "dispose" - }) - } - }); - const we = new et, - Me = new tt, - Ee = new X, - Se = new T, - Te = new T, - Le = new T, - Re = new T, - Ce = new T, - Pe = new T, - De = new T, - Ie = new T, - Oe = new T, - Ne = new v, - Be = new v, - Fe = new v, - ze = new T, - Ue = new T; - - function He(t = new be, e = new Kt) { - St.call(this), this.type = "Mesh", this.geometry = t, this.material = e, this.updateMorphTargets() - } - - function Ge(t, e, n, i, r, o, s, a, l, c, h, u) { - Se.fromBufferAttribute(r, c), Te.fromBufferAttribute(r, h), Le.fromBufferAttribute(r, u); - const d = t.morphTargetInfluences; - if (e.morphTargets && o && d) { - De.set(0, 0, 0), Ie.set(0, 0, 0), Oe.set(0, 0, 0); - for (let t = 0, e = o.length; t < e; t++) { - const e = d[t], - n = o[t]; - 0 !== e && (Re.fromBufferAttribute(n, c), Ce.fromBufferAttribute(n, h), Pe.fromBufferAttribute(n, u), s ? (De.addScaledVector(Re, e), Ie.addScaledVector(Ce, e), Oe.addScaledVector(Pe, e)) : (De.addScaledVector(Re.sub(Se), e), Ie.addScaledVector(Ce.sub(Te), e), Oe.addScaledVector(Pe.sub(Le), e))) - } - Se.add(De), Te.add(Ie), Le.add(Oe) - } - t.isSkinnedMesh && (t.boneTransform(c, Se), t.boneTransform(h, Te), t.boneTransform(u, Le)); - const p = function(t, e, n, i, r, o, s, a) { - let l; - if (l = 1 === e.side ? i.intersectTriangle(s, o, r, !0, a) : i.intersectTriangle(r, o, s, 2 !== e.side, a), null === l) return null; - Ue.copy(a), Ue.applyMatrix4(t.matrixWorld); - const c = n.ray.origin.distanceTo(Ue); - return c < n.near || c > n.far ? null : { - distance: c, - point: Ue.clone(), - object: t - } - }(t, e, n, i, Se, Te, Le, ze); - if (p) { - a && (Ne.fromBufferAttribute(a, c), Be.fromBufferAttribute(a, h), Fe.fromBufferAttribute(a, u), p.uv = Gt.getUV(ze, Se, Te, Le, Ne, Be, Fe, new v)), l && (Ne.fromBufferAttribute(l, c), Be.fromBufferAttribute(l, h), Fe.fromBufferAttribute(l, u), p.uv2 = Gt.getUV(ze, Se, Te, Le, Ne, Be, Fe, new v)); - const t = new Qt(c, h, u); - Gt.getNormal(Se, Te, Le, t.normal), p.face = t - } - return p - } - He.prototype = Object.assign(Object.create(St.prototype), { - constructor: He, - isMesh: !0, - copy: function(t) { - return St.prototype.copy.call(this, t), void 0 !== t.morphTargetInfluences && (this.morphTargetInfluences = t.morphTargetInfluences.slice()), void 0 !== t.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, t.morphTargetDictionary)), this.material = t.material, this.geometry = t.geometry, this - }, - updateMorphTargets: function() { - const t = this.geometry; - if (t.isBufferGeometry) { - const e = t.morphAttributes, - n = Object.keys(e); - if (n.length > 0) { - const t = e[n[0]]; - if (void 0 !== t) { - this.morphTargetInfluences = [], this.morphTargetDictionary = {}; - for (let e = 0, n = t.length; e < n; e++) { - const n = t[e].name || String(e); - this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e - } - } - } - } else { - const e = t.morphTargets; - void 0 !== e && e.length > 0 && console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") - } - }, - raycast: function(t, e) { - const n = this.geometry, - i = this.material, - r = this.matrixWorld; - if (void 0 === i) return; - if (null === n.boundingSphere && n.computeBoundingSphere(), Ee.copy(n.boundingSphere), Ee.applyMatrix4(r), !1 === t.ray.intersectsSphere(Ee)) return; - if (we.copy(r).invert(), Me.copy(t.ray).applyMatrix4(we), null !== n.boundingBox && !1 === Me.intersectsBox(n.boundingBox)) return; - let o; - if (n.isBufferGeometry) { - const r = n.index, - s = n.attributes.position, - a = n.morphAttributes.position, - l = n.morphTargetsRelative, - c = n.attributes.uv, - h = n.attributes.uv2, - u = n.groups, - d = n.drawRange; - if (null !== r) - if (Array.isArray(i)) - for (let n = 0, p = u.length; n < p; n++) { - const p = u[n], - f = i[p.materialIndex]; - for (let n = Math.max(p.start, d.start), i = Math.min(p.start + p.count, d.start + d.count); n < i; n += 3) { - const i = r.getX(n), - u = r.getX(n + 1), - d = r.getX(n + 2); - o = Ge(this, f, t, Me, s, a, l, c, h, i, u, d), o && (o.faceIndex = Math.floor(n / 3), o.face.materialIndex = p.materialIndex, e.push(o)) - } - } else { - for (let n = Math.max(0, d.start), u = Math.min(r.count, d.start + d.count); n < u; n += 3) { - const u = r.getX(n), - d = r.getX(n + 1), - p = r.getX(n + 2); - o = Ge(this, i, t, Me, s, a, l, c, h, u, d, p), o && (o.faceIndex = Math.floor(n / 3), e.push(o)) - } - } else if (void 0 !== s) - if (Array.isArray(i)) - for (let n = 0, r = u.length; n < r; n++) { - const r = u[n], - p = i[r.materialIndex]; - for (let n = Math.max(r.start, d.start), i = Math.min(r.start + r.count, d.start + d.count); n < i; n += 3) { - o = Ge(this, p, t, Me, s, a, l, c, h, n, n + 1, n + 2), o && (o.faceIndex = Math.floor(n / 3), o.face.materialIndex = r.materialIndex, e.push(o)) - } - } else { - for (let n = Math.max(0, d.start), r = Math.min(s.count, d.start + d.count); n < r; n += 3) { - o = Ge(this, i, t, Me, s, a, l, c, h, n, n + 1, n + 2), o && (o.faceIndex = Math.floor(n / 3), e.push(o)) - } - } - } else n.isGeometry && console.error("THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") - } - }); - class Ve extends be { - constructor(t = 1, e = 1, n = 1, i = 1, r = 1, o = 1) { - super(), this.type = "BoxGeometry", this.parameters = { - width: t, - height: e, - depth: n, - widthSegments: i, - heightSegments: r, - depthSegments: o - }; - const s = this; - i = Math.floor(i), r = Math.floor(r), o = Math.floor(o); - const a = [], - l = [], - c = [], - h = []; - let u = 0, - d = 0; - - function p(t, e, n, i, r, o, p, f, m, g, v) { - const y = o / m, - A = p / g, - x = o / 2, - _ = p / 2, - b = f / 2, - w = m + 1, - M = g + 1; - let E = 0, - S = 0; - const L = new T; - for (let o = 0; o < M; o++) { - const s = o * A - _; - for (let a = 0; a < w; a++) { - const u = a * y - x; - L[t] = u * i, L[e] = s * r, L[n] = b, l.push(L.x, L.y, L.z), L[t] = 0, L[e] = 0, L[n] = f > 0 ? 1 : -1, c.push(L.x, L.y, L.z), h.push(a / m), h.push(1 - o / g), E += 1 - } - } - for (let t = 0; t < g; t++) - for (let e = 0; e < m; e++) { - const n = u + e + w * t, - i = u + e + w * (t + 1), - r = u + (e + 1) + w * (t + 1), - o = u + (e + 1) + w * t; - a.push(n, i, o), a.push(i, r, o), S += 6 - } - s.addGroup(d, S, v), d += S, u += E - } - p("z", "y", "x", -1, -1, n, e, t, o, r, 0), p("z", "y", "x", 1, -1, n, e, -t, o, r, 1), p("x", "z", "y", 1, 1, t, n, e, i, o, 2), p("x", "z", "y", 1, -1, t, n, -e, i, o, 3), p("x", "y", "z", 1, -1, t, e, n, i, r, 4), p("x", "y", "z", -1, -1, t, e, -n, i, r, 5), this.setIndex(a), this.setAttribute("position", new he(l, 3)), this.setAttribute("normal", new he(c, 3)), this.setAttribute("uv", new he(h, 2)) - } - } - - function ke(t) { - const e = {}; - for (const n in t) { - e[n] = {}; - for (const i in t[n]) { - const r = t[n][i]; - r && (r.isColor || r.isMatrix3 || r.isMatrix4 || r.isVector2 || r.isVector3 || r.isVector4 || r.isTexture) ? e[n][i] = r.clone() : Array.isArray(r) ? e[n][i] = r.slice() : e[n][i] = r - } - } - return e - } - - function We(t) { - const e = {}; - for (let n = 0; n < t.length; n++) { - const i = ke(t[n]); - for (const t in i) e[t] = i[t] - } - return e - } - const je = { - clone: ke, - merge: We - }; - - function Xe(t) { - Jt.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.fog = !1, this.lights = !1, this.clipping = !1, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !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, this.uniformsNeedUpdate = !1, this.glslVersion = null, void 0 !== t && (void 0 !== t.attributes && console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."), this.setValues(t)) - } - - function qe() { - St.call(this), this.type = "Camera", this.matrixWorldInverse = new et, this.projectionMatrix = new et, this.projectionMatrixInverse = new et - } - - function Ye(t = 50, e = 1, n = .1, i = 2e3) { - qe.call(this), this.type = "PerspectiveCamera", this.fov = t, this.zoom = 1, this.near = n, this.far = i, this.focus = 10, this.aspect = e, this.view = null, this.filmGauge = 35, this.filmOffset = 0, this.updateProjectionMatrix() - } - Xe.prototype = Object.create(Jt.prototype), Xe.prototype.constructor = Xe, Xe.prototype.isShaderMaterial = !0, Xe.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.fragmentShader = t.fragmentShader, this.vertexShader = t.vertexShader, this.uniforms = ke(t.uniforms), this.defines = Object.assign({}, t.defines), this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.lights = t.lights, this.clipping = t.clipping, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this.extensions = Object.assign({}, t.extensions), this.glslVersion = t.glslVersion, this - }, Xe.prototype.toJSON = function(t) { - const e = Jt.prototype.toJSON.call(this, t); - e.glslVersion = this.glslVersion, e.uniforms = {}; - for (const n in this.uniforms) { - const i = this.uniforms[n].value; - i && i.isTexture ? e.uniforms[n] = { - type: "t", - value: i.toJSON(t).uuid - } : i && i.isColor ? e.uniforms[n] = { - type: "c", - value: i.getHex() - } : i && i.isVector2 ? e.uniforms[n] = { - type: "v2", - value: i.toArray() - } : i && i.isVector3 ? e.uniforms[n] = { - type: "v3", - value: i.toArray() - } : i && i.isVector4 ? e.uniforms[n] = { - type: "v4", - value: i.toArray() - } : i && i.isMatrix3 ? e.uniforms[n] = { - type: "m3", - value: i.toArray() - } : i && i.isMatrix4 ? e.uniforms[n] = { - type: "m4", - value: i.toArray() - } : e.uniforms[n] = { - value: i - } - } - Object.keys(this.defines).length > 0 && (e.defines = this.defines), e.vertexShader = this.vertexShader, e.fragmentShader = this.fragmentShader; - const n = {}; - for (const t in this.extensions) !0 === this.extensions[t] && (n[t] = !0); - return Object.keys(n).length > 0 && (e.extensions = n), e - }, qe.prototype = Object.assign(Object.create(St.prototype), { - constructor: qe, - isCamera: !0, - copy: function(t, e) { - return St.prototype.copy.call(this, t, e), this.matrixWorldInverse.copy(t.matrixWorldInverse), this.projectionMatrix.copy(t.projectionMatrix), this.projectionMatrixInverse.copy(t.projectionMatrixInverse), this - }, - getWorldDirection: function(t) { - void 0 === t && (console.warn("THREE.Camera: .getWorldDirection() target is now required"), t = new T), this.updateWorldMatrix(!0, !1); - const e = this.matrixWorld.elements; - return t.set(-e[8], -e[9], -e[10]).normalize() - }, - updateMatrixWorld: function(t) { - St.prototype.updateMatrixWorld.call(this, t), this.matrixWorldInverse.copy(this.matrixWorld).invert() - }, - updateWorldMatrix: function(t, e) { - St.prototype.updateWorldMatrix.call(this, t, e), this.matrixWorldInverse.copy(this.matrixWorld).invert() - }, - clone: function() { - return (new this.constructor).copy(this) - } - }), Ye.prototype = Object.assign(Object.create(qe.prototype), { - constructor: Ye, - isPerspectiveCamera: !0, - copy: function(t, e) { - return qe.prototype.copy.call(this, t, e), this.fov = t.fov, this.zoom = t.zoom, this.near = t.near, this.far = t.far, this.focus = t.focus, this.aspect = t.aspect, this.view = null === t.view ? null : Object.assign({}, t.view), this.filmGauge = t.filmGauge, this.filmOffset = t.filmOffset, this - }, - setFocalLength: function(t) { - const e = .5 * this.getFilmHeight() / t; - this.fov = 2 * g.RAD2DEG * Math.atan(e), this.updateProjectionMatrix() - }, - getFocalLength: function() { - const t = Math.tan(.5 * g.DEG2RAD * this.fov); - return .5 * this.getFilmHeight() / t - }, - getEffectiveFOV: function() { - return 2 * g.RAD2DEG * Math.atan(Math.tan(.5 * g.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(t, e, n, i, r, o) { - this.aspect = t / e, null === this.view && (this.view = { - enabled: !0, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1 - }), this.view.enabled = !0, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix() - }, - clearViewOffset: function() { - null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() - }, - updateProjectionMatrix: function() { - const t = this.near; - let e = t * Math.tan(.5 * g.DEG2RAD * this.fov) / this.zoom, - n = 2 * e, - i = this.aspect * n, - r = -.5 * i; - const o = this.view; - if (null !== this.view && this.view.enabled) { - const t = o.fullWidth, - s = o.fullHeight; - r += o.offsetX * i / t, e -= o.offsetY * n / s, i *= o.width / t, n *= o.height / s - } - const s = this.filmOffset; - 0 !== s && (r += t * s / this.getFilmWidth()), this.projectionMatrix.makePerspective(r, r + i, e, e - n, t, this.far), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() - }, - toJSON: function(t) { - const e = St.prototype.toJSON.call(this, t); - return e.object.fov = this.fov, e.object.zoom = this.zoom, e.object.near = this.near, e.object.far = this.far, e.object.focus = this.focus, e.object.aspect = this.aspect, null !== this.view && (e.object.view = Object.assign({}, this.view)), e.object.filmGauge = this.filmGauge, e.object.filmOffset = this.filmOffset, e - } - }); - - function Qe(t, e, n) { - if (St.call(this), this.type = "CubeCamera", !0 !== n.isWebGLCubeRenderTarget) return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter."); - this.renderTarget = n; - const i = new Ye(90, 1, t, e); - i.layers = this.layers, i.up.set(0, -1, 0), i.lookAt(new T(1, 0, 0)), this.add(i); - const r = new Ye(90, 1, t, e); - r.layers = this.layers, r.up.set(0, -1, 0), r.lookAt(new T(-1, 0, 0)), this.add(r); - const o = new Ye(90, 1, t, e); - o.layers = this.layers, o.up.set(0, 0, 1), o.lookAt(new T(0, 1, 0)), this.add(o); - const s = new Ye(90, 1, t, e); - s.layers = this.layers, s.up.set(0, 0, -1), s.lookAt(new T(0, -1, 0)), this.add(s); - const a = new Ye(90, 1, t, e); - a.layers = this.layers, a.up.set(0, -1, 0), a.lookAt(new T(0, 0, 1)), this.add(a); - const l = new Ye(90, 1, t, e); - l.layers = this.layers, l.up.set(0, -1, 0), l.lookAt(new T(0, 0, -1)), this.add(l), this.update = function(t, e) { - null === this.parent && this.updateMatrixWorld(); - const c = t.xr.enabled, - h = t.getRenderTarget(); - t.xr.enabled = !1; - const u = n.texture.generateMipmaps; - n.texture.generateMipmaps = !1, t.setRenderTarget(n, 0), t.render(e, i), t.setRenderTarget(n, 1), t.render(e, r), t.setRenderTarget(n, 2), t.render(e, o), t.setRenderTarget(n, 3), t.render(e, s), t.setRenderTarget(n, 4), t.render(e, a), n.texture.generateMipmaps = u, t.setRenderTarget(n, 5), t.render(e, l), t.setRenderTarget(h), t.xr.enabled = c - } - } - - function Ze(t, e, n, i, r, o, s, a, l, c) { - t = void 0 !== t ? t : [], e = void 0 !== e ? e : 301, s = void 0 !== s ? s : 1022, b.call(this, t, e, n, i, r, o, s, a, l, c), this.flipY = !1, this._needsFlipEnvMap = !0 - } - Qe.prototype = Object.create(St.prototype), Qe.prototype.constructor = Qe, Ze.prototype = Object.create(b.prototype), Ze.prototype.constructor = Ze, Ze.prototype.isCubeTexture = !0, Object.defineProperty(Ze.prototype, "images", { - get: function() { - return this.image - }, - set: function(t) { - this.image = t - } - }); - class Je extends E { - constructor(t, e, n) { - Number.isInteger(e) && (console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"), e = n), super(t, t, e), Object.defineProperty(this, "isWebGLCubeRenderTarget", { - value: !0 - }), e = e || {}, this.texture = new Ze(void 0, e.mapping, e.wrapS, e.wrapT, e.magFilter, e.minFilter, e.format, e.type, e.anisotropy, e.encoding), this.texture._needsFlipEnvMap = !1 - } - fromEquirectangularTexture(t, e) { - this.texture.type = e.type, this.texture.format = 1023, this.texture.encoding = e.encoding, this.texture.generateMipmaps = e.generateMipmaps, this.texture.minFilter = e.minFilter, this.texture.magFilter = e.magFilter; - const n = { - uniforms: { - tEquirect: { - value: null - } - }, - vertexShader: "\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t", - fragmentShader: "\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t" - }, - i = new Ve(5, 5, 5), - r = new Xe({ - name: "CubemapFromEquirect", - uniforms: ke(n.uniforms), - vertexShader: n.vertexShader, - fragmentShader: n.fragmentShader, - side: 1, - blending: 0 - }); - r.uniforms.tEquirect.value = e; - const o = new He(i, r), - s = e.minFilter; - 1008 === e.minFilter && (e.minFilter = 1006); - return new Qe(1, 10, this).update(t, o), e.minFilter = s, o.geometry.dispose(), o.material.dispose(), this - } - clear(t, e, n, i) { - const r = t.getRenderTarget(); - for (let r = 0; r < 6; r++) t.setRenderTarget(this, r), t.clear(e, n, i); - t.setRenderTarget(r) - } - } - - function Ke(t, e, n, i, r, o, s, a, l, c, h, u) { - b.call(this, null, o, s, a, l, c, i, r, h, u), this.image = { - data: t || null, - width: e || 1, - height: n || 1 - }, this.magFilter = void 0 !== l ? l : 1003, this.minFilter = void 0 !== c ? c : 1003, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1, this.needsUpdate = !0 - } - Ke.prototype = Object.create(b.prototype), Ke.prototype.constructor = Ke, Ke.prototype.isDataTexture = !0; - const $e = new X, - tn = new T; - class en { - constructor(t, e, n, i, r, o) { - this.planes = [void 0 !== t ? t : new Ct, void 0 !== e ? e : new Ct, void 0 !== n ? n : new Ct, void 0 !== i ? i : new Ct, void 0 !== r ? r : new Ct, void 0 !== o ? o : new Ct] - } - set(t, e, n, i, r, o) { - const s = this.planes; - return s[0].copy(t), s[1].copy(e), s[2].copy(n), s[3].copy(i), s[4].copy(r), s[5].copy(o), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - const e = this.planes; - for (let n = 0; n < 6; n++) e[n].copy(t.planes[n]); - return this - } - setFromProjectionMatrix(t) { - const e = this.planes, - n = t.elements, - i = n[0], - r = n[1], - o = n[2], - s = n[3], - a = n[4], - l = n[5], - c = n[6], - h = n[7], - u = n[8], - d = n[9], - p = n[10], - f = n[11], - m = n[12], - g = n[13], - v = n[14], - y = n[15]; - return e[0].setComponents(s - i, h - a, f - u, y - m).normalize(), e[1].setComponents(s + i, h + a, f + u, y + m).normalize(), e[2].setComponents(s + r, h + l, f + d, y + g).normalize(), e[3].setComponents(s - r, h - l, f - d, y - g).normalize(), e[4].setComponents(s - o, h - c, f - p, y - v).normalize(), e[5].setComponents(s + o, h + c, f + p, y + v).normalize(), this - } - intersectsObject(t) { - const e = t.geometry; - return null === e.boundingSphere && e.computeBoundingSphere(), $e.copy(e.boundingSphere).applyMatrix4(t.matrixWorld), this.intersectsSphere($e) - } - intersectsSprite(t) { - return $e.center.set(0, 0, 0), $e.radius = .7071067811865476, $e.applyMatrix4(t.matrixWorld), this.intersectsSphere($e) - } - intersectsSphere(t) { - const e = this.planes, - n = t.center, - i = -t.radius; - for (let t = 0; t < 6; t++) { - if (e[t].distanceToPoint(n) < i) return !1 - } - return !0 - } - intersectsBox(t) { - const e = this.planes; - for (let n = 0; n < 6; n++) { - const i = e[n]; - if (tn.x = i.normal.x > 0 ? t.max.x : t.min.x, tn.y = i.normal.y > 0 ? t.max.y : t.min.y, tn.z = i.normal.z > 0 ? t.max.z : t.min.z, i.distanceToPoint(tn) < 0) return !1 - } - return !0 - } - containsPoint(t) { - const e = this.planes; - for (let n = 0; n < 6; n++) - if (e[n].distanceToPoint(t) < 0) return !1; - return !0 - } - } - - function nn() { - let t = null, - e = !1, - n = null, - i = null; - - function r(e, o) { - n(e, o), i = t.requestAnimationFrame(r) - } - return { - start: function() { - !0 !== e && null !== n && (i = t.requestAnimationFrame(r), e = !0) - }, - stop: function() { - t.cancelAnimationFrame(i), e = !1 - }, - setAnimationLoop: function(t) { - n = t - }, - setContext: function(e) { - t = e - } - } - } - - function rn(t, e) { - const n = e.isWebGL2, - i = new WeakMap; - return { - get: function(t) { - return t.isInterleavedBufferAttribute && (t = t.data), i.get(t) - }, - remove: function(e) { - e.isInterleavedBufferAttribute && (e = e.data); - const n = i.get(e); - n && (t.deleteBuffer(n.buffer), i.delete(e)) - }, - update: function(e, r) { - if (e.isGLBufferAttribute) { - const t = i.get(e); - return void((!t || t.version < e.version) && i.set(e, { - buffer: e.buffer, - type: e.type, - bytesPerElement: e.elementSize, - version: e.version - })) - } - e.isInterleavedBufferAttribute && (e = e.data); - const o = i.get(e); - void 0 === o ? i.set(e, function(e, i) { - const r = e.array, - o = e.usage, - s = t.createBuffer(); - t.bindBuffer(i, s), t.bufferData(i, r, o), e.onUploadCallback(); - let a = 5126; - return r instanceof Float32Array ? a = 5126 : r instanceof Float64Array ? console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.") : r instanceof Uint16Array ? e.isFloat16BufferAttribute ? n ? a = 5131 : console.warn("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.") : a = 5123 : r instanceof Int16Array ? a = 5122 : r instanceof Uint32Array ? a = 5125 : r instanceof Int32Array ? a = 5124 : r instanceof Int8Array ? a = 5120 : r instanceof Uint8Array && (a = 5121), { - buffer: s, - type: a, - bytesPerElement: r.BYTES_PER_ELEMENT, - version: e.version - } - }(e, r)) : o.version < e.version && (! function(e, i, r) { - const o = i.array, - s = i.updateRange; - t.bindBuffer(r, e), -1 === s.count ? t.bufferSubData(r, 0, o) : (n ? t.bufferSubData(r, s.offset * o.BYTES_PER_ELEMENT, o, s.offset, s.count) : t.bufferSubData(r, s.offset * o.BYTES_PER_ELEMENT, o.subarray(s.offset, s.offset + s.count)), s.count = -1) - }(o.buffer, e, r), o.version = e.version) - } - } - } - class on extends be { - constructor(t = 1, e = 1, n = 1, i = 1) { - super(), this.type = "PlaneGeometry", this.parameters = { - width: t, - height: e, - widthSegments: n, - heightSegments: i - }; - const r = t / 2, - o = e / 2, - s = Math.floor(n), - a = Math.floor(i), - l = s + 1, - c = a + 1, - h = t / s, - u = e / a, - d = [], - p = [], - f = [], - m = []; - for (let t = 0; t < c; t++) { - const e = t * u - o; - for (let n = 0; n < l; n++) { - const i = n * h - r; - p.push(i, -e, 0), f.push(0, 0, 1), m.push(n / s), m.push(1 - t / a) - } - } - for (let t = 0; t < a; t++) - for (let e = 0; e < s; e++) { - const n = e + l * t, - i = e + l * (t + 1), - r = e + 1 + l * (t + 1), - o = e + 1 + l * t; - d.push(n, i, o), d.push(i, r, o) - } - this.setIndex(d), this.setAttribute("position", new he(p, 3)), this.setAttribute("normal", new he(f, 3)), this.setAttribute("uv", new he(m, 2)) - } - } - const sn = { - alphamap_fragment: "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif", - alphamap_pars_fragment: "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", - alphatest_fragment: "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif", - aomap_fragment: "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", - aomap_pars_fragment: "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", - begin_vertex: "vec3 transformed = vec3( position );", - beginnormal_vertex: "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif", - bsdfs: "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", - bumpmap_pars_fragment: "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", - clipping_planes_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", - clipping_planes_pars_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif", - clipping_planes_pars_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif", - clipping_planes_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif", - color_fragment: "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif", - color_pars_fragment: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", - color_pars_vertex: "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif", - color_vertex: "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif", - common: "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}", - cube_uv_reflection_fragment: "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif", - defaultnormal_vertex: "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", - displacementmap_pars_vertex: "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif", - displacementmap_vertex: "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif", - emissivemap_fragment: "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", - emissivemap_pars_fragment: "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif", - encodings_fragment: "gl_FragColor = linearToOutputTexel( gl_FragColor );", - encodings_pars_fragment: "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", - envmap_fragment: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", - envmap_common_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif", - envmap_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", - envmap_pars_vertex: "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif", - envmap_physical_pars_fragment: "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", - envmap_vertex: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", - fog_vertex: "#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif", - fog_pars_vertex: "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif", - fog_fragment: "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif", - fog_pars_fragment: "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", - gradientmap_pars_fragment: "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}", - lightmap_fragment: "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", - lightmap_pars_fragment: "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif", - lights_lambert_vertex: "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", - lights_pars_begin: "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", - lights_toon_fragment: "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;", - lights_toon_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", - lights_phong_fragment: "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", - lights_phong_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", - lights_physical_fragment: "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", - lights_physical_pars_fragment: "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", - lights_fragment_begin: "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", - lights_fragment_maps: "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", - lights_fragment_end: "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif", - logdepthbuf_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif", - logdepthbuf_pars_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", - logdepthbuf_pars_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif", - logdepthbuf_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", - map_fragment: "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif", - map_pars_fragment: "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif", - map_particle_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", - map_particle_pars_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", - metalnessmap_fragment: "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif", - metalnessmap_pars_fragment: "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", - morphnormal_vertex: "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif", - morphtarget_pars_vertex: "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", - morphtarget_vertex: "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", - normal_fragment_begin: "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", - normal_fragment_maps: "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", - normalmap_pars_fragment: "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", - clearcoat_normal_fragment_begin: "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif", - clearcoat_normal_fragment_maps: "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif", - clearcoat_pars_fragment: "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", - packing: "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", - premultiplied_alpha_fragment: "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif", - project_vertex: "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;", - dithering_fragment: "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif", - dithering_pars_fragment: "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", - roughnessmap_fragment: "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif", - roughnessmap_pars_fragment: "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif", - shadowmap_pars_fragment: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", - shadowmap_pars_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", - shadowmap_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", - shadowmask_pars_fragment: "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", - skinbase_vertex: "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif", - skinning_pars_vertex: "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", - skinning_vertex: "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif", - skinnormal_vertex: "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", - specularmap_fragment: "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif", - specularmap_pars_fragment: "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif", - tonemapping_fragment: "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif", - tonemapping_pars_fragment: "#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }", - transmissionmap_fragment: "#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif", - transmissionmap_pars_fragment: "#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif", - uv_pars_fragment: "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif", - uv_pars_vertex: "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif", - uv_vertex: "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif", - uv2_pars_fragment: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif", - uv2_pars_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif", - uv2_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif", - worldpos_vertex: "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif", - background_frag: "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", - background_vert: "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}", - cube_frag: "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", - cube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", - depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", - depth_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", - distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", - distanceRGBA_vert: "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", - equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", - equirect_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", - linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", - linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshbasic_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshlambert_frag: "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshlambert_vert: "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshmatcap_frag: "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", - meshtoon_frag: "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshtoon_vert: "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", - meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshphysical_vert: "#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", - normal_frag: "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", - normal_vert: "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", - points_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", - points_vert: "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", - shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}", - shadow_vert: "#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", - sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}" - }, - an = { - common: { - diffuse: { - value: new Yt(15658734) - }, - opacity: { - value: 1 - }, - map: { - value: null - }, - uvTransform: { - value: new y - }, - uv2Transform: { - value: new y - }, - alphaMap: { - value: null - } - }, - specularmap: { - specularMap: { - value: null - } - }, - envmap: { - envMap: { - value: null - }, - flipEnvMap: { - value: -1 - }, - reflectivity: { - value: 1 - }, - refractionRatio: { - value: .98 - }, - maxMipLevel: { - value: 0 - } - }, - aomap: { - aoMap: { - value: null - }, - aoMapIntensity: { - value: 1 - } - }, - lightmap: { - lightMap: { - value: null - }, - lightMapIntensity: { - value: 1 - } - }, - emissivemap: { - emissiveMap: { - value: null - } - }, - bumpmap: { - bumpMap: { - value: null - }, - bumpScale: { - value: 1 - } - }, - normalmap: { - normalMap: { - value: null - }, - normalScale: { - value: new v(1, 1) - } - }, - displacementmap: { - displacementMap: { - value: null - }, - displacementScale: { - value: 1 - }, - displacementBias: { - value: 0 - } - }, - roughnessmap: { - roughnessMap: { - value: null - } - }, - metalnessmap: { - metalnessMap: { - value: null - } - }, - gradientmap: { - gradientMap: { - value: null - } - }, - fog: { - fogDensity: { - value: 25e-5 - }, - fogNear: { - value: 1 - }, - fogFar: { - value: 2e3 - }, - fogColor: { - value: new Yt(16777215) - } - }, - lights: { - ambientLightColor: { - value: [] - }, - lightProbe: { - value: [] - }, - directionalLights: { - value: [], - properties: { - direction: {}, - color: {} - } - }, - directionalLightShadows: { - value: [], - properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } - }, - directionalShadowMap: { - value: [] - }, - directionalShadowMatrix: { - value: [] - }, - spotLights: { - value: [], - properties: { - color: {}, - position: {}, - direction: {}, - distance: {}, - coneCos: {}, - penumbraCos: {}, - decay: {} - } - }, - spotLightShadows: { - value: [], - properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } - }, - spotShadowMap: { - value: [] - }, - spotShadowMatrix: { - value: [] - }, - pointLights: { - value: [], - properties: { - color: {}, - position: {}, - decay: {}, - distance: {} - } - }, - pointLightShadows: { - value: [], - properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {}, - shadowCameraNear: {}, - shadowCameraFar: {} - } - }, - pointShadowMap: { - value: [] - }, - pointShadowMatrix: { - value: [] - }, - hemisphereLights: { - value: [], - properties: { - direction: {}, - skyColor: {}, - groundColor: {} - } - }, - rectAreaLights: { - value: [], - properties: { - color: {}, - position: {}, - width: {}, - height: {} - } - }, - ltc_1: { - value: null - }, - ltc_2: { - value: null - } - }, - points: { - diffuse: { - value: new Yt(15658734) - }, - opacity: { - value: 1 - }, - size: { - value: 1 - }, - scale: { - value: 1 - }, - map: { - value: null - }, - alphaMap: { - value: null - }, - uvTransform: { - value: new y - } - }, - sprite: { - diffuse: { - value: new Yt(15658734) - }, - opacity: { - value: 1 - }, - center: { - value: new v(.5, .5) - }, - rotation: { - value: 0 - }, - map: { - value: null - }, - alphaMap: { - value: null - }, - uvTransform: { - value: new y - } - } - }, - ln = { - basic: { - uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.fog]), - vertexShader: sn.meshbasic_vert, - fragmentShader: sn.meshbasic_frag - }, - lambert: { - uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.fog, an.lights, { - emissive: { - value: new Yt(0) - } - }]), - vertexShader: sn.meshlambert_vert, - fragmentShader: sn.meshlambert_frag - }, - phong: { - uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.fog, an.lights, { - emissive: { - value: new Yt(0) - }, - specular: { - value: new Yt(1118481) - }, - shininess: { - value: 30 - } - }]), - vertexShader: sn.meshphong_vert, - fragmentShader: sn.meshphong_frag - }, - standard: { - uniforms: We([an.common, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.roughnessmap, an.metalnessmap, an.fog, an.lights, { - emissive: { - value: new Yt(0) - }, - roughness: { - value: 1 - }, - metalness: { - value: 0 - }, - envMapIntensity: { - value: 1 - } - }]), - vertexShader: sn.meshphysical_vert, - fragmentShader: sn.meshphysical_frag - }, - toon: { - uniforms: We([an.common, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.gradientmap, an.fog, an.lights, { - emissive: { - value: new Yt(0) - } - }]), - vertexShader: sn.meshtoon_vert, - fragmentShader: sn.meshtoon_frag - }, - matcap: { - uniforms: We([an.common, an.bumpmap, an.normalmap, an.displacementmap, an.fog, { - matcap: { - value: null - } - }]), - vertexShader: sn.meshmatcap_vert, - fragmentShader: sn.meshmatcap_frag - }, - points: { - uniforms: We([an.points, an.fog]), - vertexShader: sn.points_vert, - fragmentShader: sn.points_frag - }, - dashed: { - uniforms: We([an.common, an.fog, { - scale: { - value: 1 - }, - dashSize: { - value: 1 - }, - totalSize: { - value: 2 - } - }]), - vertexShader: sn.linedashed_vert, - fragmentShader: sn.linedashed_frag - }, - depth: { - uniforms: We([an.common, an.displacementmap]), - vertexShader: sn.depth_vert, - fragmentShader: sn.depth_frag - }, - normal: { - uniforms: We([an.common, an.bumpmap, an.normalmap, an.displacementmap, { - opacity: { - value: 1 - } - }]), - vertexShader: sn.normal_vert, - fragmentShader: sn.normal_frag - }, - sprite: { - uniforms: We([an.sprite, an.fog]), - vertexShader: sn.sprite_vert, - fragmentShader: sn.sprite_frag - }, - background: { - uniforms: { - uvTransform: { - value: new y - }, - t2D: { - value: null - } - }, - vertexShader: sn.background_vert, - fragmentShader: sn.background_frag - }, - cube: { - uniforms: We([an.envmap, { - opacity: { - value: 1 - } - }]), - vertexShader: sn.cube_vert, - fragmentShader: sn.cube_frag - }, - equirect: { - uniforms: { - tEquirect: { - value: null - } - }, - vertexShader: sn.equirect_vert, - fragmentShader: sn.equirect_frag - }, - distanceRGBA: { - uniforms: We([an.common, an.displacementmap, { - referencePosition: { - value: new T - }, - nearDistance: { - value: 1 - }, - farDistance: { - value: 1e3 - } - }]), - vertexShader: sn.distanceRGBA_vert, - fragmentShader: sn.distanceRGBA_frag - }, - shadow: { - uniforms: We([an.lights, an.fog, { - color: { - value: new Yt(0) - }, - opacity: { - value: 1 - } - }]), - vertexShader: sn.shadow_vert, - fragmentShader: sn.shadow_frag - } - }; - - function cn(t, e, n, i, r) { - const o = new Yt(0); - let s, a, l = 0, - c = null, - h = 0, - u = null; - - function d(t, e) { - n.buffers.color.setClear(t.r, t.g, t.b, e, r) - } - return { - getClearColor: function() { - return o - }, - setClearColor: function(t, e = 1) { - o.set(t), l = e, d(o, l) - }, - getClearAlpha: function() { - return l - }, - setClearAlpha: function(t) { - l = t, d(o, l) - }, - render: function(n, r, p, f) { - let m = !0 === r.isScene ? r.background : null; - m && m.isTexture && (m = e.get(m)); - const g = t.xr, - v = g.getSession && g.getSession(); - v && "additive" === v.environmentBlendMode && (m = null), null === m ? d(o, l) : m && m.isColor && (d(m, 1), f = !0), (t.autoClear || f) && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), m && (m.isCubeTexture || m.isWebGLCubeRenderTarget || 306 === m.mapping) ? (void 0 === a && (a = new He(new Ve(1, 1, 1), new Xe({ - name: "BackgroundCubeMaterial", - uniforms: ke(ln.cube.uniforms), - vertexShader: ln.cube.vertexShader, - fragmentShader: ln.cube.fragmentShader, - side: 1, - depthTest: !1, - depthWrite: !1, - fog: !1 - })), a.geometry.deleteAttribute("normal"), a.geometry.deleteAttribute("uv"), a.onBeforeRender = function(t, e, n) { - this.matrixWorld.copyPosition(n.matrixWorld) - }, Object.defineProperty(a.material, "envMap", { - get: function() { - return this.uniforms.envMap.value - } - }), i.update(a)), m.isWebGLCubeRenderTarget && (m = m.texture), a.material.uniforms.envMap.value = m, a.material.uniforms.flipEnvMap.value = m.isCubeTexture && m._needsFlipEnvMap ? -1 : 1, c === m && h === m.version && u === t.toneMapping || (a.material.needsUpdate = !0, c = m, h = m.version, u = t.toneMapping), n.unshift(a, a.geometry, a.material, 0, 0, null)) : m && m.isTexture && (void 0 === s && (s = new He(new on(2, 2), new Xe({ - name: "BackgroundMaterial", - uniforms: ke(ln.background.uniforms), - vertexShader: ln.background.vertexShader, - fragmentShader: ln.background.fragmentShader, - side: 0, - depthTest: !1, - depthWrite: !1, - fog: !1 - })), s.geometry.deleteAttribute("normal"), Object.defineProperty(s.material, "map", { - get: function() { - return this.uniforms.t2D.value - } - }), i.update(s)), s.material.uniforms.t2D.value = m, !0 === m.matrixAutoUpdate && m.updateMatrix(), s.material.uniforms.uvTransform.value.copy(m.matrix), c === m && h === m.version && u === t.toneMapping || (s.material.needsUpdate = !0, c = m, h = m.version, u = t.toneMapping), n.unshift(s, s.geometry, s.material, 0, 0, null)) - } - } - } - - function hn(t, e, n, i) { - const r = t.getParameter(34921), - o = i.isWebGL2 ? null : e.get("OES_vertex_array_object"), - s = i.isWebGL2 || null !== o, - a = {}, - l = d(null); - let c = l; - - function h(e) { - return i.isWebGL2 ? t.bindVertexArray(e) : o.bindVertexArrayOES(e) - } - - function u(e) { - return i.isWebGL2 ? t.deleteVertexArray(e) : o.deleteVertexArrayOES(e) - } - - function d(t) { - const e = [], - n = [], - i = []; - for (let t = 0; t < r; t++) e[t] = 0, n[t] = 0, i[t] = 0; - return { - geometry: null, - program: null, - wireframe: !1, - newAttributes: e, - enabledAttributes: n, - attributeDivisors: i, - object: t, - attributes: {}, - index: null - } - } - - function p() { - const t = c.newAttributes; - for (let e = 0, n = t.length; e < n; e++) t[e] = 0 - } - - function f(t) { - m(t, 0) - } - - function m(n, r) { - const o = c.newAttributes, - s = c.enabledAttributes, - a = c.attributeDivisors; - if (o[n] = 1, 0 === s[n] && (t.enableVertexAttribArray(n), s[n] = 1), a[n] !== r) { - (i.isWebGL2 ? t : e.get("ANGLE_instanced_arrays"))[i.isWebGL2 ? "vertexAttribDivisor" : "vertexAttribDivisorANGLE"](n, r), a[n] = r - } - } - - function g() { - const e = c.newAttributes, - n = c.enabledAttributes; - for (let i = 0, r = n.length; i < r; i++) n[i] !== e[i] && (t.disableVertexAttribArray(i), n[i] = 0) - } - - function v(e, n, r, o, s, a) { - !0 !== i.isWebGL2 || 5124 !== r && 5125 !== r ? t.vertexAttribPointer(e, n, r, o, s, a) : t.vertexAttribIPointer(e, n, r, s, a) - } - - function y() { - A(), c !== l && (c = l, h(c.object)) - } - - function A() { - l.geometry = null, l.program = null, l.wireframe = !1 - } - return { - setup: function(r, l, u, y, A) { - let x = !1; - if (s) { - const e = function(e, n, r) { - const s = !0 === r.wireframe; - let l = a[e.id]; - void 0 === l && (l = {}, a[e.id] = l); - let c = l[n.id]; - void 0 === c && (c = {}, l[n.id] = c); - let h = c[s]; - void 0 === h && (h = d(i.isWebGL2 ? t.createVertexArray() : o.createVertexArrayOES()), c[s] = h); - return h - }(y, u, l); - c !== e && (c = e, h(c.object)), x = function(t, e) { - const n = c.attributes, - i = t.attributes; - let r = 0; - for (const t in i) { - const e = n[t], - o = i[t]; - if (void 0 === e) return !0; - if (e.attribute !== o) return !0; - if (e.data !== o.data) return !0; - r++ - } - return c.attributesNum !== r || c.index !== e - }(y, A), x && function(t, e) { - const n = {}, - i = t.attributes; - let r = 0; - for (const t in i) { - const e = i[t], - o = {}; - o.attribute = e, e.data && (o.data = e.data), n[t] = o, r++ - } - c.attributes = n, c.attributesNum = r, c.index = e - }(y, A) - } else { - const t = !0 === l.wireframe; - c.geometry === y.id && c.program === u.id && c.wireframe === t || (c.geometry = y.id, c.program = u.id, c.wireframe = t, x = !0) - }!0 === r.isInstancedMesh && (x = !0), null !== A && n.update(A, 34963), x && (! function(r, o, s, a) { - if (!1 === i.isWebGL2 && (r.isInstancedMesh || a.isInstancedBufferGeometry) && null === e.get("ANGLE_instanced_arrays")) return; - p(); - const l = a.attributes, - c = s.getAttributes(), - h = o.defaultAttributeValues; - for (const e in c) { - const i = c[e]; - if (i >= 0) { - const o = l[e]; - if (void 0 !== o) { - const e = o.normalized, - r = o.itemSize, - s = n.get(o); - if (void 0 === s) continue; - const l = s.buffer, - c = s.type, - h = s.bytesPerElement; - if (o.isInterleavedBufferAttribute) { - const n = o.data, - s = n.stride, - u = o.offset; - n && n.isInstancedInterleavedBuffer ? (m(i, n.meshPerAttribute), void 0 === a._maxInstanceCount && (a._maxInstanceCount = n.meshPerAttribute * n.count)) : f(i), t.bindBuffer(34962, l), v(i, r, c, e, s * h, u * h) - } else o.isInstancedBufferAttribute ? (m(i, o.meshPerAttribute), void 0 === a._maxInstanceCount && (a._maxInstanceCount = o.meshPerAttribute * o.count)) : f(i), t.bindBuffer(34962, l), v(i, r, c, e, 0, 0) - } else if ("instanceMatrix" === e) { - const e = n.get(r.instanceMatrix); - if (void 0 === e) continue; - const o = e.buffer, - s = e.type; - m(i + 0, 1), m(i + 1, 1), m(i + 2, 1), m(i + 3, 1), t.bindBuffer(34962, o), t.vertexAttribPointer(i + 0, 4, s, !1, 64, 0), t.vertexAttribPointer(i + 1, 4, s, !1, 64, 16), t.vertexAttribPointer(i + 2, 4, s, !1, 64, 32), t.vertexAttribPointer(i + 3, 4, s, !1, 64, 48) - } else if ("instanceColor" === e) { - const e = n.get(r.instanceColor); - if (void 0 === e) continue; - const o = e.buffer, - s = e.type; - m(i, 1), t.bindBuffer(34962, o), t.vertexAttribPointer(i, 3, s, !1, 12, 0) - } else if (void 0 !== h) { - const n = h[e]; - if (void 0 !== n) switch (n.length) { - case 2: - t.vertexAttrib2fv(i, n); - break; - case 3: - t.vertexAttrib3fv(i, n); - break; - case 4: - t.vertexAttrib4fv(i, n); - break; - default: - t.vertexAttrib1fv(i, n) - } - } - } - } - g() - }(r, l, u, y), null !== A && t.bindBuffer(34963, n.get(A).buffer)) - }, - reset: y, - resetDefaultState: A, - dispose: function() { - y(); - for (const t in a) { - const e = a[t]; - for (const t in e) { - const n = e[t]; - for (const t in n) u(n[t].object), delete n[t]; - delete e[t] - } - delete a[t] - } - }, - releaseStatesOfGeometry: function(t) { - if (void 0 === a[t.id]) return; - const e = a[t.id]; - for (const t in e) { - const n = e[t]; - for (const t in n) u(n[t].object), delete n[t]; - delete e[t] - } - delete a[t.id] - }, - releaseStatesOfProgram: function(t) { - for (const e in a) { - const n = a[e]; - if (void 0 === n[t.id]) continue; - const i = n[t.id]; - for (const t in i) u(i[t].object), delete i[t]; - delete n[t.id] - } - }, - initAttributes: p, - enableAttribute: f, - disableUnusedAttributes: g - } - } - - function un(t, e, n, i) { - const r = i.isWebGL2; - let o; - this.setMode = function(t) { - o = t - }, this.render = function(e, i) { - t.drawArrays(o, e, i), n.update(i, o, 1) - }, this.renderInstances = function(i, s, a) { - if (0 === a) return; - let l, c; - if (r) l = t, c = "drawArraysInstanced"; - else if (l = e.get("ANGLE_instanced_arrays"), c = "drawArraysInstancedANGLE", null === l) return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); - l[c](o, i, s, a), n.update(s, o, a) - } - } - - function dn(t, e, n) { - let i; - - function r(e) { - if ("highp" === e) { - if (t.getShaderPrecisionFormat(35633, 36338).precision > 0 && t.getShaderPrecisionFormat(35632, 36338).precision > 0) return "highp"; - e = "mediump" - } - return "mediump" === e && t.getShaderPrecisionFormat(35633, 36337).precision > 0 && t.getShaderPrecisionFormat(35632, 36337).precision > 0 ? "mediump" : "lowp" - } - const o = "undefined" != typeof WebGL2RenderingContext && t instanceof WebGL2RenderingContext || "undefined" != typeof WebGL2ComputeRenderingContext && t instanceof WebGL2ComputeRenderingContext; - let s = void 0 !== n.precision ? n.precision : "highp"; - const a = r(s); - a !== s && (console.warn("THREE.WebGLRenderer:", s, "not supported, using", a, "instead."), s = a); - const l = !0 === n.logarithmicDepthBuffer, - c = t.getParameter(34930), - h = t.getParameter(35660), - u = t.getParameter(3379), - d = t.getParameter(34076), - p = t.getParameter(34921), - f = t.getParameter(36347), - m = t.getParameter(36348), - g = t.getParameter(36349), - v = h > 0, - y = o || !!e.get("OES_texture_float"); - return { - isWebGL2: o, - getMaxAnisotropy: function() { - if (void 0 !== i) return i; - const n = e.get("EXT_texture_filter_anisotropic"); - return i = null !== n ? t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0, i - }, - getMaxPrecision: r, - precision: s, - logarithmicDepthBuffer: l, - maxTextures: c, - maxVertexTextures: h, - maxTextureSize: u, - maxCubemapSize: d, - maxAttributes: p, - maxVertexUniforms: f, - maxVaryings: m, - maxFragmentUniforms: g, - vertexTextures: v, - floatFragmentTextures: y, - floatVertexTextures: v && y, - maxSamples: o ? t.getParameter(36183) : 0 - } - } - - function pn(t) { - const e = this; - let n = null, - i = 0, - r = !1, - o = !1; - const s = new Ct, - a = new y, - l = { - value: null, - needsUpdate: !1 - }; - - function c() { - l.value !== n && (l.value = n, l.needsUpdate = i > 0), e.numPlanes = i, e.numIntersection = 0 - } - - function h(t, n, i, r) { - const o = null !== t ? t.length : 0; - let c = null; - if (0 !== o) { - if (c = l.value, !0 !== r || null === c) { - const e = i + 4 * o, - r = n.matrixWorldInverse; - a.getNormalMatrix(r), (null === c || c.length < e) && (c = new Float32Array(e)); - for (let e = 0, n = i; e !== o; ++e, n += 4) s.copy(t[e]).applyMatrix4(r, a), s.normal.toArray(c, n), c[n + 3] = s.constant - } - l.value = c, l.needsUpdate = !0 - } - return e.numPlanes = o, e.numIntersection = 0, c - } - this.uniform = l, this.numPlanes = 0, this.numIntersection = 0, this.init = function(t, e, o) { - const s = 0 !== t.length || e || 0 !== i || r; - return r = e, n = h(t, o, 0), i = t.length, s - }, this.beginShadows = function() { - o = !0, h(null) - }, this.endShadows = function() { - o = !1, c() - }, this.setState = function(e, s, a) { - const u = e.clippingPlanes, - d = e.clipIntersection, - p = e.clipShadows, - f = t.get(e); - if (!r || null === u || 0 === u.length || o && !p) o ? h(null) : c(); - else { - const t = o ? 0 : i, - e = 4 * t; - let r = f.clippingState || null; - l.value = r, r = h(u, s, e, a); - for (let t = 0; t !== e; ++t) r[t] = n[t]; - f.clippingState = r, this.numIntersection = d ? this.numPlanes : 0, this.numPlanes += t - } - } - } - - function fn(t) { - let e = new WeakMap; - - function n(t, e) { - return 303 === e ? t.mapping = 301 : 304 === e && (t.mapping = 302), t - } - - function i(t) { - const n = t.target; - n.removeEventListener("dispose", i); - const r = e.get(n); - void 0 !== r && (e.delete(n), r.dispose()) - } - return { - get: function(r) { - if (r && r.isTexture) { - const o = r.mapping; - if (303 === o || 304 === o) { - if (e.has(r)) { - return n(e.get(r).texture, r.mapping) - } { - const o = r.image; - if (o && o.height > 0) { - const s = t.getRenderList(), - a = t.getRenderTarget(), - l = new Je(o.height / 2); - return l.fromEquirectangularTexture(t, r), e.set(r, l), t.setRenderTarget(a), t.setRenderList(s), r.addEventListener("dispose", i), n(l.texture, r.mapping) - } - return null - } - } - } - return r - }, - dispose: function() { - e = new WeakMap - } - } - } - - function mn(t) { - const e = {}; - - function n(n) { - if (void 0 !== e[n]) return e[n]; - let i; - switch (n) { - case "WEBGL_depth_texture": - i = t.getExtension("WEBGL_depth_texture") || t.getExtension("MOZ_WEBGL_depth_texture") || t.getExtension("WEBKIT_WEBGL_depth_texture"); - break; - case "EXT_texture_filter_anisotropic": - i = t.getExtension("EXT_texture_filter_anisotropic") || t.getExtension("MOZ_EXT_texture_filter_anisotropic") || t.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); - break; - case "WEBGL_compressed_texture_s3tc": - i = t.getExtension("WEBGL_compressed_texture_s3tc") || t.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); - break; - case "WEBGL_compressed_texture_pvrtc": - i = t.getExtension("WEBGL_compressed_texture_pvrtc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); - break; - default: - i = t.getExtension(n) - } - return e[n] = i, i - } - return { - has: function(t) { - return null !== n(t) - }, - init: function(t) { - t.isWebGL2 ? n("EXT_color_buffer_float") : (n("WEBGL_depth_texture"), n("OES_texture_float"), n("OES_texture_half_float"), n("OES_texture_half_float_linear"), n("OES_standard_derivatives"), n("OES_element_index_uint"), n("OES_vertex_array_object"), n("ANGLE_instanced_arrays")), n("OES_texture_float_linear"), n("EXT_color_buffer_half_float") - }, - get: function(t) { - const e = n(t); - return null === e && console.warn("THREE.WebGLRenderer: " + t + " extension not supported."), e - } - } - } - - function gn(t, e, n, i) { - const r = {}, - o = new WeakMap; - - function s(t) { - const a = t.target; - null !== a.index && e.remove(a.index); - for (const t in a.attributes) e.remove(a.attributes[t]); - a.removeEventListener("dispose", s), delete r[a.id]; - const l = o.get(a); - l && (e.remove(l), o.delete(a)), i.releaseStatesOfGeometry(a), !0 === a.isInstancedBufferGeometry && delete a._maxInstanceCount, n.memory.geometries-- - } - - function a(t) { - const n = [], - i = t.index, - r = t.attributes.position; - let s = 0; - if (null !== i) { - const t = i.array; - s = i.version; - for (let e = 0, i = t.length; e < i; e += 3) { - const i = t[e + 0], - r = t[e + 1], - o = t[e + 2]; - n.push(i, r, r, o, o, i) - } - } else { - const t = r.array; - s = r.version; - for (let e = 0, i = t.length / 3 - 1; e < i; e += 3) { - const t = e + 0, - i = e + 1, - r = e + 2; - n.push(t, i, i, r, r, t) - } - } - const a = new(de(n) > 65535 ? le : se)(n, 1); - a.version = s; - const l = o.get(t); - l && e.remove(l), o.set(t, a) - } - return { - get: function(t, e) { - return !0 === r[e.id] || (e.addEventListener("dispose", s), r[e.id] = !0, n.memory.geometries++), e - }, - update: function(t) { - const n = t.attributes; - for (const t in n) e.update(n[t], 34962); - const i = t.morphAttributes; - for (const t in i) { - const n = i[t]; - for (let t = 0, i = n.length; t < i; t++) e.update(n[t], 34962) - } - }, - getWireframeAttribute: function(t) { - const e = o.get(t); - if (e) { - const n = t.index; - null !== n && e.version < n.version && a(t) - } else a(t); - return o.get(t) - } - } - } - - function vn(t, e, n, i) { - const r = i.isWebGL2; - let o, s, a; - this.setMode = function(t) { - o = t - }, this.setIndex = function(t) { - s = t.type, a = t.bytesPerElement - }, this.render = function(e, i) { - t.drawElements(o, i, s, e * a), n.update(i, o, 1) - }, this.renderInstances = function(i, l, c) { - if (0 === c) return; - let h, u; - if (r) h = t, u = "drawElementsInstanced"; - else if (h = e.get("ANGLE_instanced_arrays"), u = "drawElementsInstancedANGLE", null === h) return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); - h[u](o, l, s, i * a, c), n.update(l, o, c) - } - } - - function yn(t) { - const e = { - frame: 0, - calls: 0, - triangles: 0, - points: 0, - lines: 0 - }; - return { - memory: { - geometries: 0, - textures: 0 - }, - render: e, - programs: null, - autoReset: !0, - reset: function() { - e.frame++, e.calls = 0, e.triangles = 0, e.points = 0, e.lines = 0 - }, - update: function(t, n, i) { - switch (e.calls++, n) { - case 4: - e.triangles += i * (t / 3); - break; - case 1: - e.lines += i * (t / 2); - break; - case 3: - e.lines += i * (t - 1); - break; - case 2: - e.lines += i * t; - break; - case 0: - e.points += i * t; - break; - default: - console.error("THREE.WebGLInfo: Unknown draw mode:", n) - } - } - } - } - - function An(t, e) { - return t[0] - e[0] - } - - function xn(t, e) { - return Math.abs(e[1]) - Math.abs(t[1]) - } - - function _n(t) { - const e = {}, - n = new Float32Array(8), - i = []; - for (let t = 0; t < 8; t++) i[t] = [t, 0]; - return { - update: function(r, o, s, a) { - const l = r.morphTargetInfluences, - c = void 0 === l ? 0 : l.length; - let h = e[o.id]; - if (void 0 === h) { - h = []; - for (let t = 0; t < c; t++) h[t] = [t, 0]; - e[o.id] = h - } - for (let t = 0; t < c; t++) { - const e = h[t]; - e[0] = t, e[1] = l[t] - } - h.sort(xn); - for (let t = 0; t < 8; t++) t < c && h[t][1] ? (i[t][0] = h[t][0], i[t][1] = h[t][1]) : (i[t][0] = Number.MAX_SAFE_INTEGER, i[t][1] = 0); - i.sort(An); - const u = s.morphTargets && o.morphAttributes.position, - d = s.morphNormals && o.morphAttributes.normal; - let p = 0; - for (let t = 0; t < 8; t++) { - const e = i[t], - r = e[0], - s = e[1]; - r !== Number.MAX_SAFE_INTEGER && s ? (u && o.getAttribute("morphTarget" + t) !== u[r] && o.setAttribute("morphTarget" + t, u[r]), d && o.getAttribute("morphNormal" + t) !== d[r] && o.setAttribute("morphNormal" + t, d[r]), n[t] = s, p += s) : (u && !0 === o.hasAttribute("morphTarget" + t) && o.deleteAttribute("morphTarget" + t), d && !0 === o.hasAttribute("morphNormal" + t) && o.deleteAttribute("morphNormal" + t), n[t] = 0) - } - const f = o.morphTargetsRelative ? 1 : 1 - p; - a.getUniforms().setValue(t, "morphTargetBaseInfluence", f), a.getUniforms().setValue(t, "morphTargetInfluences", n) - } - } - } - - function bn(t, e, n, i) { - let r = new WeakMap; - - function o(t) { - const e = t.target; - e.removeEventListener("dispose", o), n.remove(e.instanceMatrix), null !== e.instanceColor && n.remove(e.instanceColor) - } - return { - update: function(t) { - const s = i.render.frame, - a = t.geometry, - l = e.get(t, a); - return r.get(l) !== s && (e.update(l), r.set(l, s)), t.isInstancedMesh && (!1 === t.hasEventListener("dispose", o) && t.addEventListener("dispose", o), n.update(t.instanceMatrix, 34962), null !== t.instanceColor && n.update(t.instanceColor, 34962)), l - }, - dispose: function() { - r = new WeakMap - } - } - } - - function wn(t = null, e = 1, n = 1, i = 1) { - b.call(this, null), this.image = { - data: t, - width: e, - height: n, - depth: i - }, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0 - } - - function Mn(t = null, e = 1, n = 1, i = 1) { - b.call(this, null), this.image = { - data: t, - width: e, - height: n, - depth: i - }, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0 - } - ln.physical = { - uniforms: We([ln.standard.uniforms, { - clearcoat: { - value: 0 - }, - clearcoatMap: { - value: null - }, - clearcoatRoughness: { - value: 0 - }, - clearcoatRoughnessMap: { - value: null - }, - clearcoatNormalScale: { - value: new v(1, 1) - }, - clearcoatNormalMap: { - value: null - }, - sheen: { - value: new Yt(0) - }, - transmission: { - value: 0 - }, - transmissionMap: { - value: null - } - }]), - vertexShader: sn.meshphysical_vert, - fragmentShader: sn.meshphysical_frag - }, wn.prototype = Object.create(b.prototype), wn.prototype.constructor = wn, wn.prototype.isDataTexture2DArray = !0, Mn.prototype = Object.create(b.prototype), Mn.prototype.constructor = Mn, Mn.prototype.isDataTexture3D = !0; - const En = new b, - Sn = new wn, - Tn = new Mn, - Ln = new Ze, - Rn = [], - Cn = [], - Pn = new Float32Array(16), - Dn = new Float32Array(9), - In = new Float32Array(4); - - function On(t, e, n) { - const i = t[0]; - if (i <= 0 || i > 0) return t; - const r = e * n; - let o = Rn[r]; - if (void 0 === o && (o = new Float32Array(r), Rn[r] = o), 0 !== e) { - i.toArray(o, 0); - for (let i = 1, r = 0; i !== e; ++i) r += n, t[i].toArray(o, r) - } - return o - } - - function Nn(t, e) { - if (t.length !== e.length) return !1; - for (let n = 0, i = t.length; n < i; n++) - if (t[n] !== e[n]) return !1; - return !0 - } - - function Bn(t, e) { - for (let n = 0, i = e.length; n < i; n++) t[n] = e[n] - } - - function Fn(t, e) { - let n = Cn[e]; - void 0 === n && (n = new Int32Array(e), Cn[e] = n); - for (let i = 0; i !== e; ++i) n[i] = t.allocateTextureUnit(); - return n - } - - function zn(t, e) { - const n = this.cache; - n[0] !== e && (t.uniform1f(this.addr, e), n[0] = e) - } - - function Un(t, e) { - const n = this.cache; - if (void 0 !== e.x) n[0] === e.x && n[1] === e.y || (t.uniform2f(this.addr, e.x, e.y), n[0] = e.x, n[1] = e.y); - else { - if (Nn(n, e)) return; - t.uniform2fv(this.addr, e), Bn(n, e) - } - } - - function Hn(t, e) { - const n = this.cache; - if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z || (t.uniform3f(this.addr, e.x, e.y, e.z), n[0] = e.x, n[1] = e.y, n[2] = e.z); - else if (void 0 !== e.r) n[0] === e.r && n[1] === e.g && n[2] === e.b || (t.uniform3f(this.addr, e.r, e.g, e.b), n[0] = e.r, n[1] = e.g, n[2] = e.b); - else { - if (Nn(n, e)) return; - t.uniform3fv(this.addr, e), Bn(n, e) - } - } - - function Gn(t, e) { - const n = this.cache; - if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z && n[3] === e.w || (t.uniform4f(this.addr, e.x, e.y, e.z, e.w), n[0] = e.x, n[1] = e.y, n[2] = e.z, n[3] = e.w); - else { - if (Nn(n, e)) return; - t.uniform4fv(this.addr, e), Bn(n, e) - } - } - - function Vn(t, e) { - const n = this.cache, - i = e.elements; - if (void 0 === i) { - if (Nn(n, e)) return; - t.uniformMatrix2fv(this.addr, !1, e), Bn(n, e) - } else { - if (Nn(n, i)) return; - In.set(i), t.uniformMatrix2fv(this.addr, !1, In), Bn(n, i) - } - } - - function kn(t, e) { - const n = this.cache, - i = e.elements; - if (void 0 === i) { - if (Nn(n, e)) return; - t.uniformMatrix3fv(this.addr, !1, e), Bn(n, e) - } else { - if (Nn(n, i)) return; - Dn.set(i), t.uniformMatrix3fv(this.addr, !1, Dn), Bn(n, i) - } - } - - function Wn(t, e) { - const n = this.cache, - i = e.elements; - if (void 0 === i) { - if (Nn(n, e)) return; - t.uniformMatrix4fv(this.addr, !1, e), Bn(n, e) - } else { - if (Nn(n, i)) return; - Pn.set(i), t.uniformMatrix4fv(this.addr, !1, Pn), Bn(n, i) - } - } - - function jn(t, e, n) { - const i = this.cache, - r = n.allocateTextureUnit(); - i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTexture2D(e || En, r) - } - - function Xn(t, e, n) { - const i = this.cache, - r = n.allocateTextureUnit(); - i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture2DArray(e || Sn, r) - } - - function qn(t, e, n) { - const i = this.cache, - r = n.allocateTextureUnit(); - i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture3D(e || Tn, r) - } - - function Yn(t, e, n) { - const i = this.cache, - r = n.allocateTextureUnit(); - i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTextureCube(e || Ln, r) - } - - function Qn(t, e) { - const n = this.cache; - n[0] !== e && (t.uniform1i(this.addr, e), n[0] = e) - } - - function Zn(t, e) { - const n = this.cache; - Nn(n, e) || (t.uniform2iv(this.addr, e), Bn(n, e)) - } - - function Jn(t, e) { - const n = this.cache; - Nn(n, e) || (t.uniform3iv(this.addr, e), Bn(n, e)) - } - - function Kn(t, e) { - const n = this.cache; - Nn(n, e) || (t.uniform4iv(this.addr, e), Bn(n, e)) - } - - function $n(t, e) { - const n = this.cache; - n[0] !== e && (t.uniform1ui(this.addr, e), n[0] = e) - } - - function ti(t, e) { - t.uniform1fv(this.addr, e) - } - - function ei(t, e) { - t.uniform1iv(this.addr, e) - } - - function ni(t, e) { - t.uniform2iv(this.addr, e) - } - - function ii(t, e) { - t.uniform3iv(this.addr, e) - } - - function ri(t, e) { - t.uniform4iv(this.addr, e) - } - - function oi(t, e) { - const n = On(e, this.size, 2); - t.uniform2fv(this.addr, n) - } - - function si(t, e) { - const n = On(e, this.size, 3); - t.uniform3fv(this.addr, n) - } - - function ai(t, e) { - const n = On(e, this.size, 4); - t.uniform4fv(this.addr, n) - } - - function li(t, e) { - const n = On(e, this.size, 4); - t.uniformMatrix2fv(this.addr, !1, n) - } - - function ci(t, e) { - const n = On(e, this.size, 9); - t.uniformMatrix3fv(this.addr, !1, n) - } - - function hi(t, e) { - const n = On(e, this.size, 16); - t.uniformMatrix4fv(this.addr, !1, n) - } - - function ui(t, e, n) { - const i = e.length, - r = Fn(n, i); - t.uniform1iv(this.addr, r); - for (let t = 0; t !== i; ++t) n.safeSetTexture2D(e[t] || En, r[t]) - } - - function di(t, e, n) { - const i = e.length, - r = Fn(n, i); - t.uniform1iv(this.addr, r); - for (let t = 0; t !== i; ++t) n.safeSetTextureCube(e[t] || Ln, r[t]) - } - - function pi(t, e, n) { - this.id = t, this.addr = n, this.cache = [], this.setValue = function(t) { - switch (t) { - case 5126: - return zn; - case 35664: - return Un; - case 35665: - return Hn; - case 35666: - return Gn; - case 35674: - return Vn; - case 35675: - return kn; - case 35676: - return Wn; - case 5124: - case 35670: - return Qn; - case 35667: - case 35671: - return Zn; - case 35668: - case 35672: - return Jn; - case 35669: - case 35673: - return Kn; - case 5125: - return $n; - case 35678: - case 36198: - case 36298: - case 36306: - case 35682: - return jn; - case 35679: - case 36299: - case 36307: - return qn; - case 35680: - case 36300: - case 36308: - case 36293: - return Yn; - case 36289: - case 36303: - case 36311: - case 36292: - return Xn - } - }(e.type) - } - - function fi(t, e, n) { - this.id = t, this.addr = n, this.cache = [], this.size = e.size, this.setValue = function(t) { - switch (t) { - case 5126: - return ti; - case 35664: - return oi; - case 35665: - return si; - case 35666: - return ai; - case 35674: - return li; - case 35675: - return ci; - case 35676: - return hi; - case 5124: - case 35670: - return ei; - case 35667: - case 35671: - return ni; - case 35668: - case 35672: - return ii; - case 35669: - case 35673: - return ri; - case 35678: - case 36198: - case 36298: - case 36306: - case 35682: - return ui; - case 35680: - case 36300: - case 36308: - case 36293: - return di - } - }(e.type) - } - - function mi(t) { - this.id = t, this.seq = [], this.map = {} - } - fi.prototype.updateCache = function(t) { - const e = this.cache; - t instanceof Float32Array && e.length !== t.length && (this.cache = new Float32Array(t.length)), Bn(e, t) - }, mi.prototype.setValue = function(t, e, n) { - const i = this.seq; - for (let r = 0, o = i.length; r !== o; ++r) { - const o = i[r]; - o.setValue(t, e[o.id], n) - } - }; - const gi = /(\w+)(\])?(\[|\.)?/g; - - function vi(t, e) { - t.seq.push(e), t.map[e.id] = e - } - - function yi(t, e, n) { - const i = t.name, - r = i.length; - for (gi.lastIndex = 0;;) { - const o = gi.exec(i), - s = gi.lastIndex; - let a = o[1]; - const l = "]" === o[2], - c = o[3]; - if (l && (a |= 0), void 0 === c || "[" === c && s + 2 === r) { - vi(n, void 0 === c ? new pi(a, t, e) : new fi(a, t, e)); - break - } { - let t = n.map[a]; - void 0 === t && (t = new mi(a), vi(n, t)), n = t - } - } - } - - function Ai(t, e) { - this.seq = [], this.map = {}; - const n = t.getProgramParameter(e, 35718); - for (let i = 0; i < n; ++i) { - const n = t.getActiveUniform(e, i); - yi(n, t.getUniformLocation(e, n.name), this) - } - } - - function xi(t, e, n) { - const i = t.createShader(e); - return t.shaderSource(i, n), t.compileShader(i), i - } - Ai.prototype.setValue = function(t, e, n, i) { - const r = this.map[e]; - void 0 !== r && r.setValue(t, n, i) - }, Ai.prototype.setOptional = function(t, e, n) { - const i = e[n]; - void 0 !== i && this.setValue(t, n, i) - }, Ai.upload = function(t, e, n, i) { - for (let r = 0, o = e.length; r !== o; ++r) { - const o = e[r], - s = n[o.id]; - !1 !== s.needsUpdate && o.setValue(t, s.value, i) - } - }, Ai.seqWithValue = function(t, e) { - const n = []; - for (let i = 0, r = t.length; i !== r; ++i) { - const r = t[i]; - r.id in e && n.push(r) - } - return n - }; - let _i = 0; - - function bi(t) { - switch (t) { - 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 ) )"]; - case 3003: - return ["LogLuv", "( value )"]; - default: - return console.warn("THREE.WebGLProgram: Unsupported encoding:", t), ["Linear", "( value )"] - } - } - - function wi(t, e, n) { - const i = t.getShaderParameter(e, 35713), - r = t.getShaderInfoLog(e).trim(); - if (i && "" === r) return ""; - return "THREE.WebGLShader: gl.getShaderInfoLog() " + n + "\n" + r + function(t) { - const e = t.split("\n"); - for (let t = 0; t < e.length; t++) e[t] = t + 1 + ": " + e[t]; - return e.join("\n") - }(t.getShaderSource(e)) - } - - function Mi(t, e) { - const n = bi(e); - return "vec4 " + t + "( vec4 value ) { return " + n[0] + "ToLinear" + n[1] + "; }" - } - - function Ei(t, e) { - const n = bi(e); - return "vec4 " + t + "( vec4 value ) { return LinearTo" + n[0] + n[1] + "; }" - } - - function Si(t, e) { - let n; - switch (e) { - case 1: - n = "Linear"; - break; - case 2: - n = "Reinhard"; - break; - case 3: - n = "OptimizedCineon"; - break; - case 4: - n = "ACESFilmic"; - break; - case 5: - n = "Custom"; - break; - default: - console.warn("THREE.WebGLProgram: Unsupported toneMapping:", e), n = "Linear" - } - return "vec3 " + t + "( vec3 color ) { return " + n + "ToneMapping( color ); }" - } - - function Ti(t) { - return "" !== t - } - - function Li(t, e) { - return t.replace(/NUM_DIR_LIGHTS/g, e.numDirLights).replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, e.numPointLights).replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows) - } - - function Ri(t, e) { - return t.replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, e.numClippingPlanes - e.numClipIntersection) - } - const Ci = /^[ \t]*#include +<([\w\d./]+)>/gm; - - function Pi(t) { - return t.replace(Ci, Di) - } - - function Di(t, e) { - const n = sn[e]; - if (void 0 === n) throw new Error("Can not resolve #include <" + e + ">"); - return Pi(n) - } - const Ii = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g, - Oi = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; - - function Ni(t) { - return t.replace(Oi, Fi).replace(Ii, Bi) - } - - function Bi(t, e, n, i) { - return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."), Fi(t, e, n, i) - } - - function Fi(t, e, n, i) { - let r = ""; - for (let t = parseInt(e); t < parseInt(n); t++) r += i.replace(/\[\s*i\s*\]/g, "[ " + t + " ]").replace(/UNROLLED_LOOP_INDEX/g, t); - return r - } - - function zi(t) { - let e = "precision " + t.precision + " float;\nprecision " + t.precision + " int;"; - return "highp" === t.precision ? e += "\n#define HIGH_PRECISION" : "mediump" === t.precision ? e += "\n#define MEDIUM_PRECISION" : "lowp" === t.precision && (e += "\n#define LOW_PRECISION"), e - } - - function Ui(t, e, n, i) { - const r = t.getContext(), - o = n.defines; - let s = n.vertexShader, - a = n.fragmentShader; - const l = function(t) { - let e = "SHADOWMAP_TYPE_BASIC"; - return 1 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF" : 2 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === t.shadowMapType && (e = "SHADOWMAP_TYPE_VSM"), e - }(n), - c = function(t) { - let e = "ENVMAP_TYPE_CUBE"; - if (t.envMap) switch (t.envMapMode) { - case 301: - case 302: - e = "ENVMAP_TYPE_CUBE"; - break; - case 306: - case 307: - e = "ENVMAP_TYPE_CUBE_UV" - } - return e - }(n), - h = function(t) { - let e = "ENVMAP_MODE_REFLECTION"; - if (t.envMap) switch (t.envMapMode) { - case 302: - case 307: - e = "ENVMAP_MODE_REFRACTION" - } - return e - }(n), - u = function(t) { - let e = "ENVMAP_BLENDING_NONE"; - if (t.envMap) switch (t.combine) { - case 0: - e = "ENVMAP_BLENDING_MULTIPLY"; - break; - case 1: - e = "ENVMAP_BLENDING_MIX"; - break; - case 2: - e = "ENVMAP_BLENDING_ADD" - } - return e - }(n), - d = t.gammaFactor > 0 ? t.gammaFactor : 1, - p = n.isWebGL2 ? "" : function(t) { - return [t.extensionDerivatives || t.envMapCubeUV || t.bumpMap || t.tangentSpaceNormalMap || t.clearcoatNormalMap || t.flatShading || "physical" === t.shaderID ? "#extension GL_OES_standard_derivatives : enable" : "", (t.extensionFragDepth || t.logarithmicDepthBuffer) && t.rendererExtensionFragDepth ? "#extension GL_EXT_frag_depth : enable" : "", t.extensionDrawBuffers && t.rendererExtensionDrawBuffers ? "#extension GL_EXT_draw_buffers : require" : "", (t.extensionShaderTextureLOD || t.envMap) && t.rendererExtensionShaderTextureLod ? "#extension GL_EXT_shader_texture_lod : enable" : ""].filter(Ti).join("\n") - }(n), - f = function(t) { - const e = []; - for (const n in t) { - const i = t[n]; - !1 !== i && e.push("#define " + n + " " + i) - } - return e.join("\n") - }(o), - m = r.createProgram(); - let g, v, y = n.glslVersion ? "#version " + n.glslVersion + "\n" : ""; - n.isRawShaderMaterial ? (g = [f].filter(Ti).join("\n"), g.length > 0 && (g += "\n"), v = [p, f].filter(Ti).join("\n"), v.length > 0 && (v += "\n")) : (g = [zi(n), "#define SHADER_NAME " + n.shaderName, f, n.instancing ? "#define USE_INSTANCING" : "", n.instancingColor ? "#define USE_INSTANCING_COLOR" : "", n.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", "#define GAMMA_FACTOR " + d, "#define MAX_BONES " + n.maxBones, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + h : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.displacementMap && n.supportsVertexTextures ? "#define USE_DISPLACEMENTMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors ? "#define USE_COLOR" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.skinning ? "#define USE_SKINNING" : "", n.useVertexTexture ? "#define BONE_TEXTURE" : "", n.morphTargets ? "#define USE_MORPHTARGETS" : "", n.morphNormals && !1 === n.flatShading ? "#define USE_MORPHNORMALS" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", "#ifdef USE_INSTANCING", "\tattribute mat4 instanceMatrix;", "#endif", "#ifdef USE_INSTANCING_COLOR", "\tattribute vec3 instanceColor;", "#endif", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "#ifdef USE_TANGENT", "\tattribute vec4 tangent;", "#endif", "#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;", "\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(Ti).join("\n"), v = [p, zi(n), "#define SHADER_NAME " + n.shaderName, f, n.alphaTest ? "#define ALPHATEST " + n.alphaTest + (n.alphaTest % 1 ? "" : ".0") : "", "#define GAMMA_FACTOR " + d, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.matcap ? "#define USE_MATCAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + c : "", n.envMap ? "#define " + h : "", n.envMap ? "#define " + u : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.sheen ? "#define USE_SHEEN" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors || n.instancingColor ? "#define USE_COLOR" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.gradientMap ? "#define USE_GRADIENTMAP" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", n.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", (n.extensionShaderTextureLOD || n.envMap) && n.rendererExtensionShaderTextureLod ? "#define TEXTURE_LOD_EXT" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", 0 !== n.toneMapping ? "#define TONE_MAPPING" : "", 0 !== n.toneMapping ? sn.tonemapping_pars_fragment : "", 0 !== n.toneMapping ? Si("toneMapping", n.toneMapping) : "", n.dithering ? "#define DITHERING" : "", sn.encodings_pars_fragment, n.map ? Mi("mapTexelToLinear", n.mapEncoding) : "", n.matcap ? Mi("matcapTexelToLinear", n.matcapEncoding) : "", n.envMap ? Mi("envMapTexelToLinear", n.envMapEncoding) : "", n.emissiveMap ? Mi("emissiveMapTexelToLinear", n.emissiveMapEncoding) : "", n.lightMap ? Mi("lightMapTexelToLinear", n.lightMapEncoding) : "", Ei("linearToOutputTexel", n.outputEncoding), n.depthPacking ? "#define DEPTH_PACKING " + n.depthPacking : "", "\n"].filter(Ti).join("\n")), s = Pi(s), s = Li(s, n), s = Ri(s, n), a = Pi(a), a = Li(a, n), a = Ri(a, n), s = Ni(s), a = Ni(a), n.isWebGL2 && !0 !== n.isRawShaderMaterial && (y = "#version 300 es\n", g = ["#define attribute in", "#define varying out", "#define texture2D texture"].join("\n") + "\n" + g, v = ["#define varying in", "300 es" === n.glslVersion ? "" : "out highp vec4 pc_fragColor;", "300 es" === n.glslVersion ? "" : "#define gl_FragColor pc_fragColor", "#define gl_FragDepthEXT gl_FragDepth", "#define texture2D texture", "#define textureCube texture", "#define texture2DProj textureProj", "#define texture2DLodEXT textureLod", "#define texture2DProjLodEXT textureProjLod", "#define textureCubeLodEXT textureLod", "#define texture2DGradEXT textureGrad", "#define texture2DProjGradEXT textureProjGrad", "#define textureCubeGradEXT textureGrad"].join("\n") + "\n" + v); - const A = y + v + a, - x = xi(r, 35633, y + g + s), - _ = xi(r, 35632, A); - if (r.attachShader(m, x), r.attachShader(m, _), void 0 !== n.index0AttributeName ? r.bindAttribLocation(m, 0, n.index0AttributeName) : !0 === n.morphTargets && r.bindAttribLocation(m, 0, "position"), r.linkProgram(m), t.debug.checkShaderErrors) { - const t = r.getProgramInfoLog(m).trim(), - e = r.getShaderInfoLog(x).trim(), - n = r.getShaderInfoLog(_).trim(); - let i = !0, - o = !0; - if (!1 === r.getProgramParameter(m, 35714)) { - i = !1; - const e = wi(r, x, "vertex"), - n = wi(r, _, "fragment"); - console.error("THREE.WebGLProgram: shader error: ", r.getError(), "35715", r.getProgramParameter(m, 35715), "gl.getProgramInfoLog", t, e, n) - } else "" !== t ? console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()", t) : "" !== e && "" !== n || (o = !1); - o && (this.diagnostics = { - runnable: i, - programLog: t, - vertexShader: { - log: e, - prefix: g - }, - fragmentShader: { - log: n, - prefix: v - } - }) - } - let b, w; - return r.deleteShader(x), r.deleteShader(_), this.getUniforms = function() { - return void 0 === b && (b = new Ai(r, m)), b - }, this.getAttributes = function() { - return void 0 === w && (w = function(t, e) { - const n = {}, - i = t.getProgramParameter(e, 35721); - for (let r = 0; r < i; r++) { - const i = t.getActiveAttrib(e, r).name; - n[i] = t.getAttribLocation(e, i) - } - return n - }(r, m)), w - }, this.destroy = function() { - i.releaseStatesOfProgram(this), r.deleteProgram(m), this.program = void 0 - }, this.name = n.shaderName, this.id = _i++, this.cacheKey = e, this.usedTimes = 1, this.program = m, this.vertexShader = x, this.fragmentShader = _, this - } - - function Hi(t, e, n, i, r, o) { - const s = [], - a = i.isWebGL2, - l = i.logarithmicDepthBuffer, - c = i.floatVertexTextures, - h = i.maxVertexUniforms, - u = i.vertexTextures; - let d = i.precision; - const p = { - MeshDepthMaterial: "depth", - MeshDistanceMaterial: "distanceRGBA", - MeshNormalMaterial: "normal", - MeshBasicMaterial: "basic", - MeshLambertMaterial: "lambert", - MeshPhongMaterial: "phong", - MeshToonMaterial: "toon", - MeshStandardMaterial: "physical", - MeshPhysicalMaterial: "physical", - MeshMatcapMaterial: "matcap", - LineBasicMaterial: "basic", - LineDashedMaterial: "dashed", - PointsMaterial: "points", - ShadowMaterial: "shadow", - SpriteMaterial: "sprite" - }, - f = ["precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "instancingColor", "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "envMapCubeUV", "lightMap", "lightMapEncoding", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "displacementMap", "specularMap", "roughnessMap", "metalnessMap", "gradientMap", "alphaMap", "combine", "vertexColors", "vertexTangents", "vertexUvs", "uvsVertexOnly", "fog", "useFog", "fogExp2", "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", "maxBones", "useVertexTexture", "morphTargets", "morphNormals", "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", "numDirLightShadows", "numPointLightShadows", "numSpotLightShadows", "shadowMapEnabled", "shadowMapType", "toneMapping", "physicallyCorrectLights", "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", "sheen", "transmissionMap"]; - - function m(t) { - let e; - return t && t.isTexture ? e = t.encoding : t && t.isWebGLRenderTarget ? (console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."), e = t.texture.encoding) : e = 3e3, e - } - return { - getParameters: function(r, s, f, g, v) { - const y = g.fog, - A = r.isMeshStandardMaterial ? g.environment : null, - x = e.get(r.envMap || A), - _ = p[r.type], - b = v.isSkinnedMesh ? function(t) { - const e = t.skeleton.bones; - if (c) return 1024; { - const t = h, - n = Math.floor((t - 20) / 4), - i = Math.min(n, e.length); - return i < e.length ? (console.warn("THREE.WebGLRenderer: Skeleton has " + e.length + " bones. This GPU supports " + i + "."), 0) : i - } - }(v) : 0; - let w, M; - if (null !== r.precision && (d = i.getMaxPrecision(r.precision), d !== r.precision && console.warn("THREE.WebGLProgram.getParameters:", r.precision, "not supported, using", d, "instead.")), _) { - const t = ln[_]; - w = t.vertexShader, M = t.fragmentShader - } else w = r.vertexShader, M = r.fragmentShader; - const E = t.getRenderTarget(); - return { - isWebGL2: a, - shaderID: _, - shaderName: r.type, - vertexShader: w, - fragmentShader: M, - defines: r.defines, - isRawShaderMaterial: !0 === r.isRawShaderMaterial, - glslVersion: r.glslVersion, - precision: d, - instancing: !0 === v.isInstancedMesh, - instancingColor: !0 === v.isInstancedMesh && null !== v.instanceColor, - supportsVertexTextures: u, - outputEncoding: null !== E ? m(E.texture) : t.outputEncoding, - map: !!r.map, - mapEncoding: m(r.map), - matcap: !!r.matcap, - matcapEncoding: m(r.matcap), - envMap: !!x, - envMapMode: x && x.mapping, - envMapEncoding: m(x), - envMapCubeUV: !!x && (306 === x.mapping || 307 === x.mapping), - lightMap: !!r.lightMap, - lightMapEncoding: m(r.lightMap), - aoMap: !!r.aoMap, - emissiveMap: !!r.emissiveMap, - emissiveMapEncoding: m(r.emissiveMap), - bumpMap: !!r.bumpMap, - normalMap: !!r.normalMap, - objectSpaceNormalMap: 1 === r.normalMapType, - tangentSpaceNormalMap: 0 === r.normalMapType, - clearcoatMap: !!r.clearcoatMap, - clearcoatRoughnessMap: !!r.clearcoatRoughnessMap, - clearcoatNormalMap: !!r.clearcoatNormalMap, - displacementMap: !!r.displacementMap, - roughnessMap: !!r.roughnessMap, - metalnessMap: !!r.metalnessMap, - specularMap: !!r.specularMap, - alphaMap: !!r.alphaMap, - gradientMap: !!r.gradientMap, - sheen: !!r.sheen, - transmissionMap: !!r.transmissionMap, - combine: r.combine, - vertexTangents: r.normalMap && r.vertexTangents, - vertexColors: r.vertexColors, - vertexUvs: !!(r.map || r.bumpMap || r.normalMap || r.specularMap || r.alphaMap || r.emissiveMap || r.roughnessMap || r.metalnessMap || r.clearcoatMap || r.clearcoatRoughnessMap || r.clearcoatNormalMap || r.displacementMap || r.transmissionMap), - uvsVertexOnly: !(r.map || r.bumpMap || r.normalMap || r.specularMap || r.alphaMap || r.emissiveMap || r.roughnessMap || r.metalnessMap || r.clearcoatNormalMap || r.transmissionMap || !r.displacementMap), - fog: !!y, - useFog: r.fog, - fogExp2: y && y.isFogExp2, - flatShading: r.flatShading, - sizeAttenuation: r.sizeAttenuation, - logarithmicDepthBuffer: l, - skinning: r.skinning && b > 0, - maxBones: b, - useVertexTexture: c, - morphTargets: r.morphTargets, - morphNormals: r.morphNormals, - maxMorphTargets: t.maxMorphTargets, - maxMorphNormals: t.maxMorphNormals, - numDirLights: s.directional.length, - numPointLights: s.point.length, - numSpotLights: s.spot.length, - numRectAreaLights: s.rectArea.length, - numHemiLights: s.hemi.length, - numDirLightShadows: s.directionalShadowMap.length, - numPointLightShadows: s.pointShadowMap.length, - numSpotLightShadows: s.spotShadowMap.length, - numClippingPlanes: o.numPlanes, - numClipIntersection: o.numIntersection, - dithering: r.dithering, - shadowMapEnabled: t.shadowMap.enabled && f.length > 0, - shadowMapType: t.shadowMap.type, - toneMapping: r.toneMapped ? t.toneMapping : 0, - physicallyCorrectLights: t.physicallyCorrectLights, - premultipliedAlpha: r.premultipliedAlpha, - alphaTest: r.alphaTest, - doubleSided: 2 === r.side, - flipSided: 1 === r.side, - depthPacking: void 0 !== r.depthPacking && r.depthPacking, - index0AttributeName: r.index0AttributeName, - extensionDerivatives: r.extensions && r.extensions.derivatives, - extensionFragDepth: r.extensions && r.extensions.fragDepth, - extensionDrawBuffers: r.extensions && r.extensions.drawBuffers, - extensionShaderTextureLOD: r.extensions && r.extensions.shaderTextureLOD, - rendererExtensionFragDepth: a || n.has("EXT_frag_depth"), - rendererExtensionDrawBuffers: a || n.has("WEBGL_draw_buffers"), - rendererExtensionShaderTextureLod: a || n.has("EXT_shader_texture_lod"), - customProgramCacheKey: r.customProgramCacheKey() - } - }, - getProgramCacheKey: function(e) { - const n = []; - if (e.shaderID ? n.push(e.shaderID) : (n.push(e.fragmentShader), n.push(e.vertexShader)), void 0 !== e.defines) - for (const t in e.defines) n.push(t), n.push(e.defines[t]); - if (!1 === e.isRawShaderMaterial) { - for (let t = 0; t < f.length; t++) n.push(e[f[t]]); - n.push(t.outputEncoding), n.push(t.gammaFactor) - } - return n.push(e.customProgramCacheKey), n.join() - }, - getUniforms: function(t) { - const e = p[t.type]; - let n; - if (e) { - const t = ln[e]; - n = je.clone(t.uniforms) - } else n = t.uniforms; - return n - }, - acquireProgram: function(e, n) { - let i; - for (let t = 0, e = s.length; t < e; t++) { - const e = s[t]; - if (e.cacheKey === n) { - i = e, ++i.usedTimes; - break - } - } - return void 0 === i && (i = new Ui(t, n, e, r), s.push(i)), i - }, - releaseProgram: function(t) { - if (0 == --t.usedTimes) { - const e = s.indexOf(t); - s[e] = s[s.length - 1], s.pop(), t.destroy() - } - }, - programs: s - } - } - - function Gi() { - let t = new WeakMap; - return { - get: function(e) { - let n = t.get(e); - return void 0 === n && (n = {}, t.set(e, n)), n - }, - remove: function(e) { - t.delete(e) - }, - update: function(e, n, i) { - t.get(e)[n] = i - }, - dispose: function() { - t = new WeakMap - } - } - } - - function Vi(t, e) { - return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.program !== e.program ? t.program.id - e.program.id : t.material.id !== e.material.id ? t.material.id - e.material.id : t.z !== e.z ? t.z - e.z : t.id - e.id - } - - function ki(t, e) { - return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.z !== e.z ? e.z - t.z : t.id - e.id - } - - function Wi(t) { - const e = []; - let n = 0; - const i = [], - r = [], - o = { - id: -1 - }; - - function s(i, r, s, a, l, c) { - let h = e[n]; - const u = t.get(s); - return void 0 === h ? (h = { - id: i.id, - object: i, - geometry: r, - material: s, - program: u.program || o, - groupOrder: a, - renderOrder: i.renderOrder, - z: l, - group: c - }, e[n] = h) : (h.id = i.id, h.object = i, h.geometry = r, h.material = s, h.program = u.program || o, h.groupOrder = a, h.renderOrder = i.renderOrder, h.z = l, h.group = c), n++, h - } - return { - opaque: i, - transparent: r, - init: function() { - n = 0, i.length = 0, r.length = 0 - }, - push: function(t, e, n, o, a, l) { - const c = s(t, e, n, o, a, l); - (!0 === n.transparent ? r : i).push(c) - }, - unshift: function(t, e, n, o, a, l) { - const c = s(t, e, n, o, a, l); - (!0 === n.transparent ? r : i).unshift(c) - }, - finish: function() { - for (let t = n, i = e.length; t < i; t++) { - const n = e[t]; - if (null === n.id) break; - n.id = null, n.object = null, n.geometry = null, n.material = null, n.program = null, n.group = null - } - }, - sort: function(t, e) { - i.length > 1 && i.sort(t || Vi), r.length > 1 && r.sort(e || ki) - } - } - } - - function ji(t) { - let e = new WeakMap; - return { - get: function(n, i) { - const r = e.get(n); - let o; - return void 0 === r ? (o = new Wi(t), e.set(n, new WeakMap), e.get(n).set(i, o)) : (o = r.get(i), void 0 === o && (o = new Wi(t), r.set(i, o))), o - }, - dispose: function() { - e = new WeakMap - } - } - } - - function Xi() { - const t = {}; - return { - get: function(e) { - if (void 0 !== t[e.id]) return t[e.id]; - let n; - switch (e.type) { - case "DirectionalLight": - n = { - direction: new T, - color: new Yt - }; - break; - case "SpotLight": - n = { - position: new T, - direction: new T, - color: new Yt, - distance: 0, - coneCos: 0, - penumbraCos: 0, - decay: 0 - }; - break; - case "PointLight": - n = { - position: new T, - color: new Yt, - distance: 0, - decay: 0 - }; - break; - case "HemisphereLight": - n = { - direction: new T, - skyColor: new Yt, - groundColor: new Yt - }; - break; - case "RectAreaLight": - n = { - color: new Yt, - position: new T, - halfWidth: new T, - halfHeight: new T - } - } - return t[e.id] = n, n - } - } - } - let qi = 0; - - function Yi(t, e) { - return (e.castShadow ? 1 : 0) - (t.castShadow ? 1 : 0) - } - - function Qi(t, e) { - const n = new Xi, - i = function() { - const t = {}; - return { - get: function(e) { - if (void 0 !== t[e.id]) return t[e.id]; - let n; - switch (e.type) { - case "DirectionalLight": - case "SpotLight": - n = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new v - }; - break; - case "PointLight": - n = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new v, - shadowCameraNear: 1, - shadowCameraFar: 1e3 - } - } - return t[e.id] = n, n - } - } - }(), - r = { - version: 0, - hash: { - directionalLength: -1, - pointLength: -1, - spotLength: -1, - rectAreaLength: -1, - hemiLength: -1, - numDirectionalShadows: -1, - numPointShadows: -1, - numSpotShadows: -1 - }, - ambient: [0, 0, 0], - probe: [], - directional: [], - directionalShadow: [], - directionalShadowMap: [], - directionalShadowMatrix: [], - spot: [], - spotShadow: [], - spotShadowMap: [], - spotShadowMatrix: [], - rectArea: [], - rectAreaLTC1: null, - rectAreaLTC2: null, - point: [], - pointShadow: [], - pointShadowMap: [], - pointShadowMatrix: [], - hemi: [] - }; - for (let t = 0; t < 9; t++) r.probe.push(new T); - const o = new T, - s = new et, - a = new et; - return { - setup: function(o) { - let s = 0, - a = 0, - l = 0; - for (let t = 0; t < 9; t++) r.probe[t].set(0, 0, 0); - let c = 0, - h = 0, - u = 0, - d = 0, - p = 0, - f = 0, - m = 0, - g = 0; - o.sort(Yi); - for (let t = 0, e = o.length; t < e; t++) { - const e = o[t], - v = e.color, - y = e.intensity, - A = e.distance, - x = e.shadow && e.shadow.map ? e.shadow.map.texture : null; - if (e.isAmbientLight) s += v.r * y, a += v.g * y, l += v.b * y; - else if (e.isLightProbe) - for (let t = 0; t < 9; t++) r.probe[t].addScaledVector(e.sh.coefficients[t], y); - else if (e.isDirectionalLight) { - const t = n.get(e); - if (t.color.copy(e.color).multiplyScalar(e.intensity), e.castShadow) { - const t = e.shadow, - n = i.get(e); - n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, r.directionalShadow[c] = n, r.directionalShadowMap[c] = x, r.directionalShadowMatrix[c] = e.shadow.matrix, f++ - } - r.directional[c] = t, c++ - } else if (e.isSpotLight) { - const t = n.get(e); - if (t.position.setFromMatrixPosition(e.matrixWorld), t.color.copy(v).multiplyScalar(y), t.distance = A, t.coneCos = Math.cos(e.angle), t.penumbraCos = Math.cos(e.angle * (1 - e.penumbra)), t.decay = e.decay, e.castShadow) { - const t = e.shadow, - n = i.get(e); - n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, r.spotShadow[u] = n, r.spotShadowMap[u] = x, r.spotShadowMatrix[u] = e.shadow.matrix, g++ - } - r.spot[u] = t, u++ - } else if (e.isRectAreaLight) { - const t = n.get(e); - t.color.copy(v).multiplyScalar(y), t.halfWidth.set(.5 * e.width, 0, 0), t.halfHeight.set(0, .5 * e.height, 0), r.rectArea[d] = t, d++ - } else if (e.isPointLight) { - const t = n.get(e); - if (t.color.copy(e.color).multiplyScalar(e.intensity), t.distance = e.distance, t.decay = e.decay, e.castShadow) { - const t = e.shadow, - n = i.get(e); - n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, n.shadowCameraNear = t.camera.near, n.shadowCameraFar = t.camera.far, r.pointShadow[h] = n, r.pointShadowMap[h] = x, r.pointShadowMatrix[h] = e.shadow.matrix, m++ - } - r.point[h] = t, h++ - } else if (e.isHemisphereLight) { - const t = n.get(e); - t.skyColor.copy(e.color).multiplyScalar(y), t.groundColor.copy(e.groundColor).multiplyScalar(y), r.hemi[p] = t, p++ - } - } - d > 0 && (e.isWebGL2 || !0 === t.has("OES_texture_float_linear") ? (r.rectAreaLTC1 = an.LTC_FLOAT_1, r.rectAreaLTC2 = an.LTC_FLOAT_2) : !0 === t.has("OES_texture_half_float_linear") ? (r.rectAreaLTC1 = an.LTC_HALF_1, r.rectAreaLTC2 = an.LTC_HALF_2) : console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")), r.ambient[0] = s, r.ambient[1] = a, r.ambient[2] = l; - const v = r.hash; - v.directionalLength === c && v.pointLength === h && v.spotLength === u && v.rectAreaLength === d && v.hemiLength === p && v.numDirectionalShadows === f && v.numPointShadows === m && v.numSpotShadows === g || (r.directional.length = c, r.spot.length = u, r.rectArea.length = d, r.point.length = h, r.hemi.length = p, r.directionalShadow.length = f, r.directionalShadowMap.length = f, r.pointShadow.length = m, r.pointShadowMap.length = m, r.spotShadow.length = g, r.spotShadowMap.length = g, r.directionalShadowMatrix.length = f, r.pointShadowMatrix.length = m, r.spotShadowMatrix.length = g, v.directionalLength = c, v.pointLength = h, v.spotLength = u, v.rectAreaLength = d, v.hemiLength = p, v.numDirectionalShadows = f, v.numPointShadows = m, v.numSpotShadows = g, r.version = qi++) - }, - setupView: function(t, e) { - let n = 0, - i = 0, - l = 0, - c = 0, - h = 0; - const u = e.matrixWorldInverse; - for (let e = 0, d = t.length; e < d; e++) { - const d = t[e]; - if (d.isDirectionalLight) { - const t = r.directional[n]; - t.direction.setFromMatrixPosition(d.matrixWorld), o.setFromMatrixPosition(d.target.matrixWorld), t.direction.sub(o), t.direction.transformDirection(u), n++ - } else if (d.isSpotLight) { - const t = r.spot[l]; - t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), t.direction.setFromMatrixPosition(d.matrixWorld), o.setFromMatrixPosition(d.target.matrixWorld), t.direction.sub(o), t.direction.transformDirection(u), l++ - } else if (d.isRectAreaLight) { - const t = r.rectArea[c]; - t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), a.identity(), s.copy(d.matrixWorld), s.premultiply(u), a.extractRotation(s), t.halfWidth.set(.5 * d.width, 0, 0), t.halfHeight.set(0, .5 * d.height, 0), t.halfWidth.applyMatrix4(a), t.halfHeight.applyMatrix4(a), c++ - } else if (d.isPointLight) { - const t = r.point[i]; - t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), i++ - } else if (d.isHemisphereLight) { - const t = r.hemi[h]; - t.direction.setFromMatrixPosition(d.matrixWorld), t.direction.transformDirection(u), t.direction.normalize(), h++ - } - } - }, - state: r - } - } - - function Zi(t, e) { - const n = new Qi(t, e), - i = [], - r = []; - return { - init: function() { - i.length = 0, r.length = 0 - }, - state: { - lightsArray: i, - shadowsArray: r, - lights: n - }, - setupLights: function() { - n.setup(i) - }, - setupLightsView: function(t) { - n.setupView(i, t) - }, - pushLight: function(t) { - i.push(t) - }, - pushShadow: function(t) { - r.push(t) - } - } - } - - function Ji(t, e) { - let n = new WeakMap; - return { - get: function(i, r = 0) { - let o; - return !1 === n.has(i) ? (o = new Zi(t, e), n.set(i, []), n.get(i).push(o)) : r >= n.get(i).length ? (o = new Zi(t, e), n.get(i).push(o)) : o = n.get(i)[r], o - }, - dispose: function() { - n = new WeakMap - } - } - } - - function Ki(t) { - Jt.call(this), this.type = "MeshDepthMaterial", this.depthPacking = 3200, this.skinning = !1, this.morphTargets = !1, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.setValues(t) - } - - function $i(t) { - Jt.call(this), this.type = "MeshDistanceMaterial", this.referencePosition = new T, this.nearDistance = 1, this.farDistance = 1e3, this.skinning = !1, this.morphTargets = !1, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.fog = !1, this.setValues(t) - } - Ki.prototype = Object.create(Jt.prototype), Ki.prototype.constructor = Ki, Ki.prototype.isMeshDepthMaterial = !0, Ki.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.depthPacking = t.depthPacking, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this - }, $i.prototype = Object.create(Jt.prototype), $i.prototype.constructor = $i, $i.prototype.isMeshDistanceMaterial = !0, $i.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.referencePosition.copy(t.referencePosition), this.nearDistance = t.nearDistance, this.farDistance = t.farDistance, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this - }; - - function tr(t, e, n) { - let i = new en; - const r = new v, - o = new v, - s = new M, - a = [], - l = [], - c = {}, - h = { - 0: 1, - 1: 0, - 2: 2 - }, - u = new Xe({ - defines: { - SAMPLE_RATE: 2 / 8, - HALF_SAMPLE_RATE: 1 / 8 - }, - uniforms: { - shadow_pass: { - value: null - }, - resolution: { - value: new v - }, - radius: { - value: 4 - } - }, - vertexShader: "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}", - fragmentShader: "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}" - }), - d = u.clone(); - d.defines.HORIZONTAL_PASS = 1; - const p = new be; - p.setAttribute("position", new ee(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]), 3)); - const f = new He(p, u), - m = this; - - function g(n, i) { - const r = e.update(f); - u.uniforms.shadow_pass.value = n.map.texture, u.uniforms.resolution.value = n.mapSize, u.uniforms.radius.value = n.radius, t.setRenderTarget(n.mapPass), t.clear(), t.renderBufferDirect(i, null, r, u, f, null), d.uniforms.shadow_pass.value = n.mapPass.texture, d.uniforms.resolution.value = n.mapSize, d.uniforms.radius.value = n.radius, t.setRenderTarget(n.map), t.clear(), t.renderBufferDirect(i, null, r, d, f, null) - } - - function y(t, e, n) { - const i = t << 0 | e << 1 | n << 2; - let r = a[i]; - return void 0 === r && (r = new Ki({ - depthPacking: 3201, - morphTargets: t, - skinning: e - }), a[i] = r), r - } - - function A(t, e, n) { - const i = t << 0 | e << 1 | n << 2; - let r = l[i]; - return void 0 === r && (r = new $i({ - morphTargets: t, - skinning: e - }), l[i] = r), r - } - - function x(e, n, i, r, o, s, a) { - let l = null, - u = y, - d = e.customDepthMaterial; - if (!0 === r.isPointLight && (u = A, d = e.customDistanceMaterial), void 0 === d) { - let t = !1; - !0 === i.morphTargets && (t = n.morphAttributes && n.morphAttributes.position && n.morphAttributes.position.length > 0); - let r = !1; - !0 === e.isSkinnedMesh && (!0 === i.skinning ? r = !0 : console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:", e)); - l = u(t, r, !0 === e.isInstancedMesh) - } else l = d; - if (t.localClippingEnabled && !0 === i.clipShadows && 0 !== i.clippingPlanes.length) { - const t = l.uuid, - e = i.uuid; - let n = c[t]; - void 0 === n && (n = {}, c[t] = n); - let r = n[e]; - void 0 === r && (r = l.clone(), n[e] = r), l = r - } - return l.visible = i.visible, l.wireframe = i.wireframe, l.side = 3 === a ? null !== i.shadowSide ? i.shadowSide : i.side : null !== i.shadowSide ? i.shadowSide : h[i.side], l.clipShadows = i.clipShadows, l.clippingPlanes = i.clippingPlanes, l.clipIntersection = i.clipIntersection, l.wireframeLinewidth = i.wireframeLinewidth, l.linewidth = i.linewidth, !0 === r.isPointLight && !0 === l.isMeshDistanceMaterial && (l.referencePosition.setFromMatrixPosition(r.matrixWorld), l.nearDistance = o, l.farDistance = s), l - } - - function _(n, r, o, s, a) { - if (!1 === n.visible) return; - if (n.layers.test(r.layers) && (n.isMesh || n.isLine || n.isPoints) && (n.castShadow || n.receiveShadow && 3 === a) && (!n.frustumCulled || i.intersectsObject(n))) { - n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse, n.matrixWorld); - const i = e.update(n), - r = n.material; - if (Array.isArray(r)) { - const e = i.groups; - for (let l = 0, c = e.length; l < c; l++) { - const c = e[l], - h = r[c.materialIndex]; - if (h && h.visible) { - const e = x(n, i, h, s, o.near, o.far, a); - t.renderBufferDirect(o, null, i, e, n, c) - } - } - } else if (r.visible) { - const e = x(n, i, r, s, o.near, o.far, a); - t.renderBufferDirect(o, null, i, e, n, null) - } - } - const l = n.children; - for (let t = 0, e = l.length; t < e; t++) _(l[t], r, o, s, a) - } - this.enabled = !1, this.autoUpdate = !0, this.needsUpdate = !1, this.type = 1, this.render = function(e, a, l) { - if (!1 === m.enabled) return; - if (!1 === m.autoUpdate && !1 === m.needsUpdate) return; - if (0 === e.length) return; - const c = t.getRenderTarget(), - h = t.getActiveCubeFace(), - u = t.getActiveMipmapLevel(), - d = t.state; - d.setBlending(0), d.buffers.color.setClear(1, 1, 1, 1), d.buffers.depth.setTest(!0), d.setScissorTest(!1); - for (let c = 0, h = e.length; c < h; c++) { - const h = e[c], - u = h.shadow; - if (void 0 === u) { - console.warn("THREE.WebGLShadowMap:", h, "has no shadow."); - continue - } - if (!1 === u.autoUpdate && !1 === u.needsUpdate) continue; - r.copy(u.mapSize); - const p = u.getFrameExtents(); - if (r.multiply(p), o.copy(u.mapSize), (r.x > n || r.y > n) && (r.x > n && (o.x = Math.floor(n / p.x), r.x = o.x * p.x, u.mapSize.x = o.x), r.y > n && (o.y = Math.floor(n / p.y), r.y = o.y * p.y, u.mapSize.y = o.y)), null === u.map && !u.isPointLightShadow && 3 === this.type) { - const t = { - minFilter: 1006, - magFilter: 1006, - format: 1023 - }; - u.map = new E(r.x, r.y, t), u.map.texture.name = h.name + ".shadowMap", u.mapPass = new E(r.x, r.y, t), u.camera.updateProjectionMatrix() - } - if (null === u.map) { - const t = { - minFilter: 1003, - magFilter: 1003, - format: 1023 - }; - u.map = new E(r.x, r.y, t), u.map.texture.name = h.name + ".shadowMap", u.camera.updateProjectionMatrix() - } - t.setRenderTarget(u.map), t.clear(); - const f = u.getViewportCount(); - for (let t = 0; t < f; t++) { - const e = u.getViewport(t); - s.set(o.x * e.x, o.y * e.y, o.x * e.z, o.y * e.w), d.viewport(s), u.updateMatrices(h, t), i = u.getFrustum(), _(a, l, u.camera, h, this.type) - } - u.isPointLightShadow || 3 !== this.type || g(u, l), u.needsUpdate = !1 - } - m.needsUpdate = !1, t.setRenderTarget(c, h, u) - } - } - - function er(t, e, n) { - const i = n.isWebGL2; - const r = new function() { - let e = !1; - const n = new M; - let i = null; - const r = new M(0, 0, 0, 0); - return { - setMask: function(n) { - i === n || e || (t.colorMask(n, n, n, n), i = n) - }, - setLocked: function(t) { - e = t - }, - setClear: function(e, i, o, s, a) { - !0 === a && (e *= s, i *= s, o *= s), n.set(e, i, o, s), !1 === r.equals(n) && (t.clearColor(e, i, o, s), r.copy(n)) - }, - reset: function() { - e = !1, i = null, r.set(-1, 0, 0, 0) - } - } - }, - o = new function() { - let e = !1, - n = null, - i = null, - r = null; - return { - setTest: function(t) { - t ? O(2929) : N(2929) - }, - setMask: function(i) { - n === i || e || (t.depthMask(i), n = i) - }, - setFunc: function(e) { - if (i !== e) { - if (e) switch (e) { - case 0: - t.depthFunc(512); - break; - case 1: - t.depthFunc(519); - break; - case 2: - t.depthFunc(513); - break; - case 3: - t.depthFunc(515); - break; - case 4: - t.depthFunc(514); - break; - case 5: - t.depthFunc(518); - break; - case 6: - t.depthFunc(516); - break; - case 7: - t.depthFunc(517); - break; - default: - t.depthFunc(515) - } else t.depthFunc(515); - i = e - } - }, - setLocked: function(t) { - e = t - }, - setClear: function(e) { - r !== e && (t.clearDepth(e), r = e) - }, - reset: function() { - e = !1, n = null, i = null, r = null - } - } - }, - s = new function() { - let e = !1, - n = null, - i = null, - r = null, - o = null, - s = null, - a = null, - l = null, - c = null; - return { - setTest: function(t) { - e || (t ? O(2960) : N(2960)) - }, - setMask: function(i) { - n === i || e || (t.stencilMask(i), n = i) - }, - setFunc: function(e, n, s) { - i === e && r === n && o === s || (t.stencilFunc(e, n, s), i = e, r = n, o = s) - }, - setOp: function(e, n, i) { - s === e && a === n && l === i || (t.stencilOp(e, n, i), s = e, a = n, l = i) - }, - setLocked: function(t) { - e = t - }, - setClear: function(e) { - c !== e && (t.clearStencil(e), c = e) - }, - reset: function() { - e = !1, n = null, i = null, r = null, o = null, s = null, a = null, l = null, c = null - } - } - }; - let a = {}, - l = null, - c = null, - h = null, - u = null, - d = null, - p = null, - f = null, - m = null, - g = null, - v = !1, - y = null, - A = null, - x = null, - _ = null, - b = null; - const w = t.getParameter(35661); - let E = !1, - S = 0; - const T = t.getParameter(7938); - 1 !== T.indexOf("WebGL") ? (S = parseFloat(/^WebGL (\d)/.exec(T)[1]), E = S >= 1) : -1 !== T.indexOf("OpenGL ES") && (S = parseFloat(/^OpenGL ES (\d)/.exec(T)[1]), E = S >= 2); - let L = null, - R = {}; - const C = new M, - P = new M; - - function D(e, n, i) { - const r = new Uint8Array(4), - o = t.createTexture(); - t.bindTexture(e, o), t.texParameteri(e, 10241, 9728), t.texParameteri(e, 10240, 9728); - for (let e = 0; e < i; e++) t.texImage2D(n + e, 0, 6408, 1, 1, 0, 6408, 5121, r); - return o - } - const I = {}; - - function O(e) { - !0 !== a[e] && (t.enable(e), a[e] = !0) - } - - function N(e) { - !1 !== a[e] && (t.disable(e), a[e] = !1) - } - I[3553] = D(3553, 3553, 1), I[34067] = D(34067, 34069, 6), r.setClear(0, 0, 0, 1), o.setClear(1), s.setClear(0), O(2929), o.setFunc(3), U(!1), H(1), O(2884), z(0); - const B = { - 100: 32774, - 101: 32778, - 102: 32779 - }; - if (i) B[103] = 32775, B[104] = 32776; - else { - const t = e.get("EXT_blend_minmax"); - null !== t && (B[103] = t.MIN_EXT, B[104] = t.MAX_EXT) - } - const F = { - 200: 0, - 201: 1, - 202: 768, - 204: 770, - 210: 776, - 208: 774, - 206: 772, - 203: 769, - 205: 771, - 209: 775, - 207: 773 - }; - - function z(e, n, i, r, o, s, a, l) { - if (0 !== e) { - if (c || (O(3042), c = !0), 5 === e) o = o || n, s = s || i, a = a || r, n === u && o === f || (t.blendEquationSeparate(B[n], B[o]), u = n, f = o), i === d && r === p && s === m && a === g || (t.blendFuncSeparate(F[i], F[r], F[s], F[a]), d = i, p = r, m = s, g = a), h = e, v = null; - else if (e !== h || l !== v) { - if (100 === u && 100 === f || (t.blendEquation(32774), u = 100, f = 100), l) switch (e) { - case 1: - t.blendFuncSeparate(1, 771, 1, 771); - break; - case 2: - t.blendFunc(1, 1); - break; - case 3: - t.blendFuncSeparate(0, 0, 769, 771); - break; - case 4: - t.blendFuncSeparate(0, 768, 0, 770); - break; - default: - console.error("THREE.WebGLState: Invalid blending: ", e) - } else switch (e) { - case 1: - t.blendFuncSeparate(770, 771, 1, 771); - break; - case 2: - t.blendFunc(770, 1); - break; - case 3: - t.blendFunc(0, 769); - break; - case 4: - t.blendFunc(0, 768); - break; - default: - console.error("THREE.WebGLState: Invalid blending: ", e) - } - d = null, p = null, m = null, g = null, h = e, v = l - } - } else c && (N(3042), c = !1) - } - - function U(e) { - y !== e && (e ? t.frontFace(2304) : t.frontFace(2305), y = e) - } - - function H(e) { - 0 !== e ? (O(2884), e !== A && (1 === e ? t.cullFace(1029) : 2 === e ? t.cullFace(1028) : t.cullFace(1032))) : N(2884), A = e - } - - function G(e, n, i) { - e ? (O(32823), _ === n && b === i || (t.polygonOffset(n, i), _ = n, b = i)) : N(32823) - } - - function V(e) { - void 0 === e && (e = 33984 + w - 1), L !== e && (t.activeTexture(e), L = e) - } - return { - buffers: { - color: r, - depth: o, - stencil: s - }, - enable: O, - disable: N, - useProgram: function(e) { - return l !== e && (t.useProgram(e), l = e, !0) - }, - setBlending: z, - setMaterial: function(t, e) { - 2 === t.side ? N(2884) : O(2884); - let n = 1 === t.side; - e && (n = !n), U(n), 1 === t.blending && !1 === t.transparent ? z(0) : z(t.blending, t.blendEquation, t.blendSrc, t.blendDst, t.blendEquationAlpha, t.blendSrcAlpha, t.blendDstAlpha, t.premultipliedAlpha), o.setFunc(t.depthFunc), o.setTest(t.depthTest), o.setMask(t.depthWrite), r.setMask(t.colorWrite); - const i = t.stencilWrite; - s.setTest(i), i && (s.setMask(t.stencilWriteMask), s.setFunc(t.stencilFunc, t.stencilRef, t.stencilFuncMask), s.setOp(t.stencilFail, t.stencilZFail, t.stencilZPass)), G(t.polygonOffset, t.polygonOffsetFactor, t.polygonOffsetUnits) - }, - setFlipSided: U, - setCullFace: H, - setLineWidth: function(e) { - e !== x && (E && t.lineWidth(e), x = e) - }, - setPolygonOffset: G, - setScissorTest: function(t) { - t ? O(3089) : N(3089) - }, - activeTexture: V, - bindTexture: function(e, n) { - null === L && V(); - let i = R[L]; - void 0 === i && (i = { - type: void 0, - texture: void 0 - }, R[L] = i), i.type === e && i.texture === n || (t.bindTexture(e, n || I[e]), i.type = e, i.texture = n) - }, - unbindTexture: function() { - const e = R[L]; - void 0 !== e && void 0 !== e.type && (t.bindTexture(e.type, null), e.type = void 0, e.texture = void 0) - }, - compressedTexImage2D: function() { - try { - t.compressedTexImage2D.apply(t, arguments) - } catch (t) { - console.error("THREE.WebGLState:", t) - } - }, - texImage2D: function() { - try { - t.texImage2D.apply(t, arguments) - } catch (t) { - console.error("THREE.WebGLState:", t) - } - }, - texImage3D: function() { - try { - t.texImage3D.apply(t, arguments) - } catch (t) { - console.error("THREE.WebGLState:", t) - } - }, - scissor: function(e) { - !1 === C.equals(e) && (t.scissor(e.x, e.y, e.z, e.w), C.copy(e)) - }, - viewport: function(e) { - !1 === P.equals(e) && (t.viewport(e.x, e.y, e.z, e.w), P.copy(e)) - }, - reset: function() { - a = {}, L = null, R = {}, l = null, c = null, h = null, u = null, d = null, p = null, f = null, m = null, g = null, v = !1, y = null, A = null, x = null, _ = null, b = null, r.reset(), o.reset(), s.reset() - } - } - } - - function nr(t, e, n, i, r, o, s) { - const a = r.isWebGL2, - l = r.maxTextures, - c = r.maxCubemapSize, - h = r.maxTextureSize, - u = r.maxSamples, - d = new WeakMap; - let p, f = !1; - try { - f = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1, 1).getContext("2d") - } catch (t) {} - - function m(t, e) { - return f ? new OffscreenCanvas(t, e) : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") - } - - function v(t, e, n, i) { - let r = 1; - if ((t.width > i || t.height > i) && (r = i / Math.max(t.width, t.height)), r < 1 || !0 === e) { - if ("undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap) { - const i = e ? g.floorPowerOfTwo : Math.floor, - o = i(r * t.width), - s = i(r * t.height); - void 0 === p && (p = m(o, s)); - const a = n ? m(o, s) : p; - a.width = o, a.height = s; - return a.getContext("2d").drawImage(t, 0, 0, o, s), console.warn("THREE.WebGLRenderer: Texture has been resized from (" + t.width + "x" + t.height + ") to (" + o + "x" + s + ")."), a - } - return "data" in t && console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + t.width + "x" + t.height + ")."), t - } - return t - } - - function y(t) { - return g.isPowerOfTwo(t.width) && g.isPowerOfTwo(t.height) - } - - function A(t, e) { - return t.generateMipmaps && e && 1003 !== t.minFilter && 1006 !== t.minFilter - } - - function x(e, n, r, o) { - t.generateMipmap(e); - i.get(n).__maxMipLevel = Math.log(Math.max(r, o)) * Math.LOG2E - } - - function _(n, i, r) { - if (!1 === a) return i; - if (null !== n) { - if (void 0 !== t[n]) return t[n]; - console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + n + "'") - } - let o = i; - return 6403 === i && (5126 === r && (o = 33326), 5131 === r && (o = 33325), 5121 === r && (o = 33321)), 6407 === i && (5126 === r && (o = 34837), 5131 === r && (o = 34843), 5121 === r && (o = 32849)), 6408 === i && (5126 === r && (o = 34836), 5131 === r && (o = 34842), 5121 === r && (o = 32856)), 33325 !== o && 33326 !== o && 34842 !== o && 34836 !== o || e.get("EXT_color_buffer_float"), o - } - - function b(t) { - return 1003 === t || 1004 === t || 1005 === t ? 9728 : 9729 - } - - function w(e) { - const n = e.target; - n.removeEventListener("dispose", w), - function(e) { - const n = i.get(e); - if (void 0 === n.__webglInit) return; - t.deleteTexture(n.__webglTexture), i.remove(e) - }(n), n.isVideoTexture && d.delete(n), s.memory.textures-- - } - - function M(e) { - const n = e.target; - n.removeEventListener("dispose", M), - function(e) { - const n = i.get(e), - r = i.get(e.texture); - if (!e) return; - void 0 !== r.__webglTexture && t.deleteTexture(r.__webglTexture); - e.depthTexture && e.depthTexture.dispose(); - if (e.isWebGLCubeRenderTarget) - for (let e = 0; e < 6; e++) t.deleteFramebuffer(n.__webglFramebuffer[e]), n.__webglDepthbuffer && t.deleteRenderbuffer(n.__webglDepthbuffer[e]); - else t.deleteFramebuffer(n.__webglFramebuffer), n.__webglDepthbuffer && t.deleteRenderbuffer(n.__webglDepthbuffer), n.__webglMultisampledFramebuffer && t.deleteFramebuffer(n.__webglMultisampledFramebuffer), n.__webglColorRenderbuffer && t.deleteRenderbuffer(n.__webglColorRenderbuffer), n.__webglDepthRenderbuffer && t.deleteRenderbuffer(n.__webglDepthRenderbuffer); - i.remove(e.texture), i.remove(e) - }(n), s.memory.textures-- - } - let E = 0; - - function S(t, e) { - const r = i.get(t); - if (t.isVideoTexture && function(t) { - const e = s.render.frame; - d.get(t) !== e && (d.set(t, e), t.update()) - }(t), t.version > 0 && r.__version !== t.version) { - const n = t.image; - if (void 0 === n) console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined"); - else { - if (!1 !== n.complete) return void D(r, t, e); - console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete") - } - } - n.activeTexture(33984 + e), n.bindTexture(3553, r.__webglTexture) - } - - function T(e, r) { - const s = i.get(e); - e.version > 0 && s.__version !== e.version ? function(e, i, r) { - if (6 !== i.image.length) return; - P(e, i), n.activeTexture(33984 + r), n.bindTexture(34067, e.__webglTexture), t.pixelStorei(37440, i.flipY), t.pixelStorei(37441, i.premultiplyAlpha), t.pixelStorei(3317, i.unpackAlignment); - const s = i && (i.isCompressedTexture || i.image[0].isCompressedTexture), - l = i.image[0] && i.image[0].isDataTexture, - h = []; - for (let t = 0; t < 6; t++) h[t] = s || l ? l ? i.image[t].image : i.image[t] : v(i.image[t], !1, !0, c); - const u = h[0], - d = y(u) || a, - p = o.convert(i.format), - f = o.convert(i.type), - m = _(i.internalFormat, p, f); - let g; - if (C(34067, i, d), s) { - for (let t = 0; t < 6; t++) { - g = h[t].mipmaps; - for (let e = 0; e < g.length; e++) { - const r = g[e]; - 1023 !== i.format && 1022 !== i.format ? null !== p ? n.compressedTexImage2D(34069 + t, e, m, r.width, r.height, 0, r.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()") : n.texImage2D(34069 + t, e, m, r.width, r.height, 0, p, f, r.data) - } - } - e.__maxMipLevel = g.length - 1 - } else { - g = i.mipmaps; - for (let t = 0; t < 6; t++) - if (l) { - n.texImage2D(34069 + t, 0, m, h[t].width, h[t].height, 0, p, f, h[t].data); - for (let e = 0; e < g.length; e++) { - const i = g[e].image[t].image; - n.texImage2D(34069 + t, e + 1, m, i.width, i.height, 0, p, f, i.data) - } - } else { - n.texImage2D(34069 + t, 0, m, p, f, h[t]); - for (let e = 0; e < g.length; e++) { - const i = g[e]; - n.texImage2D(34069 + t, e + 1, m, p, f, i.image[t]) - } - } e.__maxMipLevel = g.length - } - A(i, d) && x(34067, i, u.width, u.height); - e.__version = i.version, i.onUpdate && i.onUpdate(i) - }(s, e, r) : (n.activeTexture(33984 + r), n.bindTexture(34067, s.__webglTexture)) - } - const L = { - 1e3: 10497, - 1001: 33071, - 1002: 33648 - }, - R = { - 1003: 9728, - 1004: 9984, - 1005: 9986, - 1006: 9729, - 1007: 9985, - 1008: 9987 - }; - - function C(n, o, s) { - s ? (t.texParameteri(n, 10242, L[o.wrapS]), t.texParameteri(n, 10243, L[o.wrapT]), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, L[o.wrapR]), t.texParameteri(n, 10240, R[o.magFilter]), t.texParameteri(n, 10241, R[o.minFilter])) : (t.texParameteri(n, 10242, 33071), t.texParameteri(n, 10243, 33071), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, 33071), 1001 === o.wrapS && 1001 === o.wrapT || console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."), t.texParameteri(n, 10240, b(o.magFilter)), t.texParameteri(n, 10241, b(o.minFilter)), 1003 !== o.minFilter && 1006 !== o.minFilter && console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")); - const l = e.get("EXT_texture_filter_anisotropic"); - if (l) { - if (1015 === o.type && null === e.get("OES_texture_float_linear")) return; - if (1016 === o.type && null === (a || e.get("OES_texture_half_float_linear"))) return; - (o.anisotropy > 1 || i.get(o).__currentAnisotropy) && (t.texParameterf(n, l.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(o.anisotropy, r.getMaxAnisotropy())), i.get(o).__currentAnisotropy = o.anisotropy) - } - } - - function P(e, n) { - void 0 === e.__webglInit && (e.__webglInit = !0, n.addEventListener("dispose", w), e.__webglTexture = t.createTexture(), s.memory.textures++) - } - - function D(e, i, r) { - let s = 3553; - i.isDataTexture2DArray && (s = 35866), i.isDataTexture3D && (s = 32879), P(e, i), n.activeTexture(33984 + r), n.bindTexture(s, e.__webglTexture), t.pixelStorei(37440, i.flipY), t.pixelStorei(37441, i.premultiplyAlpha), t.pixelStorei(3317, i.unpackAlignment); - const l = function(t) { - return !a && (1001 !== t.wrapS || 1001 !== t.wrapT || 1003 !== t.minFilter && 1006 !== t.minFilter) - }(i) && !1 === y(i.image), - c = v(i.image, l, !1, h), - u = y(c) || a, - d = o.convert(i.format); - let p, f = o.convert(i.type), - m = _(i.internalFormat, d, f); - C(s, i, u); - const g = i.mipmaps; - if (i.isDepthTexture) m = 6402, a ? m = 1015 === i.type ? 36012 : 1014 === i.type ? 33190 : 1020 === i.type ? 35056 : 33189 : 1015 === i.type && console.error("WebGLRenderer: Floating point depth texture requires WebGL2."), 1026 === i.format && 6402 === m && 1012 !== i.type && 1014 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."), i.type = 1012, f = o.convert(i.type)), 1027 === i.format && 6402 === m && (m = 34041, 1020 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."), i.type = 1020, f = o.convert(i.type))), n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, null); - else if (i.isDataTexture) - if (g.length > 0 && u) { - for (let t = 0, e = g.length; t < e; t++) p = g[t], n.texImage2D(3553, t, m, p.width, p.height, 0, d, f, p.data); - i.generateMipmaps = !1, e.__maxMipLevel = g.length - 1 - } else n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, c.data), e.__maxMipLevel = 0; - else if (i.isCompressedTexture) { - for (let t = 0, e = g.length; t < e; t++) p = g[t], 1023 !== i.format && 1022 !== i.format ? null !== d ? n.compressedTexImage2D(3553, t, m, p.width, p.height, 0, p.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : n.texImage2D(3553, t, m, p.width, p.height, 0, d, f, p.data); - e.__maxMipLevel = g.length - 1 - } else if (i.isDataTexture2DArray) n.texImage3D(35866, 0, m, c.width, c.height, c.depth, 0, d, f, c.data), e.__maxMipLevel = 0; - else if (i.isDataTexture3D) n.texImage3D(32879, 0, m, c.width, c.height, c.depth, 0, d, f, c.data), e.__maxMipLevel = 0; - else if (g.length > 0 && u) { - for (let t = 0, e = g.length; t < e; t++) p = g[t], n.texImage2D(3553, t, m, d, f, p); - i.generateMipmaps = !1, e.__maxMipLevel = g.length - 1 - } else n.texImage2D(3553, 0, m, d, f, c), e.__maxMipLevel = 0; - A(i, u) && x(s, i, c.width, c.height), e.__version = i.version, i.onUpdate && i.onUpdate(i) - } - - function I(e, r, s, a) { - const l = o.convert(r.texture.format), - c = o.convert(r.texture.type), - h = _(r.texture.internalFormat, l, c); - n.texImage2D(a, 0, h, r.width, r.height, 0, l, c, null), t.bindFramebuffer(36160, e), t.framebufferTexture2D(36160, s, a, i.get(r.texture).__webglTexture, 0), t.bindFramebuffer(36160, null) - } - - function O(e, n, i) { - if (t.bindRenderbuffer(36161, e), n.depthBuffer && !n.stencilBuffer) { - let r = 33189; - if (i) { - const e = n.depthTexture; - e && e.isDepthTexture && (1015 === e.type ? r = 36012 : 1014 === e.type && (r = 33190)); - const i = B(n); - t.renderbufferStorageMultisample(36161, i, r, n.width, n.height) - } else t.renderbufferStorage(36161, r, n.width, n.height); - t.framebufferRenderbuffer(36160, 36096, 36161, e) - } else if (n.depthBuffer && n.stencilBuffer) { - if (i) { - const e = B(n); - t.renderbufferStorageMultisample(36161, e, 35056, n.width, n.height) - } else t.renderbufferStorage(36161, 34041, n.width, n.height); - t.framebufferRenderbuffer(36160, 33306, 36161, e) - } else { - const e = o.convert(n.texture.format), - r = o.convert(n.texture.type), - s = _(n.texture.internalFormat, e, r); - if (i) { - const e = B(n); - t.renderbufferStorageMultisample(36161, e, s, n.width, n.height) - } else t.renderbufferStorage(36161, s, n.width, n.height) - } - t.bindRenderbuffer(36161, null) - } - - function N(e) { - const n = i.get(e), - r = !0 === e.isWebGLCubeRenderTarget; - if (e.depthTexture) { - if (r) throw new Error("target.depthTexture not supported in Cube render targets"); - ! function(e, n) { - if (n && n.isWebGLCubeRenderTarget) throw new Error("Depth Texture with cube render targets is not supported"); - if (t.bindFramebuffer(36160, e), !n.depthTexture || !n.depthTexture.isDepthTexture) throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); - i.get(n.depthTexture).__webglTexture && n.depthTexture.image.width === n.width && n.depthTexture.image.height === n.height || (n.depthTexture.image.width = n.width, n.depthTexture.image.height = n.height, n.depthTexture.needsUpdate = !0), S(n.depthTexture, 0); - const r = i.get(n.depthTexture).__webglTexture; - if (1026 === n.depthTexture.format) t.framebufferTexture2D(36160, 36096, 3553, r, 0); - else { - if (1027 !== n.depthTexture.format) throw new Error("Unknown depthTexture format"); - t.framebufferTexture2D(36160, 33306, 3553, r, 0) - } - }(n.__webglFramebuffer, e) - } else if (r) { - n.__webglDepthbuffer = []; - for (let i = 0; i < 6; i++) t.bindFramebuffer(36160, n.__webglFramebuffer[i]), n.__webglDepthbuffer[i] = t.createRenderbuffer(), O(n.__webglDepthbuffer[i], e, !1) - } else t.bindFramebuffer(36160, n.__webglFramebuffer), n.__webglDepthbuffer = t.createRenderbuffer(), O(n.__webglDepthbuffer, e, !1); - t.bindFramebuffer(36160, null) - } - - function B(t) { - return a && t.isWebGLMultisampleRenderTarget ? Math.min(u, t.samples) : 0 - } - let F = !1, - z = !1; - this.allocateTextureUnit = function() { - const t = E; - return t >= l && console.warn("THREE.WebGLTextures: Trying to use " + t + " texture units while this GPU supports only " + l), E += 1, t - }, this.resetTextureUnits = function() { - E = 0 - }, this.setTexture2D = S, this.setTexture2DArray = function(t, e) { - const r = i.get(t); - t.version > 0 && r.__version !== t.version ? D(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(35866, r.__webglTexture)) - }, this.setTexture3D = function(t, e) { - const r = i.get(t); - t.version > 0 && r.__version !== t.version ? D(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(32879, r.__webglTexture)) - }, this.setTextureCube = T, this.setupRenderTarget = function(e) { - const r = i.get(e), - l = i.get(e.texture); - e.addEventListener("dispose", M), l.__webglTexture = t.createTexture(), s.memory.textures++; - const c = !0 === e.isWebGLCubeRenderTarget, - h = !0 === e.isWebGLMultisampleRenderTarget, - u = y(e) || a; - if (!a || 1022 !== e.texture.format || 1015 !== e.texture.type && 1016 !== e.texture.type || (e.texture.format = 1023, console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")), c) { - r.__webglFramebuffer = []; - for (let e = 0; e < 6; e++) r.__webglFramebuffer[e] = t.createFramebuffer() - } else if (r.__webglFramebuffer = t.createFramebuffer(), h) - if (a) { - r.__webglMultisampledFramebuffer = t.createFramebuffer(), r.__webglColorRenderbuffer = t.createRenderbuffer(), t.bindRenderbuffer(36161, r.__webglColorRenderbuffer); - const n = o.convert(e.texture.format), - i = o.convert(e.texture.type), - s = _(e.texture.internalFormat, n, i), - a = B(e); - t.renderbufferStorageMultisample(36161, a, s, e.width, e.height), t.bindFramebuffer(36160, r.__webglMultisampledFramebuffer), t.framebufferRenderbuffer(36160, 36064, 36161, r.__webglColorRenderbuffer), t.bindRenderbuffer(36161, null), e.depthBuffer && (r.__webglDepthRenderbuffer = t.createRenderbuffer(), O(r.__webglDepthRenderbuffer, e, !0)), t.bindFramebuffer(36160, null) - } else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2."); - if (c) { - n.bindTexture(34067, l.__webglTexture), C(34067, e.texture, u); - for (let t = 0; t < 6; t++) I(r.__webglFramebuffer[t], e, 36064, 34069 + t); - A(e.texture, u) && x(34067, e.texture, e.width, e.height), n.bindTexture(34067, null) - } else n.bindTexture(3553, l.__webglTexture), C(3553, e.texture, u), I(r.__webglFramebuffer, e, 36064, 3553), A(e.texture, u) && x(3553, e.texture, e.width, e.height), n.bindTexture(3553, null); - e.depthBuffer && N(e) - }, this.updateRenderTargetMipmap = function(t) { - const e = t.texture; - if (A(e, y(t) || a)) { - const r = t.isWebGLCubeRenderTarget ? 34067 : 3553, - o = i.get(e).__webglTexture; - n.bindTexture(r, o), x(r, e, t.width, t.height), n.bindTexture(r, null) - } - }, this.updateMultisampleRenderTarget = function(e) { - if (e.isWebGLMultisampleRenderTarget) - if (a) { - const n = i.get(e); - t.bindFramebuffer(36008, n.__webglMultisampledFramebuffer), t.bindFramebuffer(36009, n.__webglFramebuffer); - const r = e.width, - o = e.height; - let s = 16384; - e.depthBuffer && (s |= 256), e.stencilBuffer && (s |= 1024), t.blitFramebuffer(0, 0, r, o, 0, 0, r, o, s, 9728), t.bindFramebuffer(36160, n.__webglMultisampledFramebuffer) - } else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.") - }, this.safeSetTexture2D = function(t, e) { - t && t.isWebGLRenderTarget && (!1 === F && (console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."), F = !0), t = t.texture), S(t, e) - }, this.safeSetTextureCube = function(t, e) { - t && t.isWebGLCubeRenderTarget && (!1 === z && (console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), z = !0), t = t.texture), T(t, e) - } - } - - function ir(t, e, n) { - const i = n.isWebGL2; - return { - convert: function(t) { - let n; - if (1009 === t) return 5121; - if (1017 === t) return 32819; - if (1018 === t) return 32820; - if (1019 === t) return 33635; - if (1010 === t) return 5120; - if (1011 === t) return 5122; - if (1012 === t) return 5123; - if (1013 === t) return 5124; - if (1014 === t) return 5125; - if (1015 === t) return 5126; - if (1016 === t) return i ? 5131 : (n = e.get("OES_texture_half_float"), null !== n ? n.HALF_FLOAT_OES : null); - if (1021 === t) return 6406; - if (1022 === t) return 6407; - if (1023 === t) return 6408; - if (1024 === t) return 6409; - if (1025 === t) return 6410; - if (1026 === t) return 6402; - if (1027 === t) return 34041; - if (1028 === t) return 6403; - if (1029 === t) return 36244; - if (1030 === t) return 33319; - if (1031 === t) return 33320; - if (1032 === t) return 36248; - if (1033 === t) return 36249; - if (33776 === t || 33777 === t || 33778 === t || 33779 === t) { - if (n = e.get("WEBGL_compressed_texture_s3tc"), null === n) return null; - if (33776 === t) return n.COMPRESSED_RGB_S3TC_DXT1_EXT; - if (33777 === t) return n.COMPRESSED_RGBA_S3TC_DXT1_EXT; - if (33778 === t) return n.COMPRESSED_RGBA_S3TC_DXT3_EXT; - if (33779 === t) return n.COMPRESSED_RGBA_S3TC_DXT5_EXT - } - if (35840 === t || 35841 === t || 35842 === t || 35843 === t) { - if (n = e.get("WEBGL_compressed_texture_pvrtc"), null === n) return null; - if (35840 === t) return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; - if (35841 === t) return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; - if (35842 === t) return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; - if (35843 === t) return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG - } - if (36196 === t) return n = e.get("WEBGL_compressed_texture_etc1"), null !== n ? n.COMPRESSED_RGB_ETC1_WEBGL : null; - if ((37492 === t || 37496 === t) && (n = e.get("WEBGL_compressed_texture_etc"), null !== n)) { - if (37492 === t) return n.COMPRESSED_RGB8_ETC2; - if (37496 === t) return n.COMPRESSED_RGBA8_ETC2_EAC - } - return 37808 === t || 37809 === t || 37810 === t || 37811 === t || 37812 === t || 37813 === t || 37814 === t || 37815 === t || 37816 === t || 37817 === t || 37818 === t || 37819 === t || 37820 === t || 37821 === t || 37840 === t || 37841 === t || 37842 === t || 37843 === t || 37844 === t || 37845 === t || 37846 === t || 37847 === t || 37848 === t || 37849 === t || 37850 === t || 37851 === t || 37852 === t || 37853 === t ? (n = e.get("WEBGL_compressed_texture_astc"), null !== n ? t : null) : 36492 === t ? (n = e.get("EXT_texture_compression_bptc"), null !== n ? t : null) : 1020 === t ? i ? 34042 : (n = e.get("WEBGL_depth_texture"), null !== n ? n.UNSIGNED_INT_24_8_WEBGL : null) : void 0 - } - } - } - - function rr(t = []) { - Ye.call(this), this.cameras = t - } - - function or() { - St.call(this), this.type = "Group" - } - - function sr() { - this._targetRay = null, this._grip = null, this._hand = null - } - - function ar(t, e) { - const n = this; - let i = null, - r = 1, - o = null, - s = "local-floor", - a = null; - const l = [], - c = new Map, - h = new Ye; - h.layers.enable(1), h.viewport = new M; - const u = new Ye; - u.layers.enable(2), u.viewport = new M; - const d = [h, u], - p = new rr; - p.layers.enable(1), p.layers.enable(2); - let f = null, - m = null; - - function g(t) { - const e = c.get(t.inputSource); - e && e.dispatchEvent({ - type: t.type, - data: t.inputSource - }) - } - - function v() { - c.forEach((function(t, e) { - t.disconnect(e) - })), c.clear(), f = null, m = null, t.setFramebuffer(null), t.setRenderTarget(t.getRenderTarget()), w.stop(), n.isPresenting = !1, n.dispatchEvent({ - type: "sessionend" - }) - } - - function y(t) { - const e = i.inputSources; - for (let t = 0; t < l.length; t++) c.set(e[t], l[t]); - for (let e = 0; e < t.removed.length; e++) { - const n = t.removed[e], - i = c.get(n); - i && (i.dispatchEvent({ - type: "disconnected", - data: n - }), c.delete(n)) - } - for (let e = 0; e < t.added.length; e++) { - const n = t.added[e], - i = c.get(n); - i && i.dispatchEvent({ - type: "connected", - data: n - }) - } - } - this.enabled = !1, this.isPresenting = !1, this.getController = function(t) { - let e = l[t]; - return void 0 === e && (e = new sr, l[t] = e), e.getTargetRaySpace() - }, this.getControllerGrip = function(t) { - let e = l[t]; - return void 0 === e && (e = new sr, l[t] = e), e.getGripSpace() - }, this.getHand = function(t) { - let e = l[t]; - return void 0 === e && (e = new sr, l[t] = e), e.getHandSpace() - }, this.setFramebufferScaleFactor = function(t) { - r = t, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.") - }, this.setReferenceSpaceType = function(t) { - s = t, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.") - }, this.getReferenceSpace = function() { - return o - }, this.getSession = function() { - return i - }, this.setSession = async function(t) { - if (i = t, null !== i) { - i.addEventListener("select", g), i.addEventListener("selectstart", g), i.addEventListener("selectend", g), i.addEventListener("squeeze", g), i.addEventListener("squeezestart", g), i.addEventListener("squeezeend", g), i.addEventListener("end", v), i.addEventListener("inputsourceschange", y); - const t = e.getContextAttributes(); - !0 !== t.xrCompatible && await e.makeXRCompatible(); - const a = { - antialias: t.antialias, - alpha: t.alpha, - depth: t.depth, - stencil: t.stencil, - framebufferScaleFactor: r - }, - l = new XRWebGLLayer(i, e, a); - i.updateRenderState({ - baseLayer: l - }), o = await i.requestReferenceSpace(s), w.setContext(i), w.start(), n.isPresenting = !0, n.dispatchEvent({ - type: "sessionstart" - }) - } - }; - const A = new T, - x = new T; - - function _(t, e) { - null === e ? t.matrixWorld.copy(t.matrix) : t.matrixWorld.multiplyMatrices(e.matrixWorld, t.matrix), t.matrixWorldInverse.copy(t.matrixWorld).invert() - } - this.getCamera = function(t) { - p.near = u.near = h.near = t.near, p.far = u.far = h.far = t.far, f === p.near && m === p.far || (i.updateRenderState({ - depthNear: p.near, - depthFar: p.far - }), f = p.near, m = p.far); - const e = t.parent, - n = p.cameras; - _(p, e); - for (let t = 0; t < n.length; t++) _(n[t], e); - t.matrixWorld.copy(p.matrixWorld), t.matrix.copy(p.matrix), t.matrix.decompose(t.position, t.quaternion, t.scale); - const r = t.children; - for (let t = 0, e = r.length; t < e; t++) r[t].updateMatrixWorld(!0); - return 2 === n.length ? function(t, e, n) { - A.setFromMatrixPosition(e.matrixWorld), x.setFromMatrixPosition(n.matrixWorld); - const i = A.distanceTo(x), - r = e.projectionMatrix.elements, - o = n.projectionMatrix.elements, - s = r[14] / (r[10] - 1), - a = r[14] / (r[10] + 1), - l = (r[9] + 1) / r[5], - c = (r[9] - 1) / r[5], - h = (r[8] - 1) / r[0], - u = (o[8] + 1) / o[0], - d = s * h, - p = s * u, - f = i / (-h + u), - m = f * -h; - e.matrixWorld.decompose(t.position, t.quaternion, t.scale), t.translateX(m), t.translateZ(f), t.matrixWorld.compose(t.position, t.quaternion, t.scale), t.matrixWorldInverse.copy(t.matrixWorld).invert(); - const g = s + f, - v = a + f, - y = d - m, - _ = p + (i - m), - b = l * a / v * g, - w = c * a / v * g; - t.projectionMatrix.makePerspective(y, _, b, w, g, v) - }(p, h, u) : p.projectionMatrix.copy(h.projectionMatrix), p - }; - let b = null; - const w = new nn; - w.setAnimationLoop((function(e, n) { - if (a = n.getViewerPose(o), null !== a) { - const e = a.views, - n = i.renderState.baseLayer; - t.setFramebuffer(n.framebuffer); - let r = !1; - e.length !== p.cameras.length && (p.cameras.length = 0, r = !0); - for (let t = 0; t < e.length; t++) { - const i = e[t], - o = n.getViewport(i), - s = d[t]; - s.matrix.fromArray(i.transform.matrix), s.projectionMatrix.fromArray(i.projectionMatrix), s.viewport.set(o.x, o.y, o.width, o.height), 0 === t && p.matrix.copy(s.matrix), !0 === r && p.cameras.push(s) - } - } - const r = i.inputSources; - for (let t = 0; t < l.length; t++) { - const e = l[t], - i = r[t]; - e.update(i, n, o) - } - b && b(e, n) - })), this.setAnimationLoop = function(t) { - b = t - }, this.dispose = function() {} - } - - function lr(t) { - function e(e, n) { - e.opacity.value = n.opacity, n.color && e.diffuse.value.copy(n.color), n.emissive && e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity), n.map && (e.map.value = n.map), n.alphaMap && (e.alphaMap.value = n.alphaMap), n.specularMap && (e.specularMap.value = n.specularMap); - const i = t.get(n).envMap; - if (i) { - e.envMap.value = i, e.flipEnvMap.value = i.isCubeTexture && i._needsFlipEnvMap ? -1 : 1, e.reflectivity.value = n.reflectivity, e.refractionRatio.value = n.refractionRatio; - const r = t.get(i).__maxMipLevel; - void 0 !== r && (e.maxMipLevel.value = r) - } - let r, o; - n.lightMap && (e.lightMap.value = n.lightMap, e.lightMapIntensity.value = n.lightMapIntensity), n.aoMap && (e.aoMap.value = n.aoMap, e.aoMapIntensity.value = n.aoMapIntensity), n.map ? r = n.map : n.specularMap ? r = n.specularMap : n.displacementMap ? r = n.displacementMap : n.normalMap ? r = n.normalMap : n.bumpMap ? r = n.bumpMap : n.roughnessMap ? r = n.roughnessMap : n.metalnessMap ? r = n.metalnessMap : n.alphaMap ? r = n.alphaMap : n.emissiveMap ? r = n.emissiveMap : n.clearcoatMap ? r = n.clearcoatMap : n.clearcoatNormalMap ? r = n.clearcoatNormalMap : n.clearcoatRoughnessMap && (r = n.clearcoatRoughnessMap), void 0 !== r && (r.isWebGLRenderTarget && (r = r.texture), !0 === r.matrixAutoUpdate && r.updateMatrix(), e.uvTransform.value.copy(r.matrix)), n.aoMap ? o = n.aoMap : n.lightMap && (o = n.lightMap), void 0 !== o && (o.isWebGLRenderTarget && (o = o.texture), !0 === o.matrixAutoUpdate && o.updateMatrix(), e.uv2Transform.value.copy(o.matrix)) - } - - function n(e, n) { - e.roughness.value = n.roughness, e.metalness.value = n.metalness, n.roughnessMap && (e.roughnessMap.value = n.roughnessMap), n.metalnessMap && (e.metalnessMap.value = n.metalnessMap), n.emissiveMap && (e.emissiveMap.value = n.emissiveMap), n.bumpMap && (e.bumpMap.value = n.bumpMap, e.bumpScale.value = n.bumpScale, 1 === n.side && (e.bumpScale.value *= -1)), n.normalMap && (e.normalMap.value = n.normalMap, e.normalScale.value.copy(n.normalScale), 1 === n.side && e.normalScale.value.negate()), n.displacementMap && (e.displacementMap.value = n.displacementMap, e.displacementScale.value = n.displacementScale, e.displacementBias.value = n.displacementBias); - t.get(n).envMap && (e.envMapIntensity.value = n.envMapIntensity) - } - return { - refreshFogUniforms: function(t, e) { - t.fogColor.value.copy(e.color), e.isFog ? (t.fogNear.value = e.near, t.fogFar.value = e.far) : e.isFogExp2 && (t.fogDensity.value = e.density) - }, - refreshMaterialUniforms: function(t, i, r, o) { - i.isMeshBasicMaterial ? e(t, i) : i.isMeshLambertMaterial ? (e(t, i), function(t, e) { - e.emissiveMap && (t.emissiveMap.value = e.emissiveMap) - }(t, i)) : i.isMeshToonMaterial ? (e(t, i), function(t, e) { - e.gradientMap && (t.gradientMap.value = e.gradientMap); - e.emissiveMap && (t.emissiveMap.value = e.emissiveMap); - e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); - e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) - }(t, i)) : i.isMeshPhongMaterial ? (e(t, i), function(t, e) { - t.specular.value.copy(e.specular), t.shininess.value = Math.max(e.shininess, 1e-4), e.emissiveMap && (t.emissiveMap.value = e.emissiveMap); - e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); - e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) - }(t, i)) : i.isMeshStandardMaterial ? (e(t, i), i.isMeshPhysicalMaterial ? function(t, e) { - n(t, e), t.reflectivity.value = e.reflectivity, t.clearcoat.value = e.clearcoat, t.clearcoatRoughness.value = e.clearcoatRoughness, e.sheen && t.sheen.value.copy(e.sheen); - e.clearcoatMap && (t.clearcoatMap.value = e.clearcoatMap); - e.clearcoatRoughnessMap && (t.clearcoatRoughnessMap.value = e.clearcoatRoughnessMap); - e.clearcoatNormalMap && (t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale), t.clearcoatNormalMap.value = e.clearcoatNormalMap, 1 === e.side && t.clearcoatNormalScale.value.negate()); - t.transmission.value = e.transmission, e.transmissionMap && (t.transmissionMap.value = e.transmissionMap) - }(t, i) : n(t, i)) : i.isMeshMatcapMaterial ? (e(t, i), function(t, e) { - e.matcap && (t.matcap.value = e.matcap); - e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); - e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) - }(t, i)) : i.isMeshDepthMaterial ? (e(t, i), function(t, e) { - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) - }(t, i)) : i.isMeshDistanceMaterial ? (e(t, i), function(t, e) { - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias); - t.referencePosition.value.copy(e.referencePosition), t.nearDistance.value = e.nearDistance, t.farDistance.value = e.farDistance - }(t, i)) : i.isMeshNormalMaterial ? (e(t, i), function(t, e) { - e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); - e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) - }(t, i)) : i.isLineBasicMaterial ? (function(t, e) { - t.diffuse.value.copy(e.color), t.opacity.value = e.opacity - }(t, i), i.isLineDashedMaterial && function(t, e) { - t.dashSize.value = e.dashSize, t.totalSize.value = e.dashSize + e.gapSize, t.scale.value = e.scale - }(t, i)) : i.isPointsMaterial ? function(t, e, n, i) { - t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.size.value = e.size * n, t.scale.value = .5 * i, e.map && (t.map.value = e.map); - e.alphaMap && (t.alphaMap.value = e.alphaMap); - let r; - e.map ? r = e.map : e.alphaMap && (r = e.alphaMap); - void 0 !== r && (!0 === r.matrixAutoUpdate && r.updateMatrix(), t.uvTransform.value.copy(r.matrix)) - }(t, i, r, o) : i.isSpriteMaterial ? function(t, e) { - t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.rotation.value = e.rotation, e.map && (t.map.value = e.map); - e.alphaMap && (t.alphaMap.value = e.alphaMap); - let n; - e.map ? n = e.map : e.alphaMap && (n = e.alphaMap); - void 0 !== n && (!0 === n.matrixAutoUpdate && n.updateMatrix(), t.uvTransform.value.copy(n.matrix)) - }(t, i) : i.isShadowMaterial ? (t.color.value.copy(i.color), t.opacity.value = i.opacity) : i.isShaderMaterial && (i.uniformsNeedUpdate = !1) - } - } - } - - function cr(t) { - const e = void 0 !== (t = t || {}).canvas ? t.canvas : function() { - const t = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); - return t.style.display = "block", t - }(), - n = void 0 !== t.context ? t.context : null, - i = void 0 !== t.alpha && t.alpha, - r = void 0 === t.depth || t.depth, - o = void 0 === t.stencil || t.stencil, - s = void 0 !== t.antialias && t.antialias, - a = void 0 === t.premultipliedAlpha || t.premultipliedAlpha, - l = void 0 !== t.preserveDrawingBuffer && t.preserveDrawingBuffer, - c = void 0 !== t.powerPreference ? t.powerPreference : "default", - h = void 0 !== t.failIfMajorPerformanceCaveat && t.failIfMajorPerformanceCaveat; - let u = null, - d = null; - const p = []; - this.domElement = e, this.debug = { - checkShaderErrors: !0 - }, this.autoClear = !0, this.autoClearColor = !0, this.autoClearDepth = !0, this.autoClearStencil = !0, this.sortObjects = !0, this.clippingPlanes = [], this.localClippingEnabled = !1, this.gammaFactor = 2, this.outputEncoding = 3e3, this.physicallyCorrectLights = !1, this.toneMapping = 0, this.toneMappingExposure = 1, this.maxMorphTargets = 8, this.maxMorphNormals = 4; - const f = this; - let m = !1, - y = null, - A = 0, - x = 0, - _ = null, - b = null, - w = -1, - E = null; - const S = new M, - L = new M; - let R = null, - C = e.width, - P = e.height, - D = 1, - I = null, - O = null; - const N = new M(0, 0, C, P), - B = new M(0, 0, C, P); - let F = !1; - const z = new en; - let U = !1, - H = !1; - const G = new et, - V = new T, - k = { - background: null, - fog: null, - environment: null, - overrideMaterial: null, - isScene: !0 - }; - - function W() { - return null === _ ? D : 1 - } - let j, X, q, Y, Q, Z, J, K, $, tt, nt, it, rt, ot, st, at, lt, ct, ht, ut, dt, pt = n; - - function ft(t, n) { - for (let i = 0; i < t.length; i++) { - const r = t[i], - o = e.getContext(r, n); - if (null !== o) return o - } - return null - } - try { - const t = { - alpha: i, - depth: r, - stencil: o, - antialias: s, - premultipliedAlpha: a, - preserveDrawingBuffer: l, - powerPreference: c, - failIfMajorPerformanceCaveat: h - }; - if (e.addEventListener("webglcontextlost", yt, !1), e.addEventListener("webglcontextrestored", At, !1), null === pt) { - const e = ["webgl2", "webgl", "experimental-webgl"]; - if (!0 === f.isWebGL1Renderer && e.shift(), pt = ft(e, t), null === pt) throw ft(e) ? new Error("Error creating WebGL context with your selected attributes.") : new Error("Error creating WebGL context.") - } - void 0 === pt.getShaderPrecisionFormat && (pt.getShaderPrecisionFormat = function() { - return { - rangeMin: 1, - rangeMax: 1, - precision: 1 - } - }) - } catch (t) { - throw console.error("THREE.WebGLRenderer: " + t.message), t - } - - function mt() { - j = new mn(pt), X = new dn(pt, j, t), j.init(X), ut = new ir(pt, j, X), q = new er(pt, j, X), q.scissor(L.copy(B).multiplyScalar(D).floor()), q.viewport(S.copy(N).multiplyScalar(D).floor()), Y = new yn(pt), Q = new Gi, Z = new nr(pt, j, q, Q, X, ut, Y), J = new fn(f), K = new rn(pt, X), dt = new hn(pt, j, K, X), $ = new gn(pt, K, Y, dt), tt = new bn(pt, $, K, Y), lt = new _n(pt), st = new pn(Q), nt = new Hi(f, J, j, X, dt, st), it = new lr(Q), rt = new ji(Q), ot = new Ji(j, X), at = new cn(f, J, q, tt, a), ct = new un(pt, j, Y, X), ht = new vn(pt, j, Y, X), Y.programs = nt.programs, f.capabilities = X, f.extensions = j, f.properties = Q, f.renderLists = rt, f.state = q, f.info = Y - } - mt(); - const gt = new ar(f, pt); - this.xr = gt; - const vt = new tr(f, tt, X.maxTextureSize); - - function yt(t) { - t.preventDefault(), console.log("THREE.WebGLRenderer: Context Lost."), m = !0 - } - - function At() { - console.log("THREE.WebGLRenderer: Context Restored."), m = !1, mt() - } - - function xt(t) { - const e = t.target; - e.removeEventListener("dispose", xt), - function(t) { - _t(t), Q.remove(t) - }(e) - } - - function _t(t) { - const e = Q.get(t).program; - void 0 !== e && nt.releaseProgram(e) - } - this.shadowMap = vt, this.getContext = function() { - return pt - }, this.getContextAttributes = function() { - return pt.getContextAttributes() - }, this.forceContextLoss = function() { - const t = j.get("WEBGL_lose_context"); - t && t.loseContext() - }, this.forceContextRestore = function() { - const t = j.get("WEBGL_lose_context"); - t && t.restoreContext() - }, this.getPixelRatio = function() { - return D - }, this.setPixelRatio = function(t) { - void 0 !== t && (D = t, this.setSize(C, P, !1)) - }, this.getSize = function(t) { - return void 0 === t && (console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"), t = new v), t.set(C, P) - }, this.setSize = function(t, n, i) { - gt.isPresenting ? console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.") : (C = t, P = n, e.width = Math.floor(t * D), e.height = Math.floor(n * D), !1 !== i && (e.style.width = t + "px", e.style.height = n + "px"), this.setViewport(0, 0, t, n)) - }, this.getDrawingBufferSize = function(t) { - return void 0 === t && (console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"), t = new v), t.set(C * D, P * D).floor() - }, this.setDrawingBufferSize = function(t, n, i) { - C = t, P = n, D = i, e.width = Math.floor(t * i), e.height = Math.floor(n * i), this.setViewport(0, 0, t, n) - }, this.getCurrentViewport = function(t) { - return void 0 === t && (console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"), t = new M), t.copy(S) - }, this.getViewport = function(t) { - return t.copy(N) - }, this.setViewport = function(t, e, n, i) { - t.isVector4 ? N.set(t.x, t.y, t.z, t.w) : N.set(t, e, n, i), q.viewport(S.copy(N).multiplyScalar(D).floor()) - }, this.getScissor = function(t) { - return t.copy(B) - }, this.setScissor = function(t, e, n, i) { - t.isVector4 ? B.set(t.x, t.y, t.z, t.w) : B.set(t, e, n, i), q.scissor(L.copy(B).multiplyScalar(D).floor()) - }, this.getScissorTest = function() { - return F - }, this.setScissorTest = function(t) { - q.setScissorTest(F = t) - }, this.setOpaqueSort = function(t) { - I = t - }, this.setTransparentSort = function(t) { - O = t - }, this.getClearColor = function(t) { - return void 0 === t && (console.warn("WebGLRenderer: .getClearColor() now requires a Color as an argument"), t = new Yt), t.copy(at.getClearColor()) - }, this.setClearColor = function() { - at.setClearColor.apply(at, arguments) - }, this.getClearAlpha = function() { - return at.getClearAlpha() - }, this.setClearAlpha = function() { - at.setClearAlpha.apply(at, arguments) - }, this.clear = function(t, e, n) { - let i = 0; - (void 0 === t || t) && (i |= 16384), (void 0 === e || e) && (i |= 256), (void 0 === n || n) && (i |= 1024), pt.clear(i) - }, 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.dispose = function() { - e.removeEventListener("webglcontextlost", yt, !1), e.removeEventListener("webglcontextrestored", At, !1), rt.dispose(), ot.dispose(), Q.dispose(), J.dispose(), tt.dispose(), dt.dispose(), gt.dispose(), wt.stop() - }, this.renderBufferImmediate = function(t, e) { - dt.initAttributes(); - const n = Q.get(t); - t.hasPositions && !n.position && (n.position = pt.createBuffer()), t.hasNormals && !n.normal && (n.normal = pt.createBuffer()), t.hasUvs && !n.uv && (n.uv = pt.createBuffer()), t.hasColors && !n.color && (n.color = pt.createBuffer()); - const i = e.getAttributes(); - t.hasPositions && (pt.bindBuffer(34962, n.position), pt.bufferData(34962, t.positionArray, 35048), dt.enableAttribute(i.position), pt.vertexAttribPointer(i.position, 3, 5126, !1, 0, 0)), t.hasNormals && (pt.bindBuffer(34962, n.normal), pt.bufferData(34962, t.normalArray, 35048), dt.enableAttribute(i.normal), pt.vertexAttribPointer(i.normal, 3, 5126, !1, 0, 0)), t.hasUvs && (pt.bindBuffer(34962, n.uv), pt.bufferData(34962, t.uvArray, 35048), dt.enableAttribute(i.uv), pt.vertexAttribPointer(i.uv, 2, 5126, !1, 0, 0)), t.hasColors && (pt.bindBuffer(34962, n.color), pt.bufferData(34962, t.colorArray, 35048), dt.enableAttribute(i.color), pt.vertexAttribPointer(i.color, 3, 5126, !1, 0, 0)), dt.disableUnusedAttributes(), pt.drawArrays(4, 0, t.count), t.count = 0 - }, this.renderBufferDirect = function(t, e, n, i, r, o) { - null === e && (e = k); - const s = r.isMesh && r.matrixWorld.determinant() < 0, - a = Lt(t, e, i, r); - q.setMaterial(i, s); - let l = n.index; - const c = n.attributes.position; - if (null === l) { - if (void 0 === c || 0 === c.count) return - } else if (0 === l.count) return; - let h, u = 1; - !0 === i.wireframe && (l = $.getWireframeAttribute(n), u = 2), (i.morphTargets || i.morphNormals) && lt.update(r, n, i, a), dt.setup(r, i, a, n, l); - let d = ct; - null !== l && (h = K.get(l), d = ht, d.setIndex(h)); - const p = null !== l ? l.count : c.count, - f = n.drawRange.start * u, - m = n.drawRange.count * u, - g = null !== o ? o.start * u : 0, - v = null !== o ? o.count * u : 1 / 0, - y = Math.max(f, g), - A = Math.min(p, f + m, g + v) - 1, - x = Math.max(0, A - y + 1); - if (0 !== x) { - if (r.isMesh) !0 === i.wireframe ? (q.setLineWidth(i.wireframeLinewidth * W()), d.setMode(1)) : d.setMode(4); - else if (r.isLine) { - let t = i.linewidth; - void 0 === t && (t = 1), q.setLineWidth(t * W()), r.isLineSegments ? d.setMode(1) : r.isLineLoop ? d.setMode(2) : d.setMode(3) - } else r.isPoints ? d.setMode(0) : r.isSprite && d.setMode(4); - if (r.isInstancedMesh) d.renderInstances(y, x, r.count); - else if (n.isInstancedBufferGeometry) { - const t = Math.min(n.instanceCount, n._maxInstanceCount); - d.renderInstances(y, x, t) - } else d.render(y, x) - } - }, this.compile = function(t, e) { - d = ot.get(t), d.init(), t.traverseVisible((function(t) { - t.isLight && t.layers.test(e.layers) && (d.pushLight(t), t.castShadow && d.pushShadow(t)) - })), d.setupLights(); - const n = new WeakMap; - t.traverse((function(e) { - const i = e.material; - if (i) - if (Array.isArray(i)) - for (let r = 0; r < i.length; r++) { - const o = i[r]; - !1 === n.has(o) && (Tt(o, t, e), n.set(o)) - } else !1 === n.has(i) && (Tt(i, t, e), n.set(i)) - })) - }; - let bt = null; - const wt = new nn; - - function Mt(t, e, n, i) { - if (!1 === t.visible) return; - if (t.layers.test(e.layers)) - if (t.isGroup) n = t.renderOrder; - else if (t.isLOD) !0 === t.autoUpdate && t.update(e); - else if (t.isLight) d.pushLight(t), t.castShadow && d.pushShadow(t); - else if (t.isSprite) { - if (!t.frustumCulled || z.intersectsSprite(t)) { - i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G); - const e = tt.update(t), - r = t.material; - r.visible && u.push(t, e, r, n, V.z, null) - } - } else if (t.isImmediateRenderObject) i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G), u.push(t, null, t.material, n, V.z, null); - else if ((t.isMesh || t.isLine || t.isPoints) && (t.isSkinnedMesh && t.skeleton.frame !== Y.render.frame && (t.skeleton.update(), t.skeleton.frame = Y.render.frame), !t.frustumCulled || z.intersectsObject(t))) { - i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G); - const e = tt.update(t), - r = t.material; - if (Array.isArray(r)) { - const i = e.groups; - for (let o = 0, s = i.length; o < s; o++) { - const s = i[o], - a = r[s.materialIndex]; - a && a.visible && u.push(t, e, a, n, V.z, s) - } - } else r.visible && u.push(t, e, r, n, V.z, null) - } - const r = t.children; - for (let t = 0, o = r.length; t < o; t++) Mt(r[t], e, n, i) - } - - function Et(t, e, n) { - const i = !0 === e.isScene ? e.overrideMaterial : null; - for (let r = 0, o = t.length; r < o; r++) { - const o = t[r], - s = o.object, - a = o.geometry, - l = null === i ? o.material : i, - c = o.group; - if (n.isArrayCamera) { - const t = n.cameras; - for (let n = 0, i = t.length; n < i; n++) { - const i = t[n]; - s.layers.test(i.layers) && (q.viewport(S.copy(i.viewport)), d.setupLightsView(i), St(s, e, i, a, l, c)) - } - } else St(s, e, n, a, l, c) - } - } - - function St(t, e, n, i, r, o) { - if (t.onBeforeRender(f, e, n, i, r, o), t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld), t.normalMatrix.getNormalMatrix(t.modelViewMatrix), t.isImmediateRenderObject) { - const i = Lt(n, e, r, t); - q.setMaterial(r), dt.reset(), - function(t, e) { - t.render((function(t) { - f.renderBufferImmediate(t, e) - })) - }(t, i) - } else f.renderBufferDirect(n, e, i, r, t, o); - t.onAfterRender(f, e, n, i, r, o) - } - - function Tt(t, e, n) { - !0 !== e.isScene && (e = k); - const i = Q.get(t), - r = d.state.lights, - o = d.state.shadowsArray, - s = r.state.version, - a = nt.getParameters(t, r.state, o, e, n), - l = nt.getProgramCacheKey(a); - let c = i.program, - h = !0; - if (i.environment = t.isMeshStandardMaterial ? e.environment : null, i.fog = e.fog, i.envMap = J.get(t.envMap || i.environment), void 0 === c) t.addEventListener("dispose", xt); - else if (c.cacheKey !== l) _t(t); - else if (i.lightsStateVersion !== s) h = !1; - else { - if (void 0 !== a.shaderID) return; - h = !1 - } - h && (a.uniforms = nt.getUniforms(t), t.onBeforeCompile(a, f), c = nt.acquireProgram(a, l), i.program = c, i.uniforms = a.uniforms, i.outputEncoding = a.outputEncoding); - const u = i.uniforms; - (t.isShaderMaterial || t.isRawShaderMaterial) && !0 !== t.clipping || (i.numClippingPlanes = st.numPlanes, i.numIntersection = st.numIntersection, u.clippingPlanes = st.uniform), i.needsLights = function(t) { - return t.isMeshLambertMaterial || t.isMeshToonMaterial || t.isMeshPhongMaterial || t.isMeshStandardMaterial || t.isShadowMaterial || t.isShaderMaterial && !0 === t.lights - }(t), i.lightsStateVersion = s, i.needsLights && (u.ambientLightColor.value = r.state.ambient, u.lightProbe.value = r.state.probe, u.directionalLights.value = r.state.directional, u.directionalLightShadows.value = r.state.directionalShadow, u.spotLights.value = r.state.spot, u.spotLightShadows.value = r.state.spotShadow, u.rectAreaLights.value = r.state.rectArea, u.ltc_1.value = r.state.rectAreaLTC1, u.ltc_2.value = r.state.rectAreaLTC2, u.pointLights.value = r.state.point, u.pointLightShadows.value = r.state.pointShadow, u.hemisphereLights.value = r.state.hemi, u.directionalShadowMap.value = r.state.directionalShadowMap, u.directionalShadowMatrix.value = r.state.directionalShadowMatrix, u.spotShadowMap.value = r.state.spotShadowMap, u.spotShadowMatrix.value = r.state.spotShadowMatrix, u.pointShadowMap.value = r.state.pointShadowMap, u.pointShadowMatrix.value = r.state.pointShadowMatrix); - const p = i.program.getUniforms(), - m = Ai.seqWithValue(p.seq, u); - i.uniformsList = m - } - - function Lt(t, e, n, i) { - !0 !== e.isScene && (e = k), Z.resetTextureUnits(); - const r = e.fog, - o = n.isMeshStandardMaterial ? e.environment : null, - s = null === _ ? f.outputEncoding : _.texture.encoding, - a = J.get(n.envMap || o), - l = Q.get(n), - c = d.state.lights; - if (!0 === U && (!0 === H || t !== E)) { - const e = t === E && n.id === w; - st.setState(n, t, e) - } - n.version === l.__version ? n.fog && l.fog !== r || l.environment !== o || l.needsLights && l.lightsStateVersion !== c.state.version ? Tt(n, e, i) : void 0 === l.numClippingPlanes || l.numClippingPlanes === st.numPlanes && l.numIntersection === st.numIntersection ? (l.outputEncoding !== s || l.envMap !== a) && Tt(n, e, i) : Tt(n, e, i) : (Tt(n, e, i), l.__version = n.version); - let h = !1, - u = !1, - p = !1; - const m = l.program, - v = m.getUniforms(), - y = l.uniforms; - if (q.useProgram(m.program) && (h = !0, u = !0, p = !0), n.id !== w && (w = n.id, u = !0), h || E !== t) { - if (v.setValue(pt, "projectionMatrix", t.projectionMatrix), X.logarithmicDepthBuffer && v.setValue(pt, "logDepthBufFC", 2 / (Math.log(t.far + 1) / Math.LN2)), E !== t && (E = t, u = !0, p = !0), n.isShaderMaterial || n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshStandardMaterial || n.envMap) { - const e = v.map.cameraPosition; - void 0 !== e && e.setValue(pt, V.setFromMatrixPosition(t.matrixWorld)) - }(n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshLambertMaterial || n.isMeshBasicMaterial || n.isMeshStandardMaterial || n.isShaderMaterial) && v.setValue(pt, "isOrthographic", !0 === t.isOrthographicCamera), (n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshLambertMaterial || n.isMeshBasicMaterial || n.isMeshStandardMaterial || n.isShaderMaterial || n.isShadowMaterial || n.skinning) && v.setValue(pt, "viewMatrix", t.matrixWorldInverse) - } - if (n.skinning) { - v.setOptional(pt, i, "bindMatrix"), v.setOptional(pt, i, "bindMatrixInverse"); - const t = i.skeleton; - if (t) { - const e = t.bones; - if (X.floatVertexTextures) { - if (null === t.boneTexture) { - let n = Math.sqrt(4 * e.length); - n = g.ceilPowerOfTwo(n), n = Math.max(n, 4); - const i = new Float32Array(n * n * 4); - i.set(t.boneMatrices); - const r = new Ke(i, n, n, 1023, 1015); - t.boneMatrices = i, t.boneTexture = r, t.boneTextureSize = n - } - v.setValue(pt, "boneTexture", t.boneTexture, Z), v.setValue(pt, "boneTextureSize", t.boneTextureSize) - } else v.setOptional(pt, t, "boneMatrices") - } - } - var A, x; - return (u || l.receiveShadow !== i.receiveShadow) && (l.receiveShadow = i.receiveShadow, v.setValue(pt, "receiveShadow", i.receiveShadow)), u && (v.setValue(pt, "toneMappingExposure", f.toneMappingExposure), l.needsLights && (x = p, (A = y).ambientLightColor.needsUpdate = x, A.lightProbe.needsUpdate = x, A.directionalLights.needsUpdate = x, A.directionalLightShadows.needsUpdate = x, A.pointLights.needsUpdate = x, A.pointLightShadows.needsUpdate = x, A.spotLights.needsUpdate = x, A.spotLightShadows.needsUpdate = x, A.rectAreaLights.needsUpdate = x, A.hemisphereLights.needsUpdate = x), r && n.fog && it.refreshFogUniforms(y, r), it.refreshMaterialUniforms(y, n, D, P), Ai.upload(pt, l.uniformsList, y, Z)), n.isShaderMaterial && !0 === n.uniformsNeedUpdate && (Ai.upload(pt, l.uniformsList, y, Z), n.uniformsNeedUpdate = !1), n.isSpriteMaterial && v.setValue(pt, "center", i.center), v.setValue(pt, "modelViewMatrix", i.modelViewMatrix), v.setValue(pt, "normalMatrix", i.normalMatrix), v.setValue(pt, "modelMatrix", i.matrixWorld), m - } - wt.setAnimationLoop((function(t) { - gt.isPresenting || bt && bt(t) - })), "undefined" != typeof window && wt.setContext(window), this.setAnimationLoop = function(t) { - bt = t, gt.setAnimationLoop(t), null === t ? wt.stop() : wt.start() - }, this.render = function(t, e) { - let n, i; - if (void 0 !== arguments[2] && (console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead."), n = arguments[2]), void 0 !== arguments[3] && (console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead."), i = arguments[3]), void 0 !== e && !0 !== e.isCamera) return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera."); - if (!0 === m) return; - dt.resetDefaultState(), w = -1, E = null, !0 === t.autoUpdate && t.updateMatrixWorld(), null === e.parent && e.updateMatrixWorld(), !0 === gt.enabled && !0 === gt.isPresenting && (e = gt.getCamera(e)), !0 === t.isScene && t.onBeforeRender(f, t, e, n || _), d = ot.get(t, p.length), d.init(), p.push(d), G.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), z.setFromProjectionMatrix(G), H = this.localClippingEnabled, U = st.init(this.clippingPlanes, H, e), u = rt.get(t, e), u.init(), Mt(t, e, 0, f.sortObjects), u.finish(), !0 === f.sortObjects && u.sort(I, O), !0 === U && st.beginShadows(); - const r = d.state.shadowsArray; - vt.render(r, t, e), d.setupLights(), d.setupLightsView(e), !0 === U && st.endShadows(), !0 === this.info.autoReset && this.info.reset(), void 0 !== n && this.setRenderTarget(n), at.render(u, t, e, i); - const o = u.opaque, - s = u.transparent; - o.length > 0 && Et(o, t, e), s.length > 0 && Et(s, t, e), !0 === t.isScene && t.onAfterRender(f, t, e), null !== _ && (Z.updateRenderTargetMipmap(_), Z.updateMultisampleRenderTarget(_)), q.buffers.depth.setTest(!0), q.buffers.depth.setMask(!0), q.buffers.color.setMask(!0), q.setPolygonOffset(!1), p.pop(), d = p.length > 0 ? p[p.length - 1] : null, u = null - }, this.setFramebuffer = function(t) { - y !== t && null === _ && pt.bindFramebuffer(36160, t), y = t - }, this.getActiveCubeFace = function() { - return A - }, this.getActiveMipmapLevel = function() { - return x - }, this.getRenderList = function() { - return u - }, this.setRenderList = function(t) { - u = t - }, this.getRenderTarget = function() { - return _ - }, this.setRenderTarget = function(t, e = 0, n = 0) { - _ = t, A = e, x = n, t && void 0 === Q.get(t).__webglFramebuffer && Z.setupRenderTarget(t); - let i = y, - r = !1; - if (t) { - const n = Q.get(t).__webglFramebuffer; - t.isWebGLCubeRenderTarget ? (i = n[e], r = !0) : i = t.isWebGLMultisampleRenderTarget ? Q.get(t).__webglMultisampledFramebuffer : n, S.copy(t.viewport), L.copy(t.scissor), R = t.scissorTest - } else S.copy(N).multiplyScalar(D).floor(), L.copy(B).multiplyScalar(D).floor(), R = F; - if (b !== i && (pt.bindFramebuffer(36160, i), b = i), q.viewport(S), q.scissor(L), q.setScissorTest(R), r) { - const i = Q.get(t.texture); - pt.framebufferTexture2D(36160, 36064, 34069 + e, i.__webglTexture, n) - } - }, this.readRenderTargetPixels = function(t, e, n, i, r, o, s) { - if (!t || !t.isWebGLRenderTarget) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); - let a = Q.get(t).__webglFramebuffer; - if (t.isWebGLCubeRenderTarget && void 0 !== s && (a = a[s]), a) { - let s = !1; - a !== b && (pt.bindFramebuffer(36160, a), s = !0); - try { - const a = t.texture, - l = a.format, - c = a.type; - if (1023 !== l && ut.convert(l) !== pt.getParameter(35739)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); - const h = 1016 === c && (j.has("EXT_color_buffer_half_float") || X.isWebGL2 && j.has("EXT_color_buffer_float")); - if (!(1009 === c || ut.convert(c) === pt.getParameter(35738) || 1015 === c && (X.isWebGL2 || j.has("OES_texture_float") || j.has("WEBGL_color_buffer_float")) || h)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); - 36053 === pt.checkFramebufferStatus(36160) ? e >= 0 && e <= t.width - i && n >= 0 && n <= t.height - r && pt.readPixels(e, n, i, r, ut.convert(l), ut.convert(c), o) : console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.") - } finally { - s && pt.bindFramebuffer(36160, b) - } - } - }, this.copyFramebufferToTexture = function(t, e, n = 0) { - const i = Math.pow(2, -n), - r = Math.floor(e.image.width * i), - o = Math.floor(e.image.height * i), - s = ut.convert(e.format); - Z.setTexture2D(e, 0), pt.copyTexImage2D(3553, n, s, t.x, t.y, r, o, 0), q.unbindTexture() - }, this.copyTextureToTexture = function(t, e, n, i = 0) { - const r = e.image.width, - o = e.image.height, - s = ut.convert(n.format), - a = ut.convert(n.type); - Z.setTexture2D(n, 0), pt.pixelStorei(37440, n.flipY), pt.pixelStorei(37441, n.premultiplyAlpha), pt.pixelStorei(3317, n.unpackAlignment), e.isDataTexture ? pt.texSubImage2D(3553, i, t.x, t.y, r, o, s, a, e.image.data) : e.isCompressedTexture ? pt.compressedTexSubImage2D(3553, i, t.x, t.y, e.mipmaps[0].width, e.mipmaps[0].height, s, e.mipmaps[0].data) : pt.texSubImage2D(3553, i, t.x, t.y, s, a, e.image), 0 === i && n.generateMipmaps && pt.generateMipmap(3553), q.unbindTexture() - }, this.initTexture = function(t) { - Z.setTexture2D(t, 0), q.unbindTexture() - }, this.resetState = function() { - q.reset(), dt.reset() - }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { - detail: this - })) - } - - function hr(t) { - cr.call(this, t) - } - rr.prototype = Object.assign(Object.create(Ye.prototype), { - constructor: rr, - isArrayCamera: !0 - }), or.prototype = Object.assign(Object.create(St.prototype), { - constructor: or, - isGroup: !0 - }), Object.assign(sr.prototype, { - constructor: sr, - getHandSpace: function() { - return null === this._hand && (this._hand = new or, this._hand.matrixAutoUpdate = !1, this._hand.visible = !1, this._hand.joints = {}, this._hand.inputState = { - pinching: !1 - }), this._hand - }, - getTargetRaySpace: function() { - return null === this._targetRay && (this._targetRay = new or, this._targetRay.matrixAutoUpdate = !1, this._targetRay.visible = !1), this._targetRay - }, - getGripSpace: function() { - return null === this._grip && (this._grip = new or, this._grip.matrixAutoUpdate = !1, this._grip.visible = !1), this._grip - }, - dispatchEvent: function(t) { - return null !== this._targetRay && this._targetRay.dispatchEvent(t), null !== this._grip && this._grip.dispatchEvent(t), null !== this._hand && this._hand.dispatchEvent(t), this - }, - disconnect: function(t) { - return this.dispatchEvent({ - type: "disconnected", - data: t - }), null !== this._targetRay && (this._targetRay.visible = !1), null !== this._grip && (this._grip.visible = !1), null !== this._hand && (this._hand.visible = !1), this - }, - update: function(t, e, n) { - let i = null, - r = null, - o = null; - const s = this._targetRay, - a = this._grip, - l = this._hand; - if (t && "visible-blurred" !== e.session.visibilityState) - if (l && t.hand) { - o = !0; - for (const i of t.hand.values()) { - const t = e.getJointPose(i, n); - if (void 0 === l.joints[i.jointName]) { - const t = new or; - t.matrixAutoUpdate = !1, t.visible = !1, l.joints[i.jointName] = t, l.add(t) - } - const r = l.joints[i.jointName]; - null !== t && (r.matrix.fromArray(t.transform.matrix), r.matrix.decompose(r.position, r.rotation, r.scale), r.jointRadius = t.radius), r.visible = null !== t - } - const i = l.joints["index-finger-tip"], - r = l.joints["thumb-tip"], - s = i.position.distanceTo(r.position), - a = .02, - c = .005; - l.inputState.pinching && s > a + c ? (l.inputState.pinching = !1, this.dispatchEvent({ - type: "pinchend", - handedness: t.handedness, - target: this - })) : !l.inputState.pinching && s <= a - c && (l.inputState.pinching = !0, this.dispatchEvent({ - type: "pinchstart", - handedness: t.handedness, - target: this - })) - } else null !== s && (i = e.getPose(t.targetRaySpace, n), null !== i && (s.matrix.fromArray(i.transform.matrix), s.matrix.decompose(s.position, s.rotation, s.scale))), null !== a && t.gripSpace && (r = e.getPose(t.gripSpace, n), null !== r && (a.matrix.fromArray(r.transform.matrix), a.matrix.decompose(a.position, a.rotation, a.scale))); - return null !== s && (s.visible = null !== i), null !== a && (a.visible = null !== r), null !== l && (l.visible = null !== o), this - } - }), Object.assign(ar.prototype, p.prototype), hr.prototype = Object.assign(Object.create(cr.prototype), { - constructor: hr, - isWebGL1Renderer: !0 - }); - class ur extends St { - constructor() { - super(), Object.defineProperty(this, "isScene", { - value: !0 - }), this.type = "Scene", this.background = null, this.environment = null, this.fog = null, this.overrideMaterial = null, this.autoUpdate = !0, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { - detail: this - })) - } - copy(t, e) { - return super.copy(t, e), null !== t.background && (this.background = t.background.clone()), null !== t.environment && (this.environment = t.environment.clone()), null !== t.fog && (this.fog = t.fog.clone()), null !== t.overrideMaterial && (this.overrideMaterial = t.overrideMaterial.clone()), this.autoUpdate = t.autoUpdate, this.matrixAutoUpdate = t.matrixAutoUpdate, this - } - toJSON(t) { - const e = super.toJSON(t); - return null !== this.background && (e.object.background = this.background.toJSON(t)), null !== this.environment && (e.object.environment = this.environment.toJSON(t)), null !== this.fog && (e.object.fog = this.fog.toJSON()), e - } - } - - function dr(t, e) { - this.array = t, this.stride = e, this.count = void 0 !== t ? t.length / e : 0, this.usage = 35044, this.updateRange = { - offset: 0, - count: -1 - }, this.version = 0, this.uuid = g.generateUUID() - } - Object.defineProperty(dr.prototype, "needsUpdate", { - set: function(t) { - !0 === t && this.version++ - } - }), Object.assign(dr.prototype, { - isInterleavedBuffer: !0, - onUploadCallback: function() {}, - setUsage: function(t) { - return this.usage = t, this - }, - copy: function(t) { - return this.array = new t.array.constructor(t.array), this.count = t.count, this.stride = t.stride, this.usage = t.usage, this - }, - copyAt: function(t, e, n) { - t *= this.stride, n *= e.stride; - for (let i = 0, r = this.stride; i < r; i++) this.array[t + i] = e.array[n + i]; - return this - }, - set: function(t, e = 0) { - return this.array.set(t, e), this - }, - clone: function(t) { - void 0 === t.arrayBuffers && (t.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = g.generateUUID()), void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer); - const e = new dr(new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]), this.stride); - return e.setUsage(this.usage), e - }, - onUpload: function(t) { - return this.onUploadCallback = t, this - }, - toJSON: function(t) { - return void 0 === t.arrayBuffers && (t.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = g.generateUUID()), void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = Array.prototype.slice.call(new Uint32Array(this.array.buffer))), { - uuid: this.uuid, - buffer: this.array.buffer._uuid, - type: this.array.constructor.name, - stride: this.stride - } - } - }); - const pr = new T; - - function fr(t, e, n, i) { - this.name = "", this.data = t, this.itemSize = e, this.offset = n, this.normalized = !0 === i - } - - function mr(t) { - Jt.call(this), this.type = "SpriteMaterial", this.color = new Yt(16777215), this.map = null, this.alphaMap = null, this.rotation = 0, this.sizeAttenuation = !0, this.transparent = !0, this.setValues(t) - } - let gr; - Object.defineProperties(fr.prototype, { - count: { - get: function() { - return this.data.count - } - }, - array: { - get: function() { - return this.data.array - } - }, - needsUpdate: { - set: function(t) { - this.data.needsUpdate = t - } - } - }), Object.assign(fr.prototype, { - isInterleavedBufferAttribute: !0, - applyMatrix4: function(t) { - for (let e = 0, n = this.data.count; e < n; e++) pr.x = this.getX(e), pr.y = this.getY(e), pr.z = this.getZ(e), pr.applyMatrix4(t), this.setXYZ(e, pr.x, pr.y, pr.z); - return this - }, - setX: function(t, e) { - return this.data.array[t * this.data.stride + this.offset] = e, this - }, - setY: function(t, e) { - return this.data.array[t * this.data.stride + this.offset + 1] = e, this - }, - setZ: function(t, e) { - return this.data.array[t * this.data.stride + this.offset + 2] = e, this - }, - setW: function(t, e) { - return this.data.array[t * this.data.stride + this.offset + 3] = e, this - }, - getX: function(t) { - return this.data.array[t * this.data.stride + this.offset] - }, - getY: function(t) { - return this.data.array[t * this.data.stride + this.offset + 1] - }, - getZ: function(t) { - return this.data.array[t * this.data.stride + this.offset + 2] - }, - getW: function(t) { - return this.data.array[t * this.data.stride + this.offset + 3] - }, - setXY: function(t, e, n) { - return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this - }, - setXYZ: function(t, e, n, i) { - return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this - }, - setXYZW: function(t, e, n, i, r) { - return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this.data.array[t + 3] = r, this - }, - clone: function(t) { - if (void 0 === t) { - console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data."); - const t = []; - for (let e = 0; e < this.count; e++) { - const n = e * this.data.stride + this.offset; - for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e]) - } - return new ee(new this.array.constructor(t), this.itemSize, this.normalized) - } - return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.clone(t)), new fr(t.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized) - }, - toJSON: function(t) { - if (void 0 === t) { - console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data."); - const t = []; - for (let e = 0; e < this.count; e++) { - const n = e * this.data.stride + this.offset; - for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e]) - } - return { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: t, - normalized: this.normalized - } - } - return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.toJSON(t)), { - isInterleavedBufferAttribute: !0, - itemSize: this.itemSize, - data: this.data.uuid, - offset: this.offset, - normalized: this.normalized - } - } - }), mr.prototype = Object.create(Jt.prototype), mr.prototype.constructor = mr, mr.prototype.isSpriteMaterial = !0, mr.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.alphaMap = t.alphaMap, this.rotation = t.rotation, this.sizeAttenuation = t.sizeAttenuation, this - }; - const vr = new T, - yr = new T, - Ar = new T, - xr = new v, - _r = new v, - br = new et, - wr = new T, - Mr = new T, - Er = new T, - Sr = new v, - Tr = new v, - Lr = new v; - - function Rr(t) { - if (St.call(this), this.type = "Sprite", void 0 === gr) { - gr = new be; - const t = new dr(new Float32Array([-.5, -.5, 0, 0, 0, .5, -.5, 0, 1, 0, .5, .5, 0, 1, 1, -.5, .5, 0, 0, 1]), 5); - gr.setIndex([0, 1, 2, 0, 2, 3]), gr.setAttribute("position", new fr(t, 3, 0, !1)), gr.setAttribute("uv", new fr(t, 2, 3, !1)) - } - this.geometry = gr, this.material = void 0 !== t ? t : new mr, this.center = new v(.5, .5) - } - - function Cr(t, e, n, i, r, o) { - xr.subVectors(t, n).addScalar(.5).multiply(i), void 0 !== r ? (_r.x = o * xr.x - r * xr.y, _r.y = r * xr.x + o * xr.y) : _r.copy(xr), t.copy(e), t.x += _r.x, t.y += _r.y, t.applyMatrix4(br) - } - Rr.prototype = Object.assign(Object.create(St.prototype), { - constructor: Rr, - isSprite: !0, - raycast: function(t, e) { - null === t.camera && console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'), yr.setFromMatrixScale(this.matrixWorld), br.copy(t.camera.matrixWorld), this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse, this.matrixWorld), Ar.setFromMatrixPosition(this.modelViewMatrix), t.camera.isPerspectiveCamera && !1 === this.material.sizeAttenuation && yr.multiplyScalar(-Ar.z); - const n = this.material.rotation; - let i, r; - 0 !== n && (r = Math.cos(n), i = Math.sin(n)); - const o = this.center; - Cr(wr.set(-.5, -.5, 0), Ar, o, yr, i, r), Cr(Mr.set(.5, -.5, 0), Ar, o, yr, i, r), Cr(Er.set(.5, .5, 0), Ar, o, yr, i, r), Sr.set(0, 0), Tr.set(1, 0), Lr.set(1, 1); - let s = t.ray.intersectTriangle(wr, Mr, Er, !1, vr); - if (null === s && (Cr(Mr.set(-.5, .5, 0), Ar, o, yr, i, r), Tr.set(0, 1), s = t.ray.intersectTriangle(wr, Er, Mr, !1, vr), null === s)) return; - const a = t.ray.origin.distanceTo(vr); - a < t.near || a > t.far || e.push({ - distance: a, - point: vr.clone(), - uv: Gt.getUV(vr, wr, Mr, Er, Sr, Tr, Lr, new v), - face: null, - object: this - }) - }, - copy: function(t) { - return St.prototype.copy.call(this, t), void 0 !== t.center && this.center.copy(t.center), this.material = t.material, this - } - }); - const Pr = new T, - Dr = new T; - - function Ir() { - St.call(this), this._currentLevel = 0, this.type = "LOD", Object.defineProperties(this, { - levels: { - enumerable: !0, - value: [] - } - }), this.autoUpdate = !0 - } - Ir.prototype = Object.assign(Object.create(St.prototype), { - constructor: Ir, - isLOD: !0, - copy: function(t) { - St.prototype.copy.call(this, t, !1); - const e = t.levels; - for (let t = 0, n = e.length; t < n; t++) { - const n = e[t]; - this.addLevel(n.object.clone(), n.distance) - } - return this.autoUpdate = t.autoUpdate, this - }, - addLevel: function(t, e = 0) { - e = Math.abs(e); - const n = this.levels; - let i; - for (i = 0; i < n.length && !(e < n[i].distance); i++); - return n.splice(i, 0, { - distance: e, - object: t - }), this.add(t), this - }, - getCurrentLevel: function() { - return this._currentLevel - }, - getObjectForDistance: function(t) { - const e = this.levels; - if (e.length > 0) { - let n, i; - for (n = 1, i = e.length; n < i && !(t < e[n].distance); n++); - return e[n - 1].object - } - return null - }, - raycast: function(t, e) { - if (this.levels.length > 0) { - Pr.setFromMatrixPosition(this.matrixWorld); - const n = t.ray.origin.distanceTo(Pr); - this.getObjectForDistance(n).raycast(t, e) - } - }, - update: function(t) { - const e = this.levels; - if (e.length > 1) { - Pr.setFromMatrixPosition(t.matrixWorld), Dr.setFromMatrixPosition(this.matrixWorld); - const n = Pr.distanceTo(Dr) / t.zoom; - let i, r; - for (e[0].object.visible = !0, i = 1, r = e.length; i < r && n >= e[i].distance; i++) e[i - 1].object.visible = !1, e[i].object.visible = !0; - for (this._currentLevel = i - 1; i < r; i++) e[i].object.visible = !1 - } - }, - toJSON: function(t) { - const e = St.prototype.toJSON.call(this, t); - !1 === this.autoUpdate && (e.object.autoUpdate = !1), e.object.levels = []; - const n = this.levels; - for (let t = 0, i = n.length; t < i; t++) { - const i = n[t]; - e.object.levels.push({ - object: i.object.uuid, - distance: i.distance - }) - } - return e - } - }); - const Or = new T, - Nr = new M, - Br = new M, - Fr = new T, - zr = new et; - - function Ur(t, e) { - t && t.isGeometry && console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."), He.call(this, t, e), this.type = "SkinnedMesh", this.bindMode = "attached", this.bindMatrix = new et, this.bindMatrixInverse = new et - } - - function Hr() { - St.call(this), this.type = "Bone" - } - Ur.prototype = Object.assign(Object.create(He.prototype), { - constructor: Ur, - isSkinnedMesh: !0, - copy: function(t) { - return He.prototype.copy.call(this, t), this.bindMode = t.bindMode, this.bindMatrix.copy(t.bindMatrix), this.bindMatrixInverse.copy(t.bindMatrixInverse), this.skeleton = t.skeleton, this - }, - bind: function(t, e) { - this.skeleton = t, void 0 === e && (this.updateMatrixWorld(!0), this.skeleton.calculateInverses(), e = this.matrixWorld), this.bindMatrix.copy(e), this.bindMatrixInverse.copy(e).invert() - }, - pose: function() { - this.skeleton.pose() - }, - normalizeSkinWeights: function() { - const t = new M, - e = this.geometry.attributes.skinWeight; - for (let n = 0, i = e.count; n < i; n++) { - t.x = e.getX(n), t.y = e.getY(n), t.z = e.getZ(n), t.w = e.getW(n); - const i = 1 / t.manhattanLength(); - i !== 1 / 0 ? t.multiplyScalar(i) : t.set(1, 0, 0, 0), e.setXYZW(n, t.x, t.y, t.z, t.w) - } - }, - updateMatrixWorld: function(t) { - He.prototype.updateMatrixWorld.call(this, t), "attached" === this.bindMode ? this.bindMatrixInverse.copy(this.matrixWorld).invert() : "detached" === this.bindMode ? this.bindMatrixInverse.copy(this.bindMatrix).invert() : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) - }, - boneTransform: function(t, e) { - const n = this.skeleton, - i = this.geometry; - Nr.fromBufferAttribute(i.attributes.skinIndex, t), Br.fromBufferAttribute(i.attributes.skinWeight, t), Or.fromBufferAttribute(i.attributes.position, t).applyMatrix4(this.bindMatrix), e.set(0, 0, 0); - for (let t = 0; t < 4; t++) { - const i = Br.getComponent(t); - if (0 !== i) { - const r = Nr.getComponent(t); - zr.multiplyMatrices(n.bones[r].matrixWorld, n.boneInverses[r]), e.addScaledVector(Fr.copy(Or).applyMatrix4(zr), i) - } - } - return e.applyMatrix4(this.bindMatrixInverse) - } - }), Hr.prototype = Object.assign(Object.create(St.prototype), { - constructor: Hr, - isBone: !0 - }); - const Gr = new et, - Vr = new et; - - function kr(t = [], e = []) { - this.uuid = g.generateUUID(), this.bones = t.slice(0), this.boneInverses = e, this.boneMatrices = null, this.boneTexture = null, this.boneTextureSize = 0, this.frame = -1, this.init() - } - Object.assign(kr.prototype, { - init: function() { - const t = this.bones, - e = this.boneInverses; - if (this.boneMatrices = new Float32Array(16 * t.length), 0 === e.length) this.calculateInverses(); - else if (t.length !== e.length) { - console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."), this.boneInverses = []; - for (let t = 0, e = this.bones.length; t < e; t++) this.boneInverses.push(new et) - } - }, - calculateInverses: function() { - this.boneInverses.length = 0; - for (let t = 0, e = this.bones.length; t < e; t++) { - const e = new et; - this.bones[t] && e.copy(this.bones[t].matrixWorld).invert(), this.boneInverses.push(e) - } - }, - pose: function() { - for (let t = 0, e = this.bones.length; t < e; t++) { - const e = this.bones[t]; - e && e.matrixWorld.copy(this.boneInverses[t]).invert() - } - for (let t = 0, e = this.bones.length; t < e; t++) { - const e = this.bones[t]; - e && (e.parent && e.parent.isBone ? (e.matrix.copy(e.parent.matrixWorld).invert(), e.matrix.multiply(e.matrixWorld)) : e.matrix.copy(e.matrixWorld), e.matrix.decompose(e.position, e.quaternion, e.scale)) - } - }, - update: function() { - const t = this.bones, - e = this.boneInverses, - n = this.boneMatrices, - i = this.boneTexture; - for (let i = 0, r = t.length; i < r; i++) { - const r = t[i] ? t[i].matrixWorld : Vr; - Gr.multiplyMatrices(r, e[i]), Gr.toArray(n, 16 * i) - } - null !== i && (i.needsUpdate = !0) - }, - clone: function() { - return new kr(this.bones, this.boneInverses) - }, - getBoneByName: function(t) { - for (let e = 0, n = this.bones.length; e < n; e++) { - const n = this.bones[e]; - if (n.name === t) return n - } - }, - dispose: function() { - null !== this.boneTexture && (this.boneTexture.dispose(), this.boneTexture = null) - }, - fromJSON: function(t, e) { - this.uuid = t.uuid; - for (let n = 0, i = t.bones.length; n < i; n++) { - const i = t.bones[n]; - let r = e[i]; - void 0 === r && (console.warn("THREE.Skeleton: No bone found with UUID:", i), r = new Hr), this.bones.push(r), this.boneInverses.push((new et).fromArray(t.boneInverses[n])) - } - return this.init(), this - }, - toJSON: function() { - const t = { - metadata: { - version: 4.5, - type: "Skeleton", - generator: "Skeleton.toJSON" - }, - bones: [], - boneInverses: [] - }; - t.uuid = this.uuid; - const e = this.bones, - n = this.boneInverses; - for (let i = 0, r = e.length; i < r; i++) { - const r = e[i]; - t.bones.push(r.uuid); - const o = n[i]; - t.boneInverses.push(o.toArray()) - } - return t - } - }); - const Wr = new et, - jr = new et, - Xr = [], - qr = new He; - - function Yr(t, e, n) { - He.call(this, t, e), this.instanceMatrix = new ee(new Float32Array(16 * n), 16), this.instanceColor = null, this.count = n, this.frustumCulled = !1 - } - - function Qr(t) { - Jt.call(this), this.type = "LineBasicMaterial", this.color = new Yt(16777215), this.linewidth = 1, this.linecap = "round", this.linejoin = "round", this.morphTargets = !1, this.setValues(t) - } - Yr.prototype = Object.assign(Object.create(He.prototype), { - constructor: Yr, - isInstancedMesh: !0, - copy: function(t) { - return He.prototype.copy.call(this, t), this.instanceMatrix.copy(t.instanceMatrix), null !== t.instanceColor && (this.instanceColor = t.instanceColor.clone()), this.count = t.count, this - }, - getColorAt: function(t, e) { - e.fromArray(this.instanceColor.array, 3 * t) - }, - getMatrixAt: function(t, e) { - e.fromArray(this.instanceMatrix.array, 16 * t) - }, - raycast: function(t, e) { - const n = this.matrixWorld, - i = this.count; - if (qr.geometry = this.geometry, qr.material = this.material, void 0 !== qr.material) - for (let r = 0; r < i; r++) { - this.getMatrixAt(r, Wr), jr.multiplyMatrices(n, Wr), qr.matrixWorld = jr, qr.raycast(t, Xr); - for (let t = 0, n = Xr.length; t < n; t++) { - const n = Xr[t]; - n.instanceId = r, n.object = this, e.push(n) - } - Xr.length = 0 - } - }, - setColorAt: function(t, e) { - null === this.instanceColor && (this.instanceColor = new ee(new Float32Array(3 * this.count), 3)), e.toArray(this.instanceColor.array, 3 * t) - }, - setMatrixAt: function(t, e) { - e.toArray(this.instanceMatrix.array, 16 * t) - }, - updateMorphTargets: function() {}, - dispose: function() { - this.dispatchEvent({ - type: "dispose" - }) - } - }), Qr.prototype = Object.create(Jt.prototype), Qr.prototype.constructor = Qr, Qr.prototype.isLineBasicMaterial = !0, Qr.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.linewidth = t.linewidth, this.linecap = t.linecap, this.linejoin = t.linejoin, this.morphTargets = t.morphTargets, this - }; - const Zr = new T, - Jr = new T, - Kr = new et, - $r = new tt, - to = new X; - - function eo(t = new be, e = new Qr) { - St.call(this), this.type = "Line", this.geometry = t, this.material = e, this.updateMorphTargets() - } - eo.prototype = Object.assign(Object.create(St.prototype), { - constructor: eo, - isLine: !0, - copy: function(t) { - return St.prototype.copy.call(this, t), this.material = t.material, this.geometry = t.geometry, this - }, - computeLineDistances: function() { - const t = this.geometry; - if (t.isBufferGeometry) - if (null === t.index) { - const e = t.attributes.position, - n = [0]; - for (let t = 1, i = e.count; t < i; t++) Zr.fromBufferAttribute(e, t - 1), Jr.fromBufferAttribute(e, t), n[t] = n[t - 1], n[t] += Zr.distanceTo(Jr); - t.setAttribute("lineDistance", new he(n, 1)) - } else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); - else t.isGeometry && console.error("THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."); - return this - }, - raycast: function(t, e) { - const n = this.geometry, - i = this.matrixWorld, - r = t.params.Line.threshold; - if (null === n.boundingSphere && n.computeBoundingSphere(), to.copy(n.boundingSphere), to.applyMatrix4(i), to.radius += r, !1 === t.ray.intersectsSphere(to)) return; - Kr.copy(i).invert(), $r.copy(t.ray).applyMatrix4(Kr); - const o = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), - s = o * o, - a = new T, - l = new T, - c = new T, - h = new T, - u = this.isLineSegments ? 2 : 1; - if (n.isBufferGeometry) { - const i = n.index, - r = n.attributes.position; - if (null !== i) { - const n = i.array; - for (let i = 0, o = n.length - 1; i < o; i += u) { - const o = n[i], - u = n[i + 1]; - a.fromBufferAttribute(r, o), l.fromBufferAttribute(r, u); - if ($r.distanceSqToSegment(a, l, h, c) > s) continue; - h.applyMatrix4(this.matrixWorld); - const d = t.ray.origin.distanceTo(h); - d < t.near || d > t.far || e.push({ - distance: d, - point: c.clone().applyMatrix4(this.matrixWorld), - index: i, - face: null, - faceIndex: null, - object: this - }) - } - } else - for (let n = 0, i = r.count - 1; n < i; n += u) { - a.fromBufferAttribute(r, n), l.fromBufferAttribute(r, n + 1); - if ($r.distanceSqToSegment(a, l, h, c) > s) continue; - h.applyMatrix4(this.matrixWorld); - const i = t.ray.origin.distanceTo(h); - i < t.near || i > t.far || e.push({ - distance: i, - point: c.clone().applyMatrix4(this.matrixWorld), - index: n, - face: null, - faceIndex: null, - object: this - }) - } - } else n.isGeometry && console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") - }, - updateMorphTargets: function() { - const t = this.geometry; - if (t.isBufferGeometry) { - const e = t.morphAttributes, - n = Object.keys(e); - if (n.length > 0) { - const t = e[n[0]]; - if (void 0 !== t) { - this.morphTargetInfluences = [], this.morphTargetDictionary = {}; - for (let e = 0, n = t.length; e < n; e++) { - const n = t[e].name || String(e); - this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e - } - } - } - } else { - const e = t.morphTargets; - void 0 !== e && e.length > 0 && console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.") - } - } - }); - const no = new T, - io = new T; - - function ro(t, e) { - eo.call(this, t, e), this.type = "LineSegments" - } - - function oo(t, e) { - eo.call(this, t, e), this.type = "LineLoop" - } - - function so(t) { - Jt.call(this), this.type = "PointsMaterial", this.color = new Yt(16777215), this.map = null, this.alphaMap = null, this.size = 1, this.sizeAttenuation = !0, this.morphTargets = !1, this.setValues(t) - } - ro.prototype = Object.assign(Object.create(eo.prototype), { - constructor: ro, - isLineSegments: !0, - computeLineDistances: function() { - const t = this.geometry; - if (t.isBufferGeometry) - if (null === t.index) { - const e = t.attributes.position, - n = []; - for (let t = 0, i = e.count; t < i; t += 2) no.fromBufferAttribute(e, t), io.fromBufferAttribute(e, t + 1), n[t] = 0 === t ? 0 : n[t - 1], n[t + 1] = n[t] + no.distanceTo(io); - t.setAttribute("lineDistance", new he(n, 1)) - } else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); - else t.isGeometry && console.error("THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."); - return this - } - }), oo.prototype = Object.assign(Object.create(eo.prototype), { - constructor: oo, - isLineLoop: !0 - }), so.prototype = Object.create(Jt.prototype), so.prototype.constructor = so, so.prototype.isPointsMaterial = !0, so.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.alphaMap = t.alphaMap, this.size = t.size, this.sizeAttenuation = t.sizeAttenuation, this.morphTargets = t.morphTargets, this - }; - const ao = new et, - lo = new tt, - co = new X, - ho = new T; - - function uo(t = new be, e = new so) { - St.call(this), this.type = "Points", this.geometry = t, this.material = e, this.updateMorphTargets() - } - - function po(t, e, n, i, r, o, s) { - const a = lo.distanceSqToPoint(t); - if (a < n) { - const n = new T; - lo.closestPointToPoint(t, n), n.applyMatrix4(i); - const l = r.ray.origin.distanceTo(n); - if (l < r.near || l > r.far) return; - o.push({ - distance: l, - distanceToRay: Math.sqrt(a), - point: n, - index: e, - face: null, - object: s - }) - } - } - - function fo(t, e, n, i, r, o, s, a, l) { - b.call(this, t, e, n, i, r, o, s, a, l), this.format = void 0 !== s ? s : 1022, this.minFilter = void 0 !== o ? o : 1006, this.magFilter = void 0 !== r ? r : 1006, this.generateMipmaps = !1; - const c = this; - "requestVideoFrameCallback" in t && t.requestVideoFrameCallback((function e() { - c.needsUpdate = !0, t.requestVideoFrameCallback(e) - })) - } - - function mo(t, e, n, i, r, o, s, a, l, c, h, u) { - b.call(this, null, o, s, a, l, c, i, r, h, u), this.image = { - width: e, - height: n - }, this.mipmaps = t, this.flipY = !1, this.generateMipmaps = !1 - } - - function go(t, e, n, i, r, o, s, a, l) { - b.call(this, t, e, n, i, r, o, s, a, l), this.needsUpdate = !0 - } - - function vo(t, e, n, i, r, o, s, a, l, c) { - if (1026 !== (c = void 0 !== c ? c : 1026) && 1027 !== c) throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); - void 0 === n && 1026 === c && (n = 1012), void 0 === n && 1027 === c && (n = 1020), b.call(this, null, i, r, o, s, a, c, n, l), this.image = { - width: t, - height: e - }, this.magFilter = void 0 !== s ? s : 1003, this.minFilter = void 0 !== a ? a : 1003, this.flipY = !1, this.generateMipmaps = !1 - } - uo.prototype = Object.assign(Object.create(St.prototype), { - constructor: uo, - isPoints: !0, - copy: function(t) { - return St.prototype.copy.call(this, t), this.material = t.material, this.geometry = t.geometry, this - }, - raycast: function(t, e) { - const n = this.geometry, - i = this.matrixWorld, - r = t.params.Points.threshold; - if (null === n.boundingSphere && n.computeBoundingSphere(), co.copy(n.boundingSphere), co.applyMatrix4(i), co.radius += r, !1 === t.ray.intersectsSphere(co)) return; - ao.copy(i).invert(), lo.copy(t.ray).applyMatrix4(ao); - const o = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), - s = o * o; - if (n.isBufferGeometry) { - const r = n.index, - o = n.attributes.position; - if (null !== r) { - const n = r.array; - for (let r = 0, a = n.length; r < a; r++) { - const a = n[r]; - ho.fromBufferAttribute(o, a), po(ho, a, s, i, t, e, this) - } - } else - for (let n = 0, r = o.count; n < r; n++) ho.fromBufferAttribute(o, n), po(ho, n, s, i, t, e, this) - } else console.error("THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") - }, - updateMorphTargets: function() { - const t = this.geometry; - if (t.isBufferGeometry) { - const e = t.morphAttributes, - n = Object.keys(e); - if (n.length > 0) { - const t = e[n[0]]; - if (void 0 !== t) { - this.morphTargetInfluences = [], this.morphTargetDictionary = {}; - for (let e = 0, n = t.length; e < n; e++) { - const n = t[e].name || String(e); - this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e - } - } - } - } else { - const e = t.morphTargets; - void 0 !== e && e.length > 0 && console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.") - } - } - }), fo.prototype = Object.assign(Object.create(b.prototype), { - constructor: fo, - clone: function() { - return new this.constructor(this.image).copy(this) - }, - isVideoTexture: !0, - update: function() { - const t = this.image; - !1 === "requestVideoFrameCallback" in t && t.readyState >= t.HAVE_CURRENT_DATA && (this.needsUpdate = !0) - } - }), mo.prototype = Object.create(b.prototype), mo.prototype.constructor = mo, mo.prototype.isCompressedTexture = !0, go.prototype = Object.create(b.prototype), go.prototype.constructor = go, go.prototype.isCanvasTexture = !0, vo.prototype = Object.create(b.prototype), vo.prototype.constructor = vo, vo.prototype.isDepthTexture = !0; - new T, new T, new T, new Gt; - const yo = function(t, e, n) { - n = n || 2; - const i = e && e.length, - r = i ? e[0] * n : t.length; - let o = Ao(t, 0, r, n, !0); - const s = []; - if (!o || o.next === o.prev) return s; - let a, l, c, h, u, d, p; - if (i && (o = function(t, e, n, i) { - const r = []; - let o, s, a, l, c; - for (o = 0, s = e.length; o < s; o++) a = e[o] * i, l = o < s - 1 ? e[o + 1] * i : t.length, c = Ao(t, a, l, i, !1), c === c.next && (c.steiner = !0), r.push(Co(c)); - for (r.sort(So), o = 0; o < r.length; o++) To(r[o], n), n = xo(n, n.next); - return n - }(t, e, o, n)), t.length > 80 * n) { - a = c = t[0], l = h = t[1]; - for (let e = n; e < r; e += n) u = t[e], d = t[e + 1], u < a && (a = u), d < l && (l = d), u > c && (c = u), d > h && (h = d); - p = Math.max(c - a, h - l), p = 0 !== p ? 1 / p : 0 - } - return _o(o, s, n, a, l, p), s - }; - - function Ao(t, e, n, i, r) { - let o, s; - if (r === function(t, e, n, i) { - let r = 0; - for (let o = e, s = n - i; o < n; o += i) r += (t[s] - t[o]) * (t[o + 1] + t[s + 1]), s = o; - return r - }(t, e, n, i) > 0) - for (o = e; o < n; o += i) s = Ho(o, t[o], t[o + 1], s); - else - for (o = n - i; o >= e; o -= i) s = Ho(o, t[o], t[o + 1], s); - return s && Oo(s, s.next) && (Go(s), s = s.next), s - } - - function xo(t, e) { - if (!t) return t; - e || (e = t); - let n, i = t; - do { - if (n = !1, i.steiner || !Oo(i, i.next) && 0 !== Io(i.prev, i, i.next)) i = i.next; - else { - if (Go(i), i = e = i.prev, i === i.next) break; - n = !0 - } - } while (n || i !== e); - return e - } - - function _o(t, e, n, i, r, o, s) { - if (!t) return; - !s && o && function(t, e, n, i) { - let r = t; - do { - null === r.z && (r.z = Ro(r.x, r.y, e, n, i)), r.prevZ = r.prev, r.nextZ = r.next, r = r.next - } while (r !== t); - r.prevZ.nextZ = null, r.prevZ = null, - function(t) { - let e, n, i, r, o, s, a, l, c = 1; - do { - for (n = t, t = null, o = null, s = 0; n;) { - for (s++, i = n, a = 0, e = 0; e < c && (a++, i = i.nextZ, i); e++); - for (l = c; a > 0 || l > 0 && i;) 0 !== a && (0 === l || !i || n.z <= i.z) ? (r = n, n = n.nextZ, a--) : (r = i, i = i.nextZ, l--), o ? o.nextZ = r : t = r, r.prevZ = o, o = r; - n = i - } - o.nextZ = null, c *= 2 - } while (s > 1) - }(r) - }(t, i, r, o); - let a, l, c = t; - for (; t.prev !== t.next;) - if (a = t.prev, l = t.next, o ? wo(t, i, r, o) : bo(t)) e.push(a.i / n), e.push(t.i / n), e.push(l.i / n), Go(t), t = l.next, c = l.next; - else if ((t = l) === c) { - s ? 1 === s ? _o(t = Mo(xo(t), e, n), e, n, i, r, o, 2) : 2 === s && Eo(t, e, n, i, r, o) : _o(xo(t), e, n, i, r, o, 1); - break - } - } - - function bo(t) { - const e = t.prev, - n = t, - i = t.next; - if (Io(e, n, i) >= 0) return !1; - let r = t.next.next; - for (; r !== t.prev;) { - if (Po(e.x, e.y, n.x, n.y, i.x, i.y, r.x, r.y) && Io(r.prev, r, r.next) >= 0) return !1; - r = r.next - } - return !0 - } - - function wo(t, e, n, i) { - const r = t.prev, - o = t, - s = t.next; - if (Io(r, o, s) >= 0) return !1; - const a = r.x < o.x ? r.x < s.x ? r.x : s.x : o.x < s.x ? o.x : s.x, - l = r.y < o.y ? r.y < s.y ? r.y : s.y : o.y < s.y ? o.y : s.y, - c = r.x > o.x ? r.x > s.x ? r.x : s.x : o.x > s.x ? o.x : s.x, - h = r.y > o.y ? r.y > s.y ? r.y : s.y : o.y > s.y ? o.y : s.y, - u = Ro(a, l, e, n, i), - d = Ro(c, h, e, n, i); - let p = t.prevZ, - f = t.nextZ; - for (; p && p.z >= u && f && f.z <= d;) { - if (p !== t.prev && p !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, p.x, p.y) && Io(p.prev, p, p.next) >= 0) return !1; - if (p = p.prevZ, f !== t.prev && f !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, f.x, f.y) && Io(f.prev, f, f.next) >= 0) return !1; - f = f.nextZ - } - for (; p && p.z >= u;) { - if (p !== t.prev && p !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, p.x, p.y) && Io(p.prev, p, p.next) >= 0) return !1; - p = p.prevZ - } - for (; f && f.z <= d;) { - if (f !== t.prev && f !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, f.x, f.y) && Io(f.prev, f, f.next) >= 0) return !1; - f = f.nextZ - } - return !0 - } - - function Mo(t, e, n) { - let i = t; - do { - const r = i.prev, - o = i.next.next; - !Oo(r, o) && No(r, i, i.next, o) && zo(r, o) && zo(o, r) && (e.push(r.i / n), e.push(i.i / n), e.push(o.i / n), Go(i), Go(i.next), i = t = o), i = i.next - } while (i !== t); - return xo(i) - } - - function Eo(t, e, n, i, r, o) { - let s = t; - do { - let t = s.next.next; - for (; t !== s.prev;) { - if (s.i !== t.i && Do(s, t)) { - let a = Uo(s, t); - return s = xo(s, s.next), a = xo(a, a.next), _o(s, e, n, i, r, o), void _o(a, e, n, i, r, o) - } - t = t.next - } - s = s.next - } while (s !== t) - } - - function So(t, e) { - return t.x - e.x - } - - function To(t, e) { - if (e = function(t, e) { - let n = e; - const i = t.x, - r = t.y; - let o, s = -1 / 0; - do { - if (r <= n.y && r >= n.next.y && n.next.y !== n.y) { - const t = n.x + (r - n.y) * (n.next.x - n.x) / (n.next.y - n.y); - if (t <= i && t > s) { - if (s = t, t === i) { - if (r === n.y) return n; - if (r === n.next.y) return n.next - } - o = n.x < n.next.x ? n : n.next - } - } - n = n.next - } while (n !== e); - if (!o) return null; - if (i === s) return o; - const a = o, - l = o.x, - c = o.y; - let h, u = 1 / 0; - n = o; - do { - i >= n.x && n.x >= l && i !== n.x && Po(r < c ? i : s, r, l, c, r < c ? s : i, r, n.x, n.y) && (h = Math.abs(r - n.y) / (i - n.x), zo(n, t) && (h < u || h === u && (n.x > o.x || n.x === o.x && Lo(o, n))) && (o = n, u = h)), n = n.next - } while (n !== a); - return o - }(t, e)) { - const n = Uo(e, t); - xo(e, e.next), xo(n, n.next) - } - } - - function Lo(t, e) { - return Io(t.prev, t, e.prev) < 0 && Io(e.next, t, t.next) < 0 - } - - function Ro(t, e, n, i, r) { - return (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = 32767 * (t - n) * r) | t << 8)) | t << 4)) | t << 2)) | t << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - i) * r) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1 - } - - function Co(t) { - let e = t, - n = t; - do { - (e.x < n.x || e.x === n.x && e.y < n.y) && (n = e), e = e.next - } while (e !== t); - return n - } - - function Po(t, e, n, i, r, o, s, a) { - return (r - s) * (e - a) - (t - s) * (o - a) >= 0 && (t - s) * (i - a) - (n - s) * (e - a) >= 0 && (n - s) * (o - a) - (r - s) * (i - a) >= 0 - } - - function Do(t, e) { - return t.next.i !== e.i && t.prev.i !== e.i && ! function(t, e) { - let n = t; - do { - if (n.i !== t.i && n.next.i !== t.i && n.i !== e.i && n.next.i !== e.i && No(n, n.next, t, e)) return !0; - n = n.next - } while (n !== t); - return !1 - }(t, e) && (zo(t, e) && zo(e, t) && function(t, e) { - let n = t, - i = !1; - const r = (t.x + e.x) / 2, - o = (t.y + e.y) / 2; - do { - n.y > o != n.next.y > o && n.next.y !== n.y && r < (n.next.x - n.x) * (o - n.y) / (n.next.y - n.y) + n.x && (i = !i), n = n.next - } while (n !== t); - return i - }(t, e) && (Io(t.prev, t, e.prev) || Io(t, e.prev, e)) || Oo(t, e) && Io(t.prev, t, t.next) > 0 && Io(e.prev, e, e.next) > 0) - } - - function Io(t, e, n) { - return (e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y) - } - - function Oo(t, e) { - return t.x === e.x && t.y === e.y - } - - function No(t, e, n, i) { - const r = Fo(Io(t, e, n)), - o = Fo(Io(t, e, i)), - s = Fo(Io(n, i, t)), - a = Fo(Io(n, i, e)); - return r !== o && s !== a || (!(0 !== r || !Bo(t, n, e)) || (!(0 !== o || !Bo(t, i, e)) || (!(0 !== s || !Bo(n, t, i)) || !(0 !== a || !Bo(n, e, i))))) - } - - function Bo(t, e, n) { - return e.x <= Math.max(t.x, n.x) && e.x >= Math.min(t.x, n.x) && e.y <= Math.max(t.y, n.y) && e.y >= Math.min(t.y, n.y) - } - - function Fo(t) { - return t > 0 ? 1 : t < 0 ? -1 : 0 - } - - function zo(t, e) { - return Io(t.prev, t, t.next) < 0 ? Io(t, e, t.next) >= 0 && Io(t, t.prev, e) >= 0 : Io(t, e, t.prev) < 0 || Io(t, t.next, e) < 0 - } - - function Uo(t, e) { - const n = new Vo(t.i, t.x, t.y), - i = new Vo(e.i, e.x, e.y), - r = t.next, - o = e.prev; - return t.next = e, e.prev = t, n.next = r, r.prev = n, i.next = n, n.prev = i, o.next = i, i.prev = o, i - } - - function Ho(t, e, n, i) { - const r = new Vo(t, e, n); - return i ? (r.next = i.next, r.prev = i, i.next.prev = r, i.next = r) : (r.prev = r, r.next = r), r - } - - function Go(t) { - t.next.prev = t.prev, t.prev.next = t.next, t.prevZ && (t.prevZ.nextZ = t.nextZ), t.nextZ && (t.nextZ.prevZ = t.prevZ) - } - - function Vo(t, e, n) { - this.i = t, this.x = e, this.y = n, this.prev = null, this.next = null, this.z = null, this.prevZ = null, this.nextZ = null, this.steiner = !1 - } - const ko = { - area: function(t) { - const e = t.length; - let n = 0; - for (let i = e - 1, r = 0; r < e; i = r++) n += t[i].x * t[r].y - t[r].x * t[i].y; - return .5 * n - }, - isClockWise: function(t) { - return ko.area(t) < 0 - }, - triangulateShape: function(t, e) { - const n = [], - i = [], - r = []; - Wo(t), jo(n, t); - let o = t.length; - e.forEach(Wo); - for (let t = 0; t < e.length; t++) i.push(o), o += e[t].length, jo(n, e[t]); - const s = yo(n, i); - for (let t = 0; t < s.length; t += 3) r.push(s.slice(t, t + 3)); - return r - } - }; - - function Wo(t) { - const e = t.length; - e > 2 && t[e - 1].equals(t[0]) && t.pop() - } - - function jo(t, e) { - for (let n = 0; n < e.length; n++) t.push(e[n].x), t.push(e[n].y) - } - class Xo extends be { - constructor(t, e) { - super(), this.type = "ExtrudeGeometry", this.parameters = { - shapes: t, - options: e - }, t = Array.isArray(t) ? t : [t]; - const n = this, - i = [], - r = []; - for (let e = 0, n = t.length; e < n; e++) { - o(t[e]) - } - - function o(t) { - const o = [], - s = void 0 !== e.curveSegments ? e.curveSegments : 12, - a = void 0 !== e.steps ? e.steps : 1; - let l = void 0 !== e.depth ? e.depth : 100, - c = void 0 === e.bevelEnabled || e.bevelEnabled, - h = void 0 !== e.bevelThickness ? e.bevelThickness : 6, - u = void 0 !== e.bevelSize ? e.bevelSize : h - 2, - d = void 0 !== e.bevelOffset ? e.bevelOffset : 0, - p = void 0 !== e.bevelSegments ? e.bevelSegments : 3; - const f = e.extrudePath, - m = void 0 !== e.UVGenerator ? e.UVGenerator : qo; - void 0 !== e.amount && (console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."), l = e.amount); - let g, y, A, x, _, b = !1; - f && (g = f.getSpacedPoints(a), b = !0, c = !1, y = f.computeFrenetFrames(a, !1), A = new T, x = new T, _ = new T), c || (p = 0, h = 0, u = 0, d = 0); - const w = t.extractPoints(s); - let M = w.shape; - const E = w.holes; - if (!ko.isClockWise(M)) { - M = M.reverse(); - for (let t = 0, e = E.length; t < e; t++) { - const e = E[t]; - ko.isClockWise(e) && (E[t] = e.reverse()) - } - } - const S = ko.triangulateShape(M, E), - L = M; - for (let t = 0, e = E.length; t < e; t++) { - const e = E[t]; - M = M.concat(e) - } - - function R(t, e, n) { - return e || console.error("THREE.ExtrudeGeometry: vec does not exist"), e.clone().multiplyScalar(n).add(t) - } - const C = M.length, - P = S.length; - - function D(t, e, n) { - let i, r, o; - const s = t.x - e.x, - a = t.y - e.y, - l = n.x - t.x, - c = n.y - t.y, - h = s * s + a * a, - u = s * c - a * l; - if (Math.abs(u) > Number.EPSILON) { - const u = Math.sqrt(h), - d = Math.sqrt(l * l + c * c), - p = e.x - a / u, - f = e.y + s / u, - m = ((n.x - c / d - p) * c - (n.y + l / d - f) * l) / (s * c - a * l); - i = p + s * m - t.x, r = f + a * m - t.y; - const g = i * i + r * r; - if (g <= 2) return new v(i, r); - o = Math.sqrt(g / 2) - } else { - let t = !1; - s > Number.EPSILON ? l > Number.EPSILON && (t = !0) : s < -Number.EPSILON ? l < -Number.EPSILON && (t = !0) : Math.sign(a) === Math.sign(c) && (t = !0), t ? (i = -a, r = s, o = Math.sqrt(h)) : (i = s, r = a, o = Math.sqrt(h / 2)) - } - return new v(i / o, r / o) - } - const I = []; - for (let t = 0, e = L.length, n = e - 1, i = t + 1; t < e; t++, n++, i++) n === e && (n = 0), i === e && (i = 0), I[t] = D(L[t], L[n], L[i]); - const O = []; - let N, B = I.concat(); - for (let t = 0, e = E.length; t < e; t++) { - const e = E[t]; - N = []; - for (let t = 0, n = e.length, i = n - 1, r = t + 1; t < n; t++, i++, r++) i === n && (i = 0), r === n && (r = 0), N[t] = D(e[t], e[i], e[r]); - O.push(N), B = B.concat(N) - } - for (let t = 0; t < p; t++) { - const e = t / p, - n = h * Math.cos(e * Math.PI / 2), - i = u * Math.sin(e * Math.PI / 2) + d; - for (let t = 0, e = L.length; t < e; t++) { - const e = R(L[t], I[t], i); - U(e.x, e.y, -n) - } - for (let t = 0, e = E.length; t < e; t++) { - const e = E[t]; - N = O[t]; - for (let t = 0, r = e.length; t < r; t++) { - const r = R(e[t], N[t], i); - U(r.x, r.y, -n) - } - } - } - const F = u + d; - for (let t = 0; t < C; t++) { - const e = c ? R(M[t], B[t], F) : M[t]; - b ? (x.copy(y.normals[0]).multiplyScalar(e.x), A.copy(y.binormals[0]).multiplyScalar(e.y), _.copy(g[0]).add(x).add(A), U(_.x, _.y, _.z)) : U(e.x, e.y, 0) - } - for (let t = 1; t <= a; t++) - for (let e = 0; e < C; e++) { - const n = c ? R(M[e], B[e], F) : M[e]; - b ? (x.copy(y.normals[t]).multiplyScalar(n.x), A.copy(y.binormals[t]).multiplyScalar(n.y), _.copy(g[t]).add(x).add(A), U(_.x, _.y, _.z)) : U(n.x, n.y, l / a * t) - } - for (let t = p - 1; t >= 0; t--) { - const e = t / p, - n = h * Math.cos(e * Math.PI / 2), - i = u * Math.sin(e * Math.PI / 2) + d; - for (let t = 0, e = L.length; t < e; t++) { - const e = R(L[t], I[t], i); - U(e.x, e.y, l + n) - } - for (let t = 0, e = E.length; t < e; t++) { - const e = E[t]; - N = O[t]; - for (let t = 0, r = e.length; t < r; t++) { - const r = R(e[t], N[t], i); - b ? U(r.x, r.y + g[a - 1].y, g[a - 1].x + n) : U(r.x, r.y, l + n) - } - } - } - - function z(t, e) { - let n = t.length; - for (; --n >= 0;) { - const i = n; - let r = n - 1; - r < 0 && (r = t.length - 1); - for (let t = 0, n = a + 2 * p; t < n; t++) { - const n = C * t, - o = C * (t + 1); - G(e + i + n, e + r + n, e + r + o, e + i + o) - } - } - } - - function U(t, e, n) { - o.push(t), o.push(e), o.push(n) - } - - function H(t, e, r) { - V(t), V(e), V(r); - const o = i.length / 3, - s = m.generateTopUV(n, i, o - 3, o - 2, o - 1); - k(s[0]), k(s[1]), k(s[2]) - } - - function G(t, e, r, o) { - V(t), V(e), V(o), V(e), V(r), V(o); - const s = i.length / 3, - a = m.generateSideWallUV(n, i, s - 6, s - 3, s - 2, s - 1); - k(a[0]), k(a[1]), k(a[3]), k(a[1]), k(a[2]), k(a[3]) - } - - function V(t) { - i.push(o[3 * t + 0]), i.push(o[3 * t + 1]), i.push(o[3 * t + 2]) - } - - function k(t) { - r.push(t.x), r.push(t.y) - }! function() { - const t = i.length / 3; - if (c) { - let t = 0, - e = C * t; - for (let t = 0; t < P; t++) { - const n = S[t]; - H(n[2] + e, n[1] + e, n[0] + e) - } - t = a + 2 * p, e = C * t; - for (let t = 0; t < P; t++) { - const n = S[t]; - H(n[0] + e, n[1] + e, n[2] + e) - } - } else { - for (let t = 0; t < P; t++) { - const e = S[t]; - H(e[2], e[1], e[0]) - } - for (let t = 0; t < P; t++) { - const e = S[t]; - H(e[0] + C * a, e[1] + C * a, e[2] + C * a) - } - } - n.addGroup(t, i.length / 3 - t, 0) - }(), - function() { - const t = i.length / 3; - let e = 0; - z(L, e), e += L.length; - for (let t = 0, n = E.length; t < n; t++) { - const n = E[t]; - z(n, e), e += n.length - } - n.addGroup(t, i.length / 3 - t, 1) - }() - } - this.setAttribute("position", new he(i, 3)), this.setAttribute("uv", new he(r, 2)), this.computeVertexNormals() - } - toJSON() { - const t = be.prototype.toJSON.call(this); - return function(t, e, n) { - if (n.shapes = [], Array.isArray(t)) - for (let e = 0, i = t.length; e < i; e++) { - const i = t[e]; - n.shapes.push(i.uuid) - } else n.shapes.push(t.uuid); - void 0 !== e.extrudePath && (n.options.extrudePath = e.extrudePath.toJSON()); - return n - }(this.parameters.shapes, this.parameters.options, t) - } - } - const qo = { - generateTopUV: function(t, e, n, i, r) { - const o = e[3 * n], - s = e[3 * n + 1], - a = e[3 * i], - l = e[3 * i + 1], - c = e[3 * r], - h = e[3 * r + 1]; - return [new v(o, s), new v(a, l), new v(c, h)] - }, - generateSideWallUV: function(t, e, n, i, r, o) { - const s = e[3 * n], - a = e[3 * n + 1], - l = e[3 * n + 2], - c = e[3 * i], - h = e[3 * i + 1], - u = e[3 * i + 2], - d = e[3 * r], - p = e[3 * r + 1], - f = e[3 * r + 2], - m = e[3 * o], - g = e[3 * o + 1], - y = e[3 * o + 2]; - return Math.abs(a - h) < .01 ? [new v(s, 1 - l), new v(c, 1 - u), new v(d, 1 - f), new v(m, 1 - y)] : [new v(a, 1 - l), new v(h, 1 - u), new v(p, 1 - f), new v(g, 1 - y)] - } - }; - - function Yo(t, e, n) { - be.call(this), this.type = "ParametricGeometry", this.parameters = { - func: t, - slices: e, - stacks: n - }; - const i = [], - r = [], - o = [], - s = [], - a = 1e-5, - l = new T, - c = new T, - h = new T, - u = new T, - d = new T; - t.length < 3 && console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); - const p = e + 1; - for (let i = 0; i <= n; i++) { - const p = i / n; - for (let n = 0; n <= e; n++) { - const i = n / e; - t(i, p, c), r.push(c.x, c.y, c.z), i - a >= 0 ? (t(i - a, p, h), u.subVectors(c, h)) : (t(i + a, p, h), u.subVectors(h, c)), p - a >= 0 ? (t(i, p - a, h), d.subVectors(c, h)) : (t(i, p + a, h), d.subVectors(h, c)), l.crossVectors(u, d).normalize(), o.push(l.x, l.y, l.z), s.push(i, p) - } - } - for (let t = 0; t < n; t++) - for (let n = 0; n < e; n++) { - const e = t * p + n, - r = t * p + n + 1, - o = (t + 1) * p + n + 1, - s = (t + 1) * p + n; - i.push(e, r, s), i.push(r, o, s) - } - this.setIndex(i), this.setAttribute("position", new he(r, 3)), this.setAttribute("normal", new he(o, 3)), this.setAttribute("uv", new he(s, 2)) - } - Yo.prototype = Object.create(be.prototype), Yo.prototype.constructor = Yo; - class Qo extends be { - constructor(t, e = 12) { - super(), this.type = "ShapeGeometry", this.parameters = { - shapes: t, - curveSegments: e - }; - const n = [], - i = [], - r = [], - o = []; - let s = 0, - a = 0; - if (!1 === Array.isArray(t)) l(t); - else - for (let e = 0; e < t.length; e++) l(t[e]), this.addGroup(s, a, e), s += a, a = 0; - - function l(t) { - const s = i.length / 3, - l = t.extractPoints(e); - let c = l.shape; - const h = l.holes; - !1 === ko.isClockWise(c) && (c = c.reverse()); - for (let t = 0, e = h.length; t < e; t++) { - const e = h[t]; - !0 === ko.isClockWise(e) && (h[t] = e.reverse()) - } - const u = ko.triangulateShape(c, h); - for (let t = 0, e = h.length; t < e; t++) { - const e = h[t]; - c = c.concat(e) - } - for (let t = 0, e = c.length; t < e; t++) { - const e = c[t]; - i.push(e.x, e.y, 0), r.push(0, 0, 1), o.push(e.x, e.y) - } - for (let t = 0, e = u.length; t < e; t++) { - const e = u[t], - i = e[0] + s, - r = e[1] + s, - o = e[2] + s; - n.push(i, r, o), a += 3 - } - } - this.setIndex(n), this.setAttribute("position", new he(i, 3)), this.setAttribute("normal", new he(r, 3)), this.setAttribute("uv", new he(o, 2)) - } - toJSON() { - const t = be.prototype.toJSON.call(this); - return function(t, e) { - if (e.shapes = [], Array.isArray(t)) - for (let n = 0, i = t.length; n < i; n++) { - const i = t[n]; - e.shapes.push(i.uuid) - } else e.shapes.push(t.uuid); - return e - }(this.parameters.shapes, t) - } - } - class Zo extends be { - constructor(t = 1, e = 8, n = 6, i = 0, r = 2 * Math.PI, o = 0, s = Math.PI) { - super(), this.type = "SphereGeometry", this.parameters = { - radius: t, - widthSegments: e, - heightSegments: n, - phiStart: i, - phiLength: r, - thetaStart: o, - thetaLength: s - }, e = Math.max(3, Math.floor(e)), n = Math.max(2, Math.floor(n)); - const a = Math.min(o + s, Math.PI); - let l = 0; - const c = [], - h = new T, - u = new T, - d = [], - p = [], - f = [], - m = []; - for (let d = 0; d <= n; d++) { - const g = [], - v = d / n; - let y = 0; - 0 == d && 0 == o ? y = .5 / e : d == n && a == Math.PI && (y = -.5 / e); - for (let n = 0; n <= e; n++) { - const a = n / e; - h.x = -t * Math.cos(i + a * r) * Math.sin(o + v * s), h.y = t * Math.cos(o + v * s), h.z = t * Math.sin(i + a * r) * Math.sin(o + v * s), p.push(h.x, h.y, h.z), u.copy(h).normalize(), f.push(u.x, u.y, u.z), m.push(a + y, 1 - v), g.push(l++) - } - c.push(g) - } - for (let t = 0; t < n; t++) - for (let i = 0; i < e; i++) { - const e = c[t][i + 1], - r = c[t][i], - s = c[t + 1][i], - l = c[t + 1][i + 1]; - (0 !== t || o > 0) && d.push(e, r, l), (t !== n - 1 || a < Math.PI) && d.push(r, s, l) - } - this.setIndex(d), this.setAttribute("position", new he(p, 3)), this.setAttribute("normal", new he(f, 3)), this.setAttribute("uv", new he(m, 2)) - } - } - - function Jo(t) { - Jt.call(this), this.type = "ShadowMaterial", this.color = new Yt(0), this.transparent = !0, this.setValues(t) - } - - function Ko(t) { - Xe.call(this, t), this.type = "RawShaderMaterial" - } - - function $o(t) { - Jt.call(this), this.defines = { - STANDARD: "" - }, this.type = "MeshStandardMaterial", this.color = new Yt(16777215), this.roughness = 1, this.metalness = 0, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.roughnessMap = null, this.metalnessMap = null, this.alphaMap = null, this.envMap = null, this.envMapIntensity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.vertexTangents = !1, this.setValues(t) - } - - function ts(t) { - $o.call(this), this.defines = { - STANDARD: "", - PHYSICAL: "" - }, this.type = "MeshPhysicalMaterial", this.clearcoat = 0, this.clearcoatMap = null, this.clearcoatRoughness = 0, this.clearcoatRoughnessMap = null, this.clearcoatNormalScale = new v(1, 1), this.clearcoatNormalMap = null, this.reflectivity = .5, Object.defineProperty(this, "ior", { - get: function() { - return (1 + .4 * this.reflectivity) / (1 - .4 * this.reflectivity) - }, - set: function(t) { - this.reflectivity = g.clamp(2.5 * (t - 1) / (t + 1), 0, 1) - } - }), this.sheen = null, this.transmission = 0, this.transmissionMap = null, this.setValues(t) - } - - function es(t) { - Jt.call(this), this.type = "MeshPhongMaterial", this.color = new Yt(16777215), this.specular = new Yt(1118481), this.shininess = 30, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) - } - - function ns(t) { - Jt.call(this), this.defines = { - TOON: "" - }, this.type = "MeshToonMaterial", this.color = new Yt(16777215), this.map = null, this.gradientMap = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.alphaMap = null, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) - } - - function is(t) { - Jt.call(this), this.type = "MeshNormalMaterial", this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) - } - - function rs(t) { - Jt.call(this), this.type = "MeshLambertMaterial", this.color = new Yt(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) - } - - function os(t) { - Jt.call(this), this.defines = { - MATCAP: "" - }, this.type = "MeshMatcapMaterial", this.color = new Yt(16777215), this.matcap = null, this.map = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.alphaMap = null, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) - } - - function ss(t) { - Qr.call(this), this.type = "LineDashedMaterial", this.scale = 1, this.dashSize = 3, this.gapSize = 1, this.setValues(t) - } - Jo.prototype = Object.create(Jt.prototype), Jo.prototype.constructor = Jo, Jo.prototype.isShadowMaterial = !0, Jo.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this - }, Ko.prototype = Object.create(Xe.prototype), Ko.prototype.constructor = Ko, Ko.prototype.isRawShaderMaterial = !0, $o.prototype = Object.create(Jt.prototype), $o.prototype.constructor = $o, $o.prototype.isMeshStandardMaterial = !0, $o.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.defines = { - STANDARD: "" - }, this.color.copy(t.color), this.roughness = t.roughness, this.metalness = t.metalness, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.roughnessMap = t.roughnessMap, this.metalnessMap = t.metalnessMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.envMapIntensity = t.envMapIntensity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this.vertexTangents = t.vertexTangents, this - }, ts.prototype = Object.create($o.prototype), ts.prototype.constructor = ts, ts.prototype.isMeshPhysicalMaterial = !0, ts.prototype.copy = function(t) { - return $o.prototype.copy.call(this, t), this.defines = { - STANDARD: "", - PHYSICAL: "" - }, this.clearcoat = t.clearcoat, this.clearcoatMap = t.clearcoatMap, this.clearcoatRoughness = t.clearcoatRoughness, this.clearcoatRoughnessMap = t.clearcoatRoughnessMap, this.clearcoatNormalMap = t.clearcoatNormalMap, this.clearcoatNormalScale.copy(t.clearcoatNormalScale), this.reflectivity = t.reflectivity, t.sheen ? this.sheen = (this.sheen || new Yt).copy(t.sheen) : this.sheen = null, this.transmission = t.transmission, this.transmissionMap = t.transmissionMap, this - }, es.prototype = Object.create(Jt.prototype), es.prototype.constructor = es, es.prototype.isMeshPhongMaterial = !0, es.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.specular.copy(t.specular), this.shininess = t.shininess, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this - }, ns.prototype = Object.create(Jt.prototype), ns.prototype.constructor = ns, ns.prototype.isMeshToonMaterial = !0, ns.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.gradientMap = t.gradientMap, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.alphaMap = t.alphaMap, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this - }, is.prototype = Object.create(Jt.prototype), is.prototype.constructor = is, is.prototype.isMeshNormalMaterial = !0, is.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this - }, rs.prototype = Object.create(Jt.prototype), rs.prototype.constructor = rs, rs.prototype.isMeshLambertMaterial = !0, rs.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this - }, os.prototype = Object.create(Jt.prototype), os.prototype.constructor = os, os.prototype.isMeshMatcapMaterial = !0, os.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.defines = { - MATCAP: "" - }, this.color.copy(t.color), this.matcap = t.matcap, this.map = t.map, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.alphaMap = t.alphaMap, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this - }, ss.prototype = Object.create(Qr.prototype), ss.prototype.constructor = ss, ss.prototype.isLineDashedMaterial = !0, ss.prototype.copy = function(t) { - return Qr.prototype.copy.call(this, t), this.scale = t.scale, this.dashSize = t.dashSize, this.gapSize = t.gapSize, this - }; - var as = Object.freeze({ - __proto__: null, - ShadowMaterial: Jo, - SpriteMaterial: mr, - RawShaderMaterial: Ko, - ShaderMaterial: Xe, - PointsMaterial: so, - MeshPhysicalMaterial: ts, - MeshStandardMaterial: $o, - MeshPhongMaterial: es, - MeshToonMaterial: ns, - MeshNormalMaterial: is, - MeshLambertMaterial: rs, - MeshDepthMaterial: Ki, - MeshDistanceMaterial: $i, - MeshBasicMaterial: Kt, - MeshMatcapMaterial: os, - LineDashedMaterial: ss, - LineBasicMaterial: Qr, - Material: Jt - }); - const ls = { - arraySlice: function(t, e, n) { - return ls.isTypedArray(t) ? new t.constructor(t.subarray(e, void 0 !== n ? n : t.length)) : t.slice(e, n) - }, - convertArray: function(t, e, n) { - return !t || !n && t.constructor === e ? t : "number" == typeof e.BYTES_PER_ELEMENT ? new e(t) : Array.prototype.slice.call(t) - }, - isTypedArray: function(t) { - return ArrayBuffer.isView(t) && !(t instanceof DataView) - }, - getKeyframeOrder: function(t) { - const e = t.length, - n = new Array(e); - for (let t = 0; t !== e; ++t) n[t] = t; - return n.sort((function(e, n) { - return t[e] - t[n] - })), n - }, - sortedArray: function(t, e, n) { - const i = t.length, - r = new t.constructor(i); - for (let o = 0, s = 0; s !== i; ++o) { - const i = n[o] * e; - for (let n = 0; n !== e; ++n) r[s++] = t[i + n] - } - return r - }, - flattenJSON: function(t, e, n, i) { - let r = 1, - o = t[0]; - for (; void 0 !== o && void 0 === o[i];) o = t[r++]; - if (void 0 === o) return; - let s = o[i]; - if (void 0 !== s) - if (Array.isArray(s)) - do { - s = o[i], void 0 !== s && (e.push(o.time), n.push.apply(n, s)), o = t[r++] - } while (void 0 !== o); - else if (void 0 !== s.toArray) - do { - s = o[i], void 0 !== s && (e.push(o.time), s.toArray(n, n.length)), o = t[r++] - } while (void 0 !== o); - else - do { - s = o[i], void 0 !== s && (e.push(o.time), n.push(s)), o = t[r++] - } while (void 0 !== o) - }, - subclip: function(t, e, n, i, r = 30) { - const o = t.clone(); - o.name = e; - const s = []; - for (let t = 0; t < o.tracks.length; ++t) { - const e = o.tracks[t], - a = e.getValueSize(), - l = [], - c = []; - for (let t = 0; t < e.times.length; ++t) { - const o = e.times[t] * r; - if (!(o < n || o >= i)) { - l.push(e.times[t]); - for (let n = 0; n < a; ++n) c.push(e.values[t * a + n]) - } - } - 0 !== l.length && (e.times = ls.convertArray(l, e.times.constructor), e.values = ls.convertArray(c, e.values.constructor), s.push(e)) - } - o.tracks = s; - let a = 1 / 0; - for (let t = 0; t < o.tracks.length; ++t) a > o.tracks[t].times[0] && (a = o.tracks[t].times[0]); - for (let t = 0; t < o.tracks.length; ++t) o.tracks[t].shift(-1 * a); - return o.resetDuration(), o - }, - makeClipAdditive: function(t, e = 0, n = t, i = 30) { - i <= 0 && (i = 30); - const r = n.tracks.length, - o = e / i; - for (let e = 0; e < r; ++e) { - const i = n.tracks[e], - r = i.ValueTypeName; - if ("bool" === r || "string" === r) continue; - const s = t.tracks.find((function(t) { - return t.name === i.name && t.ValueTypeName === r - })); - if (void 0 === s) continue; - let a = 0; - const l = i.getValueSize(); - i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (a = l / 3); - let c = 0; - const h = s.getValueSize(); - s.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (c = h / 3); - const u = i.times.length - 1; - let d; - if (o <= i.times[0]) { - const t = a, - e = l - a; - d = ls.arraySlice(i.values, t, e) - } else if (o >= i.times[u]) { - const t = u * l + a, - e = t + l - a; - d = ls.arraySlice(i.values, t, e) - } else { - const t = i.createInterpolant(), - e = a, - n = l - a; - t.evaluate(o), d = ls.arraySlice(t.resultBuffer, e, n) - } - if ("quaternion" === r) { - (new S).fromArray(d).normalize().conjugate().toArray(d) - } - const p = s.times.length; - for (let t = 0; t < p; ++t) { - const e = t * h + c; - if ("quaternion" === r) S.multiplyQuaternionsFlat(s.values, e, d, 0, s.values, e); - else { - const t = h - 2 * c; - for (let n = 0; n < t; ++n) s.values[e + n] -= d[n] - } - } - } - return t.blendMode = 2501, t - } - }; - - function cs(t, e, n, i) { - this.parameterPositions = t, this._cachedIndex = 0, this.resultBuffer = void 0 !== i ? i : new e.constructor(n), this.sampleValues = e, this.valueSize = n - } - - function hs(t, e, n, i) { - cs.call(this, t, e, n, i), this._weightPrev = -0, this._offsetPrev = -0, this._weightNext = -0, this._offsetNext = -0 - } - - function us(t, e, n, i) { - cs.call(this, t, e, n, i) - } - - function ds(t, e, n, i) { - cs.call(this, t, e, n, i) - } - - function ps(t, e, n, i) { - if (void 0 === t) throw new Error("THREE.KeyframeTrack: track name is undefined"); - if (void 0 === e || 0 === e.length) throw new Error("THREE.KeyframeTrack: no keyframes in track named " + t); - this.name = t, this.times = ls.convertArray(e, this.TimeBufferType), this.values = ls.convertArray(n, this.ValueBufferType), this.setInterpolation(i || this.DefaultInterpolation) - } - - function fs(t, e, n) { - ps.call(this, t, e, n) - } - - function ms(t, e, n, i) { - ps.call(this, t, e, n, i) - } - - function gs(t, e, n, i) { - ps.call(this, t, e, n, i) - } - - function vs(t, e, n, i) { - cs.call(this, t, e, n, i) - } - - function ys(t, e, n, i) { - ps.call(this, t, e, n, i) - } - - function As(t, e, n, i) { - ps.call(this, t, e, n, i) - } - - function xs(t, e, n, i) { - ps.call(this, t, e, n, i) - } - - function _s(t, e = -1, n, i = 2500) { - this.name = t, this.tracks = n, this.duration = e, this.blendMode = i, this.uuid = g.generateUUID(), this.duration < 0 && this.resetDuration() - } - - function bs(t) { - if (void 0 === t.type) throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); - const e = function(t) { - switch (t.toLowerCase()) { - case "scalar": - case "double": - case "float": - case "number": - case "integer": - return gs; - case "vector": - case "vector2": - case "vector3": - case "vector4": - return xs; - case "color": - return ms; - case "quaternion": - return ys; - case "bool": - case "boolean": - return fs; - case "string": - return As - } - throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + t) - }(t.type); - if (void 0 === t.times) { - const e = [], - n = []; - ls.flattenJSON(t.keys, e, n, "value"), t.times = e, t.values = n - } - return void 0 !== e.parse ? e.parse(t) : new e(t.name, t.times, t.values, t.interpolation) - } - Object.assign(cs.prototype, { - evaluate: function(t) { - const e = this.parameterPositions; - let n = this._cachedIndex, - i = e[n], - r = e[n - 1]; - t: { - e: { - let o;n: { - i: if (!(t < i)) { - for (let o = n + 2;;) { - if (void 0 === i) { - if (t < r) break i; - return n = e.length, this._cachedIndex = n, this.afterEnd_(n - 1, t, r) - } - if (n === o) break; - if (r = i, i = e[++n], t < i) break e - } - o = e.length; - break n - }if (t >= r) break t; { - const s = e[1]; - t < s && (n = 2, r = s); - for (let o = n - 2;;) { - if (void 0 === r) return this._cachedIndex = 0, this.beforeStart_(0, t, i); - if (n === o) break; - if (i = r, r = e[--n - 1], t >= r) break e - } - o = n, n = 0 - } - } - for (; n < o;) { - const i = n + o >>> 1; - t < e[i] ? o = i : n = i + 1 - } - if (i = e[n], r = e[n - 1], void 0 === r) return this._cachedIndex = 0, - this.beforeStart_(0, t, i); - if (void 0 === i) return n = e.length, - this._cachedIndex = n, - this.afterEnd_(n - 1, r, t) - } - this._cachedIndex = n, - this.intervalChanged_(n, r, i) - } - return this.interpolate_(n, r, t, i) - }, - settings: null, - DefaultSettings_: {}, - getSettings_: function() { - return this.settings || this.DefaultSettings_ - }, - copySampleValue_: function(t) { - const e = this.resultBuffer, - n = this.sampleValues, - i = this.valueSize, - r = t * i; - for (let t = 0; t !== i; ++t) e[t] = n[r + t]; - return e - }, - interpolate_: function() { - throw new Error("call to abstract method") - }, - intervalChanged_: function() {} - }), Object.assign(cs.prototype, { - beforeStart_: cs.prototype.copySampleValue_, - afterEnd_: cs.prototype.copySampleValue_ - }), hs.prototype = Object.assign(Object.create(cs.prototype), { - constructor: hs, - DefaultSettings_: { - endingStart: 2400, - endingEnd: 2400 - }, - intervalChanged_: function(t, e, n) { - const i = this.parameterPositions; - let r = t - 2, - o = t + 1, - s = i[r], - a = i[o]; - if (void 0 === s) switch (this.getSettings_().endingStart) { - case 2401: - r = t, s = 2 * e - n; - break; - case 2402: - r = i.length - 2, s = e + i[r] - i[r + 1]; - break; - default: - r = t, s = n - } - if (void 0 === a) switch (this.getSettings_().endingEnd) { - case 2401: - o = t, a = 2 * n - e; - break; - case 2402: - o = 1, a = n + i[1] - i[0]; - break; - default: - o = t - 1, a = e - } - const l = .5 * (n - e), - c = this.valueSize; - this._weightPrev = l / (e - s), this._weightNext = l / (a - n), this._offsetPrev = r * c, this._offsetNext = o * c - }, - interpolate_: function(t, e, n, i) { - const r = this.resultBuffer, - o = this.sampleValues, - s = this.valueSize, - a = t * s, - l = a - s, - c = this._offsetPrev, - h = this._offsetNext, - u = this._weightPrev, - d = this._weightNext, - p = (n - e) / (i - e), - f = p * p, - m = f * p, - g = -u * m + 2 * u * f - u * p, - v = (1 + u) * m + (-1.5 - 2 * u) * f + (-.5 + u) * p + 1, - y = (-1 - d) * m + (1.5 + d) * f + .5 * p, - A = d * m - d * f; - for (let t = 0; t !== s; ++t) r[t] = g * o[c + t] + v * o[l + t] + y * o[a + t] + A * o[h + t]; - return r - } - }), us.prototype = Object.assign(Object.create(cs.prototype), { - constructor: us, - interpolate_: function(t, e, n, i) { - const r = this.resultBuffer, - o = this.sampleValues, - s = this.valueSize, - a = t * s, - l = a - s, - c = (n - e) / (i - e), - h = 1 - c; - for (let t = 0; t !== s; ++t) r[t] = o[l + t] * h + o[a + t] * c; - return r - } - }), ds.prototype = Object.assign(Object.create(cs.prototype), { - constructor: ds, - interpolate_: function(t) { - return this.copySampleValue_(t - 1) - } - }), Object.assign(ps, { - toJSON: function(t) { - const e = t.constructor; - let n; - if (void 0 !== e.toJSON) n = e.toJSON(t); - else { - n = { - name: t.name, - times: ls.convertArray(t.times, Array), - values: ls.convertArray(t.values, Array) - }; - const e = t.getInterpolation(); - e !== t.DefaultInterpolation && (n.interpolation = e) - } - return n.type = t.ValueTypeName, n - } - }), Object.assign(ps.prototype, { - constructor: ps, - TimeBufferType: Float32Array, - ValueBufferType: Float32Array, - DefaultInterpolation: 2301, - InterpolantFactoryMethodDiscrete: function(t) { - return new ds(this.times, this.values, this.getValueSize(), t) - }, - InterpolantFactoryMethodLinear: function(t) { - return new us(this.times, this.values, this.getValueSize(), t) - }, - InterpolantFactoryMethodSmooth: function(t) { - return new hs(this.times, this.values, this.getValueSize(), t) - }, - setInterpolation: function(t) { - let e; - switch (t) { - case 2300: - e = this.InterpolantFactoryMethodDiscrete; - break; - case 2301: - e = this.InterpolantFactoryMethodLinear; - break; - case 2302: - e = this.InterpolantFactoryMethodSmooth - } - if (void 0 === e) { - const e = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; - if (void 0 === this.createInterpolant) { - if (t === this.DefaultInterpolation) throw new Error(e); - this.setInterpolation(this.DefaultInterpolation) - } - return console.warn("THREE.KeyframeTrack:", e), this - } - return this.createInterpolant = e, this - }, - 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(t) { - if (0 !== t) { - const e = this.times; - for (let n = 0, i = e.length; n !== i; ++n) e[n] += t - } - return this - }, - scale: function(t) { - if (1 !== t) { - const e = this.times; - for (let n = 0, i = e.length; n !== i; ++n) e[n] *= t - } - return this - }, - trim: function(t, e) { - const n = this.times, - i = n.length; - let r = 0, - o = i - 1; - for (; r !== i && n[r] < t;) ++r; - for (; - 1 !== o && n[o] > e;) --o; - if (++o, 0 !== r || o !== i) { - r >= o && (o = Math.max(o, 1), r = o - 1); - const t = this.getValueSize(); - this.times = ls.arraySlice(n, r, o), this.values = ls.arraySlice(this.values, r * t, o * t) - } - return this - }, - validate: function() { - let t = !0; - const e = this.getValueSize(); - e - Math.floor(e) != 0 && (console.error("THREE.KeyframeTrack: Invalid value size in track.", this), t = !1); - const n = this.times, - i = this.values, - r = n.length; - 0 === r && (console.error("THREE.KeyframeTrack: Track is empty.", this), t = !1); - let o = null; - for (let e = 0; e !== r; e++) { - const i = n[e]; - if ("number" == typeof i && isNaN(i)) { - console.error("THREE.KeyframeTrack: Time is not a valid number.", this, e, i), t = !1; - break - } - if (null !== o && o > i) { - console.error("THREE.KeyframeTrack: Out of order keys.", this, e, i, o), t = !1; - break - } - o = i - } - if (void 0 !== i && ls.isTypedArray(i)) - for (let e = 0, n = i.length; e !== n; ++e) { - const n = i[e]; - if (isNaN(n)) { - console.error("THREE.KeyframeTrack: Value is not a valid number.", this, e, n), t = !1; - break - } - } - return t - }, - optimize: function() { - const t = ls.arraySlice(this.times), - e = ls.arraySlice(this.values), - n = this.getValueSize(), - i = 2302 === this.getInterpolation(), - r = t.length - 1; - let o = 1; - for (let s = 1; s < r; ++s) { - let r = !1; - const a = t[s]; - if (a !== t[s + 1] && (1 !== s || a !== t[0])) - if (i) r = !0; - else { - const t = s * n, - i = t - n, - o = t + n; - for (let s = 0; s !== n; ++s) { - const n = e[t + s]; - if (n !== e[i + s] || n !== e[o + s]) { - r = !0; - break - } - } - } if (r) { - if (s !== o) { - t[o] = t[s]; - const i = s * n, - r = o * n; - for (let t = 0; t !== n; ++t) e[r + t] = e[i + t] - }++o - } - } - if (r > 0) { - t[o] = t[r]; - for (let t = r * n, i = o * n, s = 0; s !== n; ++s) e[i + s] = e[t + s]; - ++o - } - return o !== t.length ? (this.times = ls.arraySlice(t, 0, o), this.values = ls.arraySlice(e, 0, o * n)) : (this.times = t, this.values = e), this - }, - clone: function() { - const t = ls.arraySlice(this.times, 0), - e = ls.arraySlice(this.values, 0), - n = new(0, this.constructor)(this.name, t, e); - return n.createInterpolant = this.createInterpolant, n - } - }), fs.prototype = Object.assign(Object.create(ps.prototype), { - constructor: fs, - ValueTypeName: "bool", - ValueBufferType: Array, - DefaultInterpolation: 2300, - InterpolantFactoryMethodLinear: void 0, - InterpolantFactoryMethodSmooth: void 0 - }), ms.prototype = Object.assign(Object.create(ps.prototype), { - constructor: ms, - ValueTypeName: "color" - }), gs.prototype = Object.assign(Object.create(ps.prototype), { - constructor: gs, - ValueTypeName: "number" - }), vs.prototype = Object.assign(Object.create(cs.prototype), { - constructor: vs, - interpolate_: function(t, e, n, i) { - const r = this.resultBuffer, - o = this.sampleValues, - s = this.valueSize, - a = (n - e) / (i - e); - let l = t * s; - for (let t = l + s; l !== t; l += 4) S.slerpFlat(r, 0, o, l - s, o, l, a); - return r - } - }), ys.prototype = Object.assign(Object.create(ps.prototype), { - constructor: ys, - ValueTypeName: "quaternion", - DefaultInterpolation: 2301, - InterpolantFactoryMethodLinear: function(t) { - return new vs(this.times, this.values, this.getValueSize(), t) - }, - InterpolantFactoryMethodSmooth: void 0 - }), As.prototype = Object.assign(Object.create(ps.prototype), { - constructor: As, - ValueTypeName: "string", - ValueBufferType: Array, - DefaultInterpolation: 2300, - InterpolantFactoryMethodLinear: void 0, - InterpolantFactoryMethodSmooth: void 0 - }), xs.prototype = Object.assign(Object.create(ps.prototype), { - constructor: xs, - ValueTypeName: "vector" - }), Object.assign(_s, { - parse: function(t) { - const e = [], - n = t.tracks, - i = 1 / (t.fps || 1); - for (let t = 0, r = n.length; t !== r; ++t) e.push(bs(n[t]).scale(i)); - const r = new _s(t.name, t.duration, e, t.blendMode); - return r.uuid = t.uuid, r - }, - toJSON: function(t) { - const e = [], - n = t.tracks, - i = { - name: t.name, - duration: t.duration, - tracks: e, - uuid: t.uuid, - blendMode: t.blendMode - }; - for (let t = 0, i = n.length; t !== i; ++t) e.push(ps.toJSON(n[t])); - return i - }, - CreateFromMorphTargetSequence: function(t, e, n, i) { - const r = e.length, - o = []; - for (let t = 0; t < r; t++) { - let s = [], - a = []; - s.push((t + r - 1) % r, t, (t + 1) % r), a.push(0, 1, 0); - const l = ls.getKeyframeOrder(s); - s = ls.sortedArray(s, 1, l), a = ls.sortedArray(a, 1, l), i || 0 !== s[0] || (s.push(r), a.push(a[0])), o.push(new gs(".morphTargetInfluences[" + e[t].name + "]", s, a).scale(1 / n)) - } - return new _s(t, -1, o) - }, - findByName: function(t, e) { - let n = t; - if (!Array.isArray(t)) { - const e = t; - n = e.geometry && e.geometry.animations || e.animations - } - for (let t = 0; t < n.length; t++) - if (n[t].name === e) return n[t]; - return null - }, - CreateClipsFromMorphTargetSequences: function(t, e, n) { - const i = {}, - r = /^([\w-]*?)([\d]+)$/; - for (let e = 0, n = t.length; e < n; e++) { - const n = t[e], - o = n.name.match(r); - if (o && o.length > 1) { - const t = o[1]; - let e = i[t]; - e || (i[t] = e = []), e.push(n) - } - } - const o = []; - for (const t in i) o.push(_s.CreateFromMorphTargetSequence(t, i[t], e, n)); - return o - }, - parseAnimation: function(t, e) { - if (!t) return console.error("THREE.AnimationClip: No animation in JSONLoader data."), null; - const n = function(t, e, n, i, r) { - if (0 !== n.length) { - const o = [], - s = []; - ls.flattenJSON(n, o, s, i), 0 !== o.length && r.push(new t(e, o, s)) - } - }, - i = [], - r = t.name || "default", - o = t.fps || 30, - s = t.blendMode; - let a = t.length || -1; - const l = t.hierarchy || []; - for (let t = 0; t < l.length; t++) { - const r = l[t].keys; - if (r && 0 !== r.length) - if (r[0].morphTargets) { - const t = {}; - let e; - for (e = 0; e < r.length; e++) - if (r[e].morphTargets) - for (let n = 0; n < r[e].morphTargets.length; n++) t[r[e].morphTargets[n]] = -1; - for (const n in t) { - const t = [], - o = []; - for (let i = 0; i !== r[e].morphTargets.length; ++i) { - const i = r[e]; - t.push(i.time), o.push(i.morphTarget === n ? 1 : 0) - } - i.push(new gs(".morphTargetInfluence[" + n + "]", t, o)) - } - a = t.length * (o || 1) - } else { - const o = ".bones[" + e[t].name + "]"; - n(xs, o + ".position", r, "pos", i), n(ys, o + ".quaternion", r, "rot", i), n(xs, o + ".scale", r, "scl", i) - } - } - if (0 === i.length) return null; - return new _s(r, a, i, s) - } - }), Object.assign(_s.prototype, { - resetDuration: function() { - let t = 0; - for (let e = 0, n = this.tracks.length; e !== n; ++e) { - const n = this.tracks[e]; - t = Math.max(t, n.times[n.times.length - 1]) - } - return this.duration = t, this - }, - trim: function() { - for (let t = 0; t < this.tracks.length; t++) this.tracks[t].trim(0, this.duration); - return this - }, - validate: function() { - let t = !0; - for (let e = 0; e < this.tracks.length; e++) t = t && this.tracks[e].validate(); - return t - }, - optimize: function() { - for (let t = 0; t < this.tracks.length; t++) this.tracks[t].optimize(); - return this - }, - clone: function() { - const t = []; - for (let e = 0; e < this.tracks.length; e++) t.push(this.tracks[e].clone()); - return new _s(this.name, this.duration, t, this.blendMode) - }, - toJSON: function() { - return _s.toJSON(this) - } - }); - const ws = { - enabled: !1, - files: {}, - add: function(t, e) { - !1 !== this.enabled && (this.files[t] = e) - }, - get: function(t) { - if (!1 !== this.enabled) return this.files[t] - }, - remove: function(t) { - delete this.files[t] - }, - clear: function() { - this.files = {} - } - }; - const Ms = new function(t, e, n) { - const i = this; - let r = !1, - o = 0, - s = 0, - a = void 0; - const l = []; - this.onStart = void 0, this.onLoad = t, this.onProgress = e, this.onError = n, this.itemStart = function(t) { - s++, !1 === r && void 0 !== i.onStart && i.onStart(t, o, s), r = !0 - }, this.itemEnd = function(t) { - o++, void 0 !== i.onProgress && i.onProgress(t, o, s), o === s && (r = !1, void 0 !== i.onLoad && i.onLoad()) - }, this.itemError = function(t) { - void 0 !== i.onError && i.onError(t) - }, this.resolveURL = function(t) { - return a ? a(t) : t - }, this.setURLModifier = function(t) { - return a = t, this - }, this.addHandler = function(t, e) { - return l.push(t, e), this - }, this.removeHandler = function(t) { - const e = l.indexOf(t); - return -1 !== e && l.splice(e, 2), this - }, this.getHandler = function(t) { - for (let e = 0, n = l.length; e < n; e += 2) { - const n = l[e], - i = l[e + 1]; - if (n.global && (n.lastIndex = 0), n.test(t)) return i - } - return null - } - }; - - function Es(t) { - this.manager = void 0 !== t ? t : Ms, this.crossOrigin = "anonymous", this.withCredentials = !1, this.path = "", this.resourcePath = "", this.requestHeader = {} - } - Object.assign(Es.prototype, { - load: function() {}, - loadAsync: function(t, e) { - const n = this; - return new Promise((function(i, r) { - n.load(t, i, e, r) - })) - }, - parse: function() {}, - setCrossOrigin: function(t) { - return this.crossOrigin = t, this - }, - setWithCredentials: function(t) { - return this.withCredentials = t, this - }, - setPath: function(t) { - return this.path = t, this - }, - setResourcePath: function(t) { - return this.resourcePath = t, this - }, - setRequestHeader: function(t) { - return this.requestHeader = t, this - } - }); - const Ss = {}; - - function Ts(t) { - Es.call(this, t) - } - - function Ls(t) { - Es.call(this, t) - } - - function Rs(t) { - Es.call(this, t) - } - - function Cs(t) { - Es.call(this, t) - } - - function Ps(t) { - Es.call(this, t) - } - - function Ds(t) { - Es.call(this, t) - } - - function Is(t) { - Es.call(this, t) - } - - function Os() { - this.type = "Curve", this.arcLengthDivisions = 200 - } - - function Ns(t, e, n, i, r, o, s, a) { - Os.call(this), this.type = "EllipseCurve", this.aX = t || 0, this.aY = e || 0, this.xRadius = n || 1, this.yRadius = i || 1, this.aStartAngle = r || 0, this.aEndAngle = o || 2 * Math.PI, this.aClockwise = s || !1, this.aRotation = a || 0 - } - - function Bs(t, e, n, i, r, o) { - Ns.call(this, t, e, n, n, i, r, o), this.type = "ArcCurve" - } - - function Fs() { - let t = 0, - e = 0, - n = 0, - i = 0; - - function r(r, o, s, a) { - t = r, e = s, n = -3 * r + 3 * o - 2 * s - a, i = 2 * r - 2 * o + s + a - } - return { - initCatmullRom: function(t, e, n, i, o) { - r(e, n, o * (n - t), o * (i - e)) - }, - initNonuniformCatmullRom: function(t, e, n, i, o, s, a) { - let l = (e - t) / o - (n - t) / (o + s) + (n - e) / s, - c = (n - e) / s - (i - e) / (s + a) + (i - n) / a; - l *= s, c *= s, r(e, n, l, c) - }, - calc: function(r) { - const o = r * r; - return t + e * r + n * o + i * (o * r) - } - } - } - Ts.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Ts, - load: function(t, e, n, i) { - void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); - const r = this, - o = ws.get(t); - if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { - e && e(o), r.manager.itemEnd(t) - }), 0), o; - if (void 0 !== Ss[t]) return void Ss[t].push({ - onLoad: e, - onProgress: n, - onError: i - }); - const s = t.match(/^data:(.*?)(;base64)?,(.*)$/); - let a; - if (s) { - const n = s[1], - o = !!s[2]; - let a = s[3]; - a = decodeURIComponent(a), o && (a = atob(a)); - try { - let i; - const o = (this.responseType || "").toLowerCase(); - switch (o) { - case "arraybuffer": - case "blob": - const t = new Uint8Array(a.length); - for (let e = 0; e < a.length; e++) t[e] = a.charCodeAt(e); - i = "blob" === o ? new Blob([t.buffer], { - type: n - }) : t.buffer; - break; - case "document": - const e = new DOMParser; - i = e.parseFromString(a, n); - break; - case "json": - i = JSON.parse(a); - break; - default: - i = a - } - setTimeout((function() { - e && e(i), r.manager.itemEnd(t) - }), 0) - } catch (e) { - setTimeout((function() { - i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) - }), 0) - } - } else { - Ss[t] = [], Ss[t].push({ - onLoad: e, - onProgress: n, - onError: i - }), a = new XMLHttpRequest, a.open("GET", t, !0), a.addEventListener("load", (function(e) { - const n = this.response, - i = Ss[t]; - if (delete Ss[t], 200 === this.status || 0 === this.status) { - 0 === this.status && console.warn("THREE.FileLoader: HTTP Status 0 received."), ws.add(t, n); - for (let t = 0, e = i.length; t < e; t++) { - const e = i[t]; - e.onLoad && e.onLoad(n) - } - r.manager.itemEnd(t) - } else { - for (let t = 0, n = i.length; t < n; t++) { - const n = i[t]; - n.onError && n.onError(e) - } - r.manager.itemError(t), r.manager.itemEnd(t) - } - }), !1), a.addEventListener("progress", (function(e) { - const n = Ss[t]; - for (let t = 0, i = n.length; t < i; t++) { - const i = n[t]; - i.onProgress && i.onProgress(e) - } - }), !1), a.addEventListener("error", (function(e) { - const n = Ss[t]; - delete Ss[t]; - for (let t = 0, i = n.length; t < i; t++) { - const i = n[t]; - i.onError && i.onError(e) - } - r.manager.itemError(t), r.manager.itemEnd(t) - }), !1), a.addEventListener("abort", (function(e) { - const n = Ss[t]; - delete Ss[t]; - for (let t = 0, i = n.length; t < i; t++) { - const i = n[t]; - i.onError && i.onError(e) - } - r.manager.itemError(t), r.manager.itemEnd(t) - }), !1), void 0 !== this.responseType && (a.responseType = this.responseType), void 0 !== this.withCredentials && (a.withCredentials = this.withCredentials), a.overrideMimeType && a.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain"); - for (const t in this.requestHeader) a.setRequestHeader(t, this.requestHeader[t]); - a.send(null) - } - return r.manager.itemStart(t), a - }, - setResponseType: function(t) { - return this.responseType = t, this - }, - setMimeType: function(t) { - return this.mimeType = t, this - } - }), Ls.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Ls, - load: function(t, e, n, i) { - const r = this, - o = new Ts(r.manager); - o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { - try { - e(r.parse(JSON.parse(n))) - } catch (e) { - i ? i(e) : console.error(e), r.manager.itemError(t) - } - }), n, i) - }, - parse: function(t) { - const e = []; - for (let n = 0; n < t.length; n++) { - const i = _s.parse(t[n]); - e.push(i) - } - return e - } - }), Rs.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Rs, - load: function(t, e, n, i) { - const r = this, - o = [], - s = new mo, - a = new Ts(this.manager); - a.setPath(this.path), a.setResponseType("arraybuffer"), a.setRequestHeader(this.requestHeader), a.setWithCredentials(r.withCredentials); - let l = 0; - - function c(c) { - a.load(t[c], (function(t) { - const n = r.parse(t, !0); - o[c] = { - width: n.width, - height: n.height, - format: n.format, - mipmaps: n.mipmaps - }, l += 1, 6 === l && (1 === n.mipmapCount && (s.minFilter = 1006), s.image = o, s.format = n.format, s.needsUpdate = !0, e && e(s)) - }), n, i) - } - if (Array.isArray(t)) - for (let e = 0, n = t.length; e < n; ++e) c(e); - else a.load(t, (function(t) { - const n = r.parse(t, !0); - if (n.isCubemap) { - const t = n.mipmaps.length / n.mipmapCount; - for (let e = 0; e < t; e++) { - o[e] = { - mipmaps: [] - }; - for (let t = 0; t < n.mipmapCount; t++) o[e].mipmaps.push(n.mipmaps[e * n.mipmapCount + t]), o[e].format = n.format, o[e].width = n.width, o[e].height = n.height - } - s.image = o - } else s.image.width = n.width, s.image.height = n.height, s.mipmaps = n.mipmaps; - 1 === n.mipmapCount && (s.minFilter = 1006), s.format = n.format, s.needsUpdate = !0, e && e(s) - }), n, i); - return s - } - }), Cs.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Cs, - load: function(t, e, n, i) { - void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); - const r = this, - o = ws.get(t); - if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { - e && e(o), r.manager.itemEnd(t) - }), 0), o; - const s = document.createElementNS("http://www.w3.org/1999/xhtml", "img"); - - function a() { - s.removeEventListener("load", a, !1), s.removeEventListener("error", l, !1), ws.add(t, this), e && e(this), r.manager.itemEnd(t) - } - - function l(e) { - s.removeEventListener("load", a, !1), s.removeEventListener("error", l, !1), i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) - } - return s.addEventListener("load", a, !1), s.addEventListener("error", l, !1), "data:" !== t.substr(0, 5) && void 0 !== this.crossOrigin && (s.crossOrigin = this.crossOrigin), r.manager.itemStart(t), s.src = t, s - } - }), Ps.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Ps, - load: function(t, e, n, i) { - const r = new Ze, - o = new Cs(this.manager); - o.setCrossOrigin(this.crossOrigin), o.setPath(this.path); - let s = 0; - - function a(n) { - o.load(t[n], (function(t) { - r.images[n] = t, s++, 6 === s && (r.needsUpdate = !0, e && e(r)) - }), void 0, i) - } - for (let e = 0; e < t.length; ++e) a(e); - return r - } - }), Ds.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Ds, - load: function(t, e, n, i) { - const r = this, - o = new Ke, - s = new Ts(this.manager); - return s.setResponseType("arraybuffer"), s.setRequestHeader(this.requestHeader), s.setPath(this.path), s.setWithCredentials(r.withCredentials), s.load(t, (function(t) { - const n = r.parse(t); - n && (void 0 !== n.image ? o.image = n.image : void 0 !== n.data && (o.image.width = n.width, o.image.height = n.height, o.image.data = n.data), o.wrapS = void 0 !== n.wrapS ? n.wrapS : 1001, o.wrapT = void 0 !== n.wrapT ? n.wrapT : 1001, o.magFilter = void 0 !== n.magFilter ? n.magFilter : 1006, o.minFilter = void 0 !== n.minFilter ? n.minFilter : 1006, o.anisotropy = void 0 !== n.anisotropy ? n.anisotropy : 1, void 0 !== n.encoding && (o.encoding = n.encoding), void 0 !== n.flipY && (o.flipY = n.flipY), void 0 !== n.format && (o.format = n.format), void 0 !== n.type && (o.type = n.type), void 0 !== n.mipmaps && (o.mipmaps = n.mipmaps, o.minFilter = 1008), 1 === n.mipmapCount && (o.minFilter = 1006), o.needsUpdate = !0, e && e(o, n)) - }), n, i), o - } - }), Is.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Is, - load: function(t, e, n, i) { - const r = new b, - o = new Cs(this.manager); - return o.setCrossOrigin(this.crossOrigin), o.setPath(this.path), o.load(t, (function(n) { - r.image = n; - const i = t.search(/\.jpe?g($|\?)/i) > 0 || 0 === t.search(/^data\:image\/jpeg/); - r.format = i ? 1022 : 1023, r.needsUpdate = !0, void 0 !== e && e(r) - }), n, i), r - } - }), Object.assign(Os.prototype, { - getPoint: function() { - return console.warn("THREE.Curve: .getPoint() not implemented."), null - }, - getPointAt: function(t, e) { - const n = this.getUtoTmapping(t); - return this.getPoint(n, e) - }, - getPoints: function(t = 5) { - const e = []; - for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)); - return e - }, - getSpacedPoints: function(t = 5) { - const e = []; - for (let n = 0; n <= t; n++) e.push(this.getPointAt(n / t)); - return e - }, - getLength: function() { - const t = this.getLengths(); - return t[t.length - 1] - }, - getLengths: function(t) { - if (void 0 === t && (t = this.arcLengthDivisions), this.cacheArcLengths && this.cacheArcLengths.length === t + 1 && !this.needsUpdate) return this.cacheArcLengths; - this.needsUpdate = !1; - const e = []; - let n, i = this.getPoint(0), - r = 0; - e.push(0); - for (let o = 1; o <= t; o++) n = this.getPoint(o / t), r += n.distanceTo(i), e.push(r), i = n; - return this.cacheArcLengths = e, e - }, - updateArcLengths: function() { - this.needsUpdate = !0, this.getLengths() - }, - getUtoTmapping: function(t, e) { - const n = this.getLengths(); - let i = 0; - const r = n.length; - let o; - o = e || t * n[r - 1]; - let s, a = 0, - l = r - 1; - for (; a <= l;) - if (i = Math.floor(a + (l - a) / 2), s = n[i] - o, s < 0) a = i + 1; - else { - if (!(s > 0)) { - l = i; - break - } - l = i - 1 - } if (i = l, n[i] === o) return i / (r - 1); - const c = n[i]; - return (i + (o - c) / (n[i + 1] - c)) / (r - 1) - }, - getTangent: function(t, e) { - let n = t - 1e-4, - i = t + 1e-4; - n < 0 && (n = 0), i > 1 && (i = 1); - const r = this.getPoint(n), - o = this.getPoint(i), - s = e || (r.isVector2 ? new v : new T); - return s.copy(o).sub(r).normalize(), s - }, - getTangentAt: function(t, e) { - const n = this.getUtoTmapping(t); - return this.getTangent(n, e) - }, - computeFrenetFrames: function(t, e) { - const n = new T, - i = [], - r = [], - o = [], - s = new T, - a = new et; - for (let e = 0; e <= t; e++) { - const n = e / t; - i[e] = this.getTangentAt(n, new T), i[e].normalize() - } - r[0] = new T, o[0] = new T; - let l = Number.MAX_VALUE; - const c = Math.abs(i[0].x), - h = Math.abs(i[0].y), - u = Math.abs(i[0].z); - c <= l && (l = c, n.set(1, 0, 0)), h <= l && (l = h, n.set(0, 1, 0)), u <= l && n.set(0, 0, 1), s.crossVectors(i[0], n).normalize(), r[0].crossVectors(i[0], s), o[0].crossVectors(i[0], r[0]); - for (let e = 1; e <= t; e++) { - if (r[e] = r[e - 1].clone(), o[e] = o[e - 1].clone(), s.crossVectors(i[e - 1], i[e]), s.length() > Number.EPSILON) { - s.normalize(); - const t = Math.acos(g.clamp(i[e - 1].dot(i[e]), -1, 1)); - r[e].applyMatrix4(a.makeRotationAxis(s, t)) - } - o[e].crossVectors(i[e], r[e]) - } - if (!0 === e) { - let e = Math.acos(g.clamp(r[0].dot(r[t]), -1, 1)); - e /= t, i[0].dot(s.crossVectors(r[0], r[t])) > 0 && (e = -e); - for (let n = 1; n <= t; n++) r[n].applyMatrix4(a.makeRotationAxis(i[n], e * n)), o[n].crossVectors(i[n], r[n]) - } - return { - tangents: i, - normals: r, - binormals: o - } - }, - clone: function() { - return (new this.constructor).copy(this) - }, - copy: function(t) { - return this.arcLengthDivisions = t.arcLengthDivisions, this - }, - toJSON: function() { - const t = { - metadata: { - version: 4.5, - type: "Curve", - generator: "Curve.toJSON" - } - }; - return t.arcLengthDivisions = this.arcLengthDivisions, t.type = this.type, t - }, - fromJSON: function(t) { - return this.arcLengthDivisions = t.arcLengthDivisions, this - } - }), Ns.prototype = Object.create(Os.prototype), Ns.prototype.constructor = Ns, Ns.prototype.isEllipseCurve = !0, Ns.prototype.getPoint = function(t, e) { - const n = e || new v, - i = 2 * Math.PI; - let r = this.aEndAngle - this.aStartAngle; - const o = Math.abs(r) < Number.EPSILON; - for (; r < 0;) r += i; - for (; r > i;) r -= i; - r < Number.EPSILON && (r = o ? 0 : i), !0 !== this.aClockwise || o || (r === i ? r = -i : r -= i); - const s = this.aStartAngle + t * r; - let a = this.aX + this.xRadius * Math.cos(s), - l = this.aY + this.yRadius * Math.sin(s); - if (0 !== this.aRotation) { - const t = Math.cos(this.aRotation), - e = Math.sin(this.aRotation), - n = a - this.aX, - i = l - this.aY; - a = n * t - i * e + this.aX, l = n * e + i * t + this.aY - } - return n.set(a, l) - }, Ns.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this - }, Ns.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.aX = this.aX, t.aY = this.aY, t.xRadius = this.xRadius, t.yRadius = this.yRadius, t.aStartAngle = this.aStartAngle, t.aEndAngle = this.aEndAngle, t.aClockwise = this.aClockwise, t.aRotation = this.aRotation, t - }, Ns.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this - }, Bs.prototype = Object.create(Ns.prototype), Bs.prototype.constructor = Bs, Bs.prototype.isArcCurve = !0; - const zs = new T, - Us = new Fs, - Hs = new Fs, - Gs = new Fs; - - function Vs(t = [], e = !1, n = "centripetal", i = .5) { - Os.call(this), this.type = "CatmullRomCurve3", this.points = t, this.closed = e, this.curveType = n, this.tension = i - } - - function ks(t, e, n, i, r) { - const o = .5 * (i - e), - s = .5 * (r - n), - a = t * t; - return (2 * n - 2 * i + o + s) * (t * a) + (-3 * n + 3 * i - 2 * o - s) * a + o * t + n - } - - function Ws(t, e, n, i) { - return function(t, e) { - const n = 1 - t; - return n * n * e - }(t, e) + function(t, e) { - return 2 * (1 - t) * t * e - }(t, n) + function(t, e) { - return t * t * e - }(t, i) - } - - function js(t, e, n, i, r) { - return function(t, e) { - const n = 1 - t; - return n * n * n * e - }(t, e) + function(t, e) { - const n = 1 - t; - return 3 * n * n * t * e - }(t, n) + function(t, e) { - return 3 * (1 - t) * t * t * e - }(t, i) + function(t, e) { - return t * t * t * e - }(t, r) - } - - function Xs(t = new v, e = new v, n = new v, i = new v) { - Os.call(this), this.type = "CubicBezierCurve", this.v0 = t, this.v1 = e, this.v2 = n, this.v3 = i - } - - function qs(t = new T, e = new T, n = new T, i = new T) { - Os.call(this), this.type = "CubicBezierCurve3", this.v0 = t, this.v1 = e, this.v2 = n, this.v3 = i - } - - function Ys(t = new v, e = new v) { - Os.call(this), this.type = "LineCurve", this.v1 = t, this.v2 = e - } - - function Qs(t = new T, e = new T) { - Os.call(this), this.type = "LineCurve3", this.v1 = t, this.v2 = e - } - - function Zs(t = new v, e = new v, n = new v) { - Os.call(this), this.type = "QuadraticBezierCurve", this.v0 = t, this.v1 = e, this.v2 = n - } - - function Js(t = new T, e = new T, n = new T) { - Os.call(this), this.type = "QuadraticBezierCurve3", this.v0 = t, this.v1 = e, this.v2 = n - } - - function Ks(t = []) { - Os.call(this), this.type = "SplineCurve", this.points = t - } - Vs.prototype = Object.create(Os.prototype), Vs.prototype.constructor = Vs, Vs.prototype.isCatmullRomCurve3 = !0, Vs.prototype.getPoint = function(t, e = new T) { - const n = e, - i = this.points, - r = i.length, - o = (r - (this.closed ? 0 : 1)) * t; - let s, a, l = Math.floor(o), - c = o - l; - this.closed ? l += l > 0 ? 0 : (Math.floor(Math.abs(l) / r) + 1) * r : 0 === c && l === r - 1 && (l = r - 2, c = 1), this.closed || l > 0 ? s = i[(l - 1) % r] : (zs.subVectors(i[0], i[1]).add(i[0]), s = zs); - const h = i[l % r], - u = i[(l + 1) % r]; - if (this.closed || l + 2 < r ? a = i[(l + 2) % r] : (zs.subVectors(i[r - 1], i[r - 2]).add(i[r - 1]), a = zs), "centripetal" === this.curveType || "chordal" === this.curveType) { - const t = "chordal" === this.curveType ? .5 : .25; - let e = Math.pow(s.distanceToSquared(h), t), - n = Math.pow(h.distanceToSquared(u), t), - i = Math.pow(u.distanceToSquared(a), t); - n < 1e-4 && (n = 1), e < 1e-4 && (e = n), i < 1e-4 && (i = n), Us.initNonuniformCatmullRom(s.x, h.x, u.x, a.x, e, n, i), Hs.initNonuniformCatmullRom(s.y, h.y, u.y, a.y, e, n, i), Gs.initNonuniformCatmullRom(s.z, h.z, u.z, a.z, e, n, i) - } else "catmullrom" === this.curveType && (Us.initCatmullRom(s.x, h.x, u.x, a.x, this.tension), Hs.initCatmullRom(s.y, h.y, u.y, a.y, this.tension), Gs.initCatmullRom(s.z, h.z, u.z, a.z, this.tension)); - return n.set(Us.calc(c), Hs.calc(c), Gs.calc(c)), n - }, Vs.prototype.copy = function(t) { - Os.prototype.copy.call(this, t), this.points = []; - for (let e = 0, n = t.points.length; e < n; e++) { - const n = t.points[e]; - this.points.push(n.clone()) - } - return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this - }, Vs.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - t.points = []; - for (let e = 0, n = this.points.length; e < n; e++) { - const n = this.points[e]; - t.points.push(n.toArray()) - } - return t.closed = this.closed, t.curveType = this.curveType, t.tension = this.tension, t - }, Vs.prototype.fromJSON = function(t) { - Os.prototype.fromJSON.call(this, t), this.points = []; - for (let e = 0, n = t.points.length; e < n; e++) { - const n = t.points[e]; - this.points.push((new T).fromArray(n)) - } - return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this - }, Xs.prototype = Object.create(Os.prototype), Xs.prototype.constructor = Xs, Xs.prototype.isCubicBezierCurve = !0, Xs.prototype.getPoint = function(t, e = new v) { - const n = e, - i = this.v0, - r = this.v1, - o = this.v2, - s = this.v3; - return n.set(js(t, i.x, r.x, o.x, s.x), js(t, i.y, r.y, o.y, s.y)), n - }, Xs.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this - }, Xs.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t - }, Xs.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this - }, qs.prototype = Object.create(Os.prototype), qs.prototype.constructor = qs, qs.prototype.isCubicBezierCurve3 = !0, qs.prototype.getPoint = function(t, e = new T) { - const n = e, - i = this.v0, - r = this.v1, - o = this.v2, - s = this.v3; - return n.set(js(t, i.x, r.x, o.x, s.x), js(t, i.y, r.y, o.y, s.y), js(t, i.z, r.z, o.z, s.z)), n - }, qs.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this - }, qs.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t - }, qs.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this - }, Ys.prototype = Object.create(Os.prototype), Ys.prototype.constructor = Ys, Ys.prototype.isLineCurve = !0, Ys.prototype.getPoint = function(t, e = new v) { - const n = e; - return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), n - }, Ys.prototype.getPointAt = function(t, e) { - return this.getPoint(t, e) - }, Ys.prototype.getTangent = function(t, e) { - const n = e || new v; - return n.copy(this.v2).sub(this.v1).normalize(), n - }, Ys.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this - }, Ys.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t - }, Ys.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this - }, Qs.prototype = Object.create(Os.prototype), Qs.prototype.constructor = Qs, Qs.prototype.isLineCurve3 = !0, Qs.prototype.getPoint = function(t, e = new T) { - const n = e; - return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), n - }, Qs.prototype.getPointAt = function(t, e) { - return this.getPoint(t, e) - }, Qs.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this - }, Qs.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t - }, Qs.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this - }, Zs.prototype = Object.create(Os.prototype), Zs.prototype.constructor = Zs, Zs.prototype.isQuadraticBezierCurve = !0, Zs.prototype.getPoint = function(t, e = new v) { - const n = e, - i = this.v0, - r = this.v1, - o = this.v2; - return n.set(Ws(t, i.x, r.x, o.x), Ws(t, i.y, r.y, o.y)), n - }, Zs.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this - }, Zs.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t - }, Zs.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this - }, Js.prototype = Object.create(Os.prototype), Js.prototype.constructor = Js, Js.prototype.isQuadraticBezierCurve3 = !0, Js.prototype.getPoint = function(t, e = new T) { - const n = e, - i = this.v0, - r = this.v1, - o = this.v2; - return n.set(Ws(t, i.x, r.x, o.x), Ws(t, i.y, r.y, o.y), Ws(t, i.z, r.z, o.z)), n - }, Js.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this - }, Js.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t - }, Js.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this - }, Ks.prototype = Object.create(Os.prototype), Ks.prototype.constructor = Ks, Ks.prototype.isSplineCurve = !0, Ks.prototype.getPoint = function(t, e = new v) { - const n = e, - i = this.points, - r = (i.length - 1) * t, - o = Math.floor(r), - s = r - o, - a = i[0 === o ? o : o - 1], - l = i[o], - c = i[o > i.length - 2 ? i.length - 1 : o + 1], - h = i[o > i.length - 3 ? i.length - 1 : o + 2]; - return n.set(ks(s, a.x, l.x, c.x, h.x), ks(s, a.y, l.y, c.y, h.y)), n - }, Ks.prototype.copy = function(t) { - Os.prototype.copy.call(this, t), this.points = []; - for (let e = 0, n = t.points.length; e < n; e++) { - const n = t.points[e]; - this.points.push(n.clone()) - } - return this - }, Ks.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - t.points = []; - for (let e = 0, n = this.points.length; e < n; e++) { - const n = this.points[e]; - t.points.push(n.toArray()) - } - return t - }, Ks.prototype.fromJSON = function(t) { - Os.prototype.fromJSON.call(this, t), this.points = []; - for (let e = 0, n = t.points.length; e < n; e++) { - const n = t.points[e]; - this.points.push((new v).fromArray(n)) - } - return this - }; - var $s = Object.freeze({ - __proto__: null, - ArcCurve: Bs, - CatmullRomCurve3: Vs, - CubicBezierCurve: Xs, - CubicBezierCurve3: qs, - EllipseCurve: Ns, - LineCurve: Ys, - LineCurve3: Qs, - QuadraticBezierCurve: Zs, - QuadraticBezierCurve3: Js, - SplineCurve: Ks - }); - - function ta() { - Os.call(this), this.type = "CurvePath", this.curves = [], this.autoClose = !1 - } - - function ea(t) { - ta.call(this), this.type = "Path", this.currentPoint = new v, t && this.setFromPoints(t) - } - - function na(t) { - ea.call(this, t), this.uuid = g.generateUUID(), this.type = "Shape", this.holes = [] - } - - function ia(t, e = 1) { - St.call(this), this.type = "Light", this.color = new Yt(t), this.intensity = e - } - - function ra(t, e, n) { - ia.call(this, t, n), this.type = "HemisphereLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.groundColor = new Yt(e) - } - - function oa(t) { - this.camera = t, this.bias = 0, this.normalBias = 0, this.radius = 1, this.mapSize = new v(512, 512), this.map = null, this.mapPass = null, this.matrix = new et, this.autoUpdate = !0, this.needsUpdate = !1, this._frustum = new en, this._frameExtents = new v(1, 1), this._viewportCount = 1, this._viewports = [new M(0, 0, 1, 1)] - } - - function sa() { - oa.call(this, new Ye(50, 1, .5, 500)), this.focus = 1 - } - - function aa(t, e, n, i, r, o) { - ia.call(this, t, e), this.type = "SpotLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.target = new St, Object.defineProperty(this, "power", { - get: function() { - return this.intensity * Math.PI - }, - set: function(t) { - this.intensity = t / Math.PI - } - }), this.distance = void 0 !== n ? n : 0, this.angle = void 0 !== i ? i : Math.PI / 3, this.penumbra = void 0 !== r ? r : 0, this.decay = void 0 !== o ? o : 1, this.shadow = new sa - } - - function la() { - oa.call(this, new Ye(90, 1, .5, 500)), this._frameExtents = new v(4, 2), this._viewportCount = 6, this._viewports = [new M(2, 1, 1, 1), new M(0, 1, 1, 1), new M(3, 1, 1, 1), new M(1, 1, 1, 1), new M(3, 0, 1, 1), new M(1, 0, 1, 1)], this._cubeDirections = [new T(1, 0, 0), new T(-1, 0, 0), new T(0, 0, 1), new T(0, 0, -1), new T(0, 1, 0), new T(0, -1, 0)], this._cubeUps = [new T(0, 1, 0), new T(0, 1, 0), new T(0, 1, 0), new T(0, 1, 0), new T(0, 0, 1), new T(0, 0, -1)] - } - - function ca(t, e, n, i) { - ia.call(this, t, e), this.type = "PointLight", Object.defineProperty(this, "power", { - get: function() { - return 4 * this.intensity * Math.PI - }, - set: function(t) { - this.intensity = t / (4 * Math.PI) - } - }), this.distance = void 0 !== n ? n : 0, this.decay = void 0 !== i ? i : 1, this.shadow = new la - } - - function ha(t = -1, e = 1, n = 1, i = -1, r = .1, o = 2e3) { - qe.call(this), this.type = "OrthographicCamera", this.zoom = 1, this.view = null, this.left = t, this.right = e, this.top = n, this.bottom = i, this.near = r, this.far = o, this.updateProjectionMatrix() - } - - function ua() { - oa.call(this, new ha(-5, 5, 5, -5, .5, 500)) - } - - function da(t, e) { - ia.call(this, t, e), this.type = "DirectionalLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.target = new St, this.shadow = new ua - } - - function pa(t, e) { - ia.call(this, t, e), this.type = "AmbientLight" - } - - function fa(t, e, n, i) { - ia.call(this, t, e), this.type = "RectAreaLight", this.width = void 0 !== n ? n : 10, this.height = void 0 !== i ? i : 10 - } - ta.prototype = Object.assign(Object.create(Os.prototype), { - constructor: ta, - add: function(t) { - this.curves.push(t) - }, - closePath: function() { - const t = this.curves[0].getPoint(0), - e = this.curves[this.curves.length - 1].getPoint(1); - t.equals(e) || this.curves.push(new Ys(e, t)) - }, - getPoint: function(t) { - const e = t * this.getLength(), - n = this.getCurveLengths(); - let i = 0; - for (; i < n.length;) { - if (n[i] >= e) { - const t = n[i] - e, - r = this.curves[i], - o = r.getLength(), - s = 0 === o ? 0 : 1 - t / o; - return r.getPointAt(s) - } - i++ - } - return null - }, - getLength: function() { - const t = this.getCurveLengths(); - return t[t.length - 1] - }, - updateArcLengths: function() { - this.needsUpdate = !0, this.cacheLengths = null, this.getCurveLengths() - }, - getCurveLengths: function() { - if (this.cacheLengths && this.cacheLengths.length === this.curves.length) return this.cacheLengths; - const t = []; - let e = 0; - for (let n = 0, i = this.curves.length; n < i; n++) e += this.curves[n].getLength(), t.push(e); - return this.cacheLengths = t, t - }, - getSpacedPoints: function(t = 40) { - const e = []; - for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)); - return this.autoClose && e.push(e[0]), e - }, - getPoints: function(t = 12) { - const e = []; - let n; - for (let i = 0, r = this.curves; i < r.length; i++) { - const o = r[i], - s = o && o.isEllipseCurve ? 2 * t : o && (o.isLineCurve || o.isLineCurve3) ? 1 : o && o.isSplineCurve ? t * o.points.length : t, - a = o.getPoints(s); - for (let t = 0; t < a.length; t++) { - const i = a[t]; - n && n.equals(i) || (e.push(i), n = i) - } - } - return this.autoClose && e.length > 1 && !e[e.length - 1].equals(e[0]) && e.push(e[0]), e - }, - copy: function(t) { - Os.prototype.copy.call(this, t), this.curves = []; - for (let e = 0, n = t.curves.length; e < n; e++) { - const n = t.curves[e]; - this.curves.push(n.clone()) - } - return this.autoClose = t.autoClose, this - }, - toJSON: function() { - const t = Os.prototype.toJSON.call(this); - t.autoClose = this.autoClose, t.curves = []; - for (let e = 0, n = this.curves.length; e < n; e++) { - const n = this.curves[e]; - t.curves.push(n.toJSON()) - } - return t - }, - fromJSON: function(t) { - Os.prototype.fromJSON.call(this, t), this.autoClose = t.autoClose, this.curves = []; - for (let e = 0, n = t.curves.length; e < n; e++) { - const n = t.curves[e]; - this.curves.push((new $s[n.type]).fromJSON(n)) - } - return this - } - }), ea.prototype = Object.assign(Object.create(ta.prototype), { - constructor: ea, - setFromPoints: function(t) { - this.moveTo(t[0].x, t[0].y); - for (let e = 1, n = t.length; e < n; e++) this.lineTo(t[e].x, t[e].y); - return this - }, - moveTo: function(t, e) { - return this.currentPoint.set(t, e), this - }, - lineTo: function(t, e) { - const n = new Ys(this.currentPoint.clone(), new v(t, e)); - return this.curves.push(n), this.currentPoint.set(t, e), this - }, - quadraticCurveTo: function(t, e, n, i) { - const r = new Zs(this.currentPoint.clone(), new v(t, e), new v(n, i)); - return this.curves.push(r), this.currentPoint.set(n, i), this - }, - bezierCurveTo: function(t, e, n, i, r, o) { - const s = new Xs(this.currentPoint.clone(), new v(t, e), new v(n, i), new v(r, o)); - return this.curves.push(s), this.currentPoint.set(r, o), this - }, - splineThru: function(t) { - const e = new Ks([this.currentPoint.clone()].concat(t)); - return this.curves.push(e), this.currentPoint.copy(t[t.length - 1]), this - }, - arc: function(t, e, n, i, r, o) { - const s = this.currentPoint.x, - a = this.currentPoint.y; - return this.absarc(t + s, e + a, n, i, r, o), this - }, - absarc: function(t, e, n, i, r, o) { - return this.absellipse(t, e, n, n, i, r, o), this - }, - ellipse: function(t, e, n, i, r, o, s, a) { - const l = this.currentPoint.x, - c = this.currentPoint.y; - return this.absellipse(t + l, e + c, n, i, r, o, s, a), this - }, - absellipse: function(t, e, n, i, r, o, s, a) { - const l = new Ns(t, e, n, i, r, o, s, a); - if (this.curves.length > 0) { - const t = l.getPoint(0); - t.equals(this.currentPoint) || this.lineTo(t.x, t.y) - } - this.curves.push(l); - const c = l.getPoint(1); - return this.currentPoint.copy(c), this - }, - copy: function(t) { - return ta.prototype.copy.call(this, t), this.currentPoint.copy(t.currentPoint), this - }, - toJSON: function() { - const t = ta.prototype.toJSON.call(this); - return t.currentPoint = this.currentPoint.toArray(), t - }, - fromJSON: function(t) { - return ta.prototype.fromJSON.call(this, t), this.currentPoint.fromArray(t.currentPoint), this - } - }), na.prototype = Object.assign(Object.create(ea.prototype), { - constructor: na, - getPointsHoles: function(t) { - const e = []; - for (let n = 0, i = this.holes.length; n < i; n++) e[n] = this.holes[n].getPoints(t); - return e - }, - extractPoints: function(t) { - return { - shape: this.getPoints(t), - holes: this.getPointsHoles(t) - } - }, - copy: function(t) { - ea.prototype.copy.call(this, t), this.holes = []; - for (let e = 0, n = t.holes.length; e < n; e++) { - const n = t.holes[e]; - this.holes.push(n.clone()) - } - return this - }, - toJSON: function() { - const t = ea.prototype.toJSON.call(this); - t.uuid = this.uuid, t.holes = []; - for (let e = 0, n = this.holes.length; e < n; e++) { - const n = this.holes[e]; - t.holes.push(n.toJSON()) - } - return t - }, - fromJSON: function(t) { - ea.prototype.fromJSON.call(this, t), this.uuid = t.uuid, this.holes = []; - for (let e = 0, n = t.holes.length; e < n; e++) { - const n = t.holes[e]; - this.holes.push((new ea).fromJSON(n)) - } - return this - } - }), ia.prototype = Object.assign(Object.create(St.prototype), { - constructor: ia, - isLight: !0, - copy: function(t) { - return St.prototype.copy.call(this, t), this.color.copy(t.color), this.intensity = t.intensity, this - }, - toJSON: function(t) { - const e = St.prototype.toJSON.call(this, t); - return e.object.color = this.color.getHex(), e.object.intensity = this.intensity, void 0 !== this.groundColor && (e.object.groundColor = this.groundColor.getHex()), void 0 !== this.distance && (e.object.distance = this.distance), void 0 !== this.angle && (e.object.angle = this.angle), void 0 !== this.decay && (e.object.decay = this.decay), void 0 !== this.penumbra && (e.object.penumbra = this.penumbra), void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()), e - } - }), ra.prototype = Object.assign(Object.create(ia.prototype), { - constructor: ra, - isHemisphereLight: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.groundColor.copy(t.groundColor), this - } - }), Object.assign(oa.prototype, { - _projScreenMatrix: new et, - _lightPositionWorld: new T, - _lookTarget: new T, - getViewportCount: function() { - return this._viewportCount - }, - getFrustum: function() { - return this._frustum - }, - updateMatrices: function(t) { - const e = this.camera, - n = this.matrix, - i = this._projScreenMatrix, - r = this._lookTarget, - o = this._lightPositionWorld; - o.setFromMatrixPosition(t.matrixWorld), e.position.copy(o), r.setFromMatrixPosition(t.target.matrixWorld), e.lookAt(r), e.updateMatrixWorld(), i.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), this._frustum.setFromProjectionMatrix(i), n.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), n.multiply(e.projectionMatrix), n.multiply(e.matrixWorldInverse) - }, - getViewport: function(t) { - return this._viewports[t] - }, - getFrameExtents: function() { - return this._frameExtents - }, - copy: function(t) { - return this.camera = t.camera.clone(), this.bias = t.bias, this.radius = t.radius, this.mapSize.copy(t.mapSize), this - }, - clone: function() { - return (new this.constructor).copy(this) - }, - toJSON: function() { - const t = {}; - return 0 !== this.bias && (t.bias = this.bias), 0 !== this.normalBias && (t.normalBias = this.normalBias), 1 !== this.radius && (t.radius = this.radius), 512 === this.mapSize.x && 512 === this.mapSize.y || (t.mapSize = this.mapSize.toArray()), t.camera = this.camera.toJSON(!1).object, delete t.camera.matrix, t - } - }), sa.prototype = Object.assign(Object.create(oa.prototype), { - constructor: sa, - isSpotLightShadow: !0, - updateMatrices: function(t) { - const e = this.camera, - n = 2 * g.RAD2DEG * t.angle * this.focus, - i = this.mapSize.width / this.mapSize.height, - r = t.distance || e.far; - n === e.fov && i === e.aspect && r === e.far || (e.fov = n, e.aspect = i, e.far = r, e.updateProjectionMatrix()), oa.prototype.updateMatrices.call(this, t) - } - }), aa.prototype = Object.assign(Object.create(ia.prototype), { - constructor: aa, - isSpotLight: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.distance = t.distance, this.angle = t.angle, this.penumbra = t.penumbra, this.decay = t.decay, this.target = t.target.clone(), this.shadow = t.shadow.clone(), this - } - }), la.prototype = Object.assign(Object.create(oa.prototype), { - constructor: la, - isPointLightShadow: !0, - updateMatrices: function(t, e = 0) { - const n = this.camera, - i = this.matrix, - r = this._lightPositionWorld, - o = this._lookTarget, - s = this._projScreenMatrix; - r.setFromMatrixPosition(t.matrixWorld), n.position.copy(r), o.copy(n.position), o.add(this._cubeDirections[e]), n.up.copy(this._cubeUps[e]), n.lookAt(o), n.updateMatrixWorld(), i.makeTranslation(-r.x, -r.y, -r.z), s.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse), this._frustum.setFromProjectionMatrix(s) - } - }), ca.prototype = Object.assign(Object.create(ia.prototype), { - constructor: ca, - isPointLight: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.distance = t.distance, this.decay = t.decay, this.shadow = t.shadow.clone(), this - } - }), ha.prototype = Object.assign(Object.create(qe.prototype), { - constructor: ha, - isOrthographicCamera: !0, - copy: function(t, e) { - return qe.prototype.copy.call(this, t, e), this.left = t.left, this.right = t.right, this.top = t.top, this.bottom = t.bottom, this.near = t.near, this.far = t.far, this.zoom = t.zoom, this.view = null === t.view ? null : Object.assign({}, t.view), this - }, - setViewOffset: function(t, e, n, i, r, o) { - null === this.view && (this.view = { - enabled: !0, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1 - }), this.view.enabled = !0, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix() - }, - clearViewOffset: function() { - null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() - }, - updateProjectionMatrix: function() { - const t = (this.right - this.left) / (2 * this.zoom), - e = (this.top - this.bottom) / (2 * this.zoom), - n = (this.right + this.left) / 2, - i = (this.top + this.bottom) / 2; - let r = n - t, - o = n + t, - s = i + e, - a = i - e; - if (null !== this.view && this.view.enabled) { - const t = (this.right - this.left) / this.view.fullWidth / this.zoom, - e = (this.top - this.bottom) / this.view.fullHeight / this.zoom; - r += t * this.view.offsetX, o = r + t * this.view.width, s -= e * this.view.offsetY, a = s - e * this.view.height - } - this.projectionMatrix.makeOrthographic(r, o, s, a, this.near, this.far), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() - }, - toJSON: function(t) { - const e = St.prototype.toJSON.call(this, t); - return e.object.zoom = this.zoom, e.object.left = this.left, e.object.right = this.right, e.object.top = this.top, e.object.bottom = this.bottom, e.object.near = this.near, e.object.far = this.far, null !== this.view && (e.object.view = Object.assign({}, this.view)), e - } - }), ua.prototype = Object.assign(Object.create(oa.prototype), { - constructor: ua, - isDirectionalLightShadow: !0, - updateMatrices: function(t) { - oa.prototype.updateMatrices.call(this, t) - } - }), da.prototype = Object.assign(Object.create(ia.prototype), { - constructor: da, - isDirectionalLight: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.target = t.target.clone(), this.shadow = t.shadow.clone(), this - } - }), pa.prototype = Object.assign(Object.create(ia.prototype), { - constructor: pa, - isAmbientLight: !0 - }), fa.prototype = Object.assign(Object.create(ia.prototype), { - constructor: fa, - isRectAreaLight: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.width = t.width, this.height = t.height, this - }, - toJSON: function(t) { - const e = ia.prototype.toJSON.call(this, t); - return e.object.width = this.width, e.object.height = this.height, e - } - }); - class ma { - constructor() { - Object.defineProperty(this, "isSphericalHarmonics3", { - value: !0 - }), this.coefficients = []; - for (let t = 0; t < 9; t++) this.coefficients.push(new T) - } - set(t) { - for (let e = 0; e < 9; e++) this.coefficients[e].copy(t[e]); - return this - } - zero() { - for (let t = 0; t < 9; t++) this.coefficients[t].set(0, 0, 0); - return this - } - getAt(t, e) { - const n = t.x, - i = t.y, - r = t.z, - o = this.coefficients; - return e.copy(o[0]).multiplyScalar(.282095), e.addScaledVector(o[1], .488603 * i), e.addScaledVector(o[2], .488603 * r), e.addScaledVector(o[3], .488603 * n), e.addScaledVector(o[4], n * i * 1.092548), e.addScaledVector(o[5], i * r * 1.092548), e.addScaledVector(o[6], .315392 * (3 * r * r - 1)), e.addScaledVector(o[7], n * r * 1.092548), e.addScaledVector(o[8], .546274 * (n * n - i * i)), e - } - getIrradianceAt(t, e) { - const n = t.x, - i = t.y, - r = t.z, - o = this.coefficients; - return e.copy(o[0]).multiplyScalar(.886227), e.addScaledVector(o[1], 1.023328 * i), e.addScaledVector(o[2], 1.023328 * r), e.addScaledVector(o[3], 1.023328 * n), e.addScaledVector(o[4], .858086 * n * i), e.addScaledVector(o[5], .858086 * i * r), e.addScaledVector(o[6], .743125 * r * r - .247708), e.addScaledVector(o[7], .858086 * n * r), e.addScaledVector(o[8], .429043 * (n * n - i * i)), e - } - add(t) { - for (let e = 0; e < 9; e++) this.coefficients[e].add(t.coefficients[e]); - return this - } - addScaledSH(t, e) { - for (let n = 0; n < 9; n++) this.coefficients[n].addScaledVector(t.coefficients[n], e); - return this - } - scale(t) { - for (let e = 0; e < 9; e++) this.coefficients[e].multiplyScalar(t); - return this - } - lerp(t, e) { - for (let n = 0; n < 9; n++) this.coefficients[n].lerp(t.coefficients[n], e); - return this - } - equals(t) { - for (let e = 0; e < 9; e++) - if (!this.coefficients[e].equals(t.coefficients[e])) return !1; - return !0 - } - copy(t) { - return this.set(t.coefficients) - } - clone() { - return (new this.constructor).copy(this) - } - fromArray(t, e = 0) { - const n = this.coefficients; - for (let i = 0; i < 9; i++) n[i].fromArray(t, e + 3 * i); - return this - } - toArray(t = [], e = 0) { - const n = this.coefficients; - for (let i = 0; i < 9; i++) n[i].toArray(t, e + 3 * i); - return t - } - static getBasisAt(t, e) { - const n = t.x, - i = t.y, - r = t.z; - e[0] = .282095, e[1] = .488603 * i, e[2] = .488603 * r, e[3] = .488603 * n, e[4] = 1.092548 * n * i, e[5] = 1.092548 * i * r, e[6] = .315392 * (3 * r * r - 1), e[7] = 1.092548 * n * r, e[8] = .546274 * (n * n - i * i) - } - } - - function ga(t, e) { - ia.call(this, void 0, e), this.type = "LightProbe", this.sh = void 0 !== t ? t : new ma - } - - function va(t) { - Es.call(this, t), this.textures = {} - } - ga.prototype = Object.assign(Object.create(ia.prototype), { - constructor: ga, - isLightProbe: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.sh.copy(t.sh), this - }, - fromJSON: function(t) { - return this.intensity = t.intensity, this.sh.fromArray(t.sh), this - }, - toJSON: function(t) { - const e = ia.prototype.toJSON.call(this, t); - return e.object.sh = this.sh.toArray(), e - } - }), va.prototype = Object.assign(Object.create(Es.prototype), { - constructor: va, - load: function(t, e, n, i) { - const r = this, - o = new Ts(r.manager); - o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { - try { - e(r.parse(JSON.parse(n))) - } catch (e) { - i ? i(e) : console.error(e), r.manager.itemError(t) - } - }), n, i) - }, - parse: function(t) { - const e = this.textures; - - function n(t) { - return void 0 === e[t] && console.warn("THREE.MaterialLoader: Undefined texture", t), e[t] - } - const i = new as[t.type]; - if (void 0 !== t.uuid && (i.uuid = t.uuid), void 0 !== t.name && (i.name = t.name), void 0 !== t.color && void 0 !== i.color && i.color.setHex(t.color), void 0 !== t.roughness && (i.roughness = t.roughness), void 0 !== t.metalness && (i.metalness = t.metalness), void 0 !== t.sheen && (i.sheen = (new Yt).setHex(t.sheen)), void 0 !== t.emissive && void 0 !== i.emissive && i.emissive.setHex(t.emissive), void 0 !== t.specular && void 0 !== i.specular && i.specular.setHex(t.specular), void 0 !== t.shininess && (i.shininess = t.shininess), void 0 !== t.clearcoat && (i.clearcoat = t.clearcoat), void 0 !== t.clearcoatRoughness && (i.clearcoatRoughness = t.clearcoatRoughness), void 0 !== t.fog && (i.fog = t.fog), void 0 !== t.flatShading && (i.flatShading = t.flatShading), void 0 !== t.blending && (i.blending = t.blending), void 0 !== t.combine && (i.combine = t.combine), void 0 !== t.side && (i.side = t.side), void 0 !== t.opacity && (i.opacity = t.opacity), void 0 !== t.transparent && (i.transparent = t.transparent), void 0 !== t.alphaTest && (i.alphaTest = t.alphaTest), void 0 !== t.depthTest && (i.depthTest = t.depthTest), void 0 !== t.depthWrite && (i.depthWrite = t.depthWrite), void 0 !== t.colorWrite && (i.colorWrite = t.colorWrite), void 0 !== t.stencilWrite && (i.stencilWrite = t.stencilWrite), void 0 !== t.stencilWriteMask && (i.stencilWriteMask = t.stencilWriteMask), void 0 !== t.stencilFunc && (i.stencilFunc = t.stencilFunc), void 0 !== t.stencilRef && (i.stencilRef = t.stencilRef), void 0 !== t.stencilFuncMask && (i.stencilFuncMask = t.stencilFuncMask), void 0 !== t.stencilFail && (i.stencilFail = t.stencilFail), void 0 !== t.stencilZFail && (i.stencilZFail = t.stencilZFail), void 0 !== t.stencilZPass && (i.stencilZPass = t.stencilZPass), void 0 !== t.wireframe && (i.wireframe = t.wireframe), void 0 !== t.wireframeLinewidth && (i.wireframeLinewidth = t.wireframeLinewidth), void 0 !== t.wireframeLinecap && (i.wireframeLinecap = t.wireframeLinecap), void 0 !== t.wireframeLinejoin && (i.wireframeLinejoin = t.wireframeLinejoin), void 0 !== t.rotation && (i.rotation = t.rotation), 1 !== t.linewidth && (i.linewidth = t.linewidth), void 0 !== t.dashSize && (i.dashSize = t.dashSize), void 0 !== t.gapSize && (i.gapSize = t.gapSize), void 0 !== t.scale && (i.scale = t.scale), void 0 !== t.polygonOffset && (i.polygonOffset = t.polygonOffset), void 0 !== t.polygonOffsetFactor && (i.polygonOffsetFactor = t.polygonOffsetFactor), void 0 !== t.polygonOffsetUnits && (i.polygonOffsetUnits = t.polygonOffsetUnits), void 0 !== t.skinning && (i.skinning = t.skinning), void 0 !== t.morphTargets && (i.morphTargets = t.morphTargets), void 0 !== t.morphNormals && (i.morphNormals = t.morphNormals), void 0 !== t.dithering && (i.dithering = t.dithering), void 0 !== t.vertexTangents && (i.vertexTangents = t.vertexTangents), void 0 !== t.visible && (i.visible = t.visible), void 0 !== t.toneMapped && (i.toneMapped = t.toneMapped), void 0 !== t.userData && (i.userData = t.userData), void 0 !== t.vertexColors && ("number" == typeof t.vertexColors ? i.vertexColors = t.vertexColors > 0 : i.vertexColors = t.vertexColors), void 0 !== t.uniforms) - for (const e in t.uniforms) { - const r = t.uniforms[e]; - switch (i.uniforms[e] = {}, r.type) { - case "t": - i.uniforms[e].value = n(r.value); - break; - case "c": - i.uniforms[e].value = (new Yt).setHex(r.value); - break; - case "v2": - i.uniforms[e].value = (new v).fromArray(r.value); - break; - case "v3": - i.uniforms[e].value = (new T).fromArray(r.value); - break; - case "v4": - i.uniforms[e].value = (new M).fromArray(r.value); - break; - case "m3": - i.uniforms[e].value = (new y).fromArray(r.value); - break; - case "m4": - i.uniforms[e].value = (new et).fromArray(r.value); - break; - default: - i.uniforms[e].value = r.value - } - } - if (void 0 !== t.defines && (i.defines = t.defines), void 0 !== t.vertexShader && (i.vertexShader = t.vertexShader), void 0 !== t.fragmentShader && (i.fragmentShader = t.fragmentShader), void 0 !== t.extensions) - for (const e in t.extensions) i.extensions[e] = t.extensions[e]; - if (void 0 !== t.shading && (i.flatShading = 1 === t.shading), void 0 !== t.size && (i.size = t.size), void 0 !== t.sizeAttenuation && (i.sizeAttenuation = t.sizeAttenuation), void 0 !== t.map && (i.map = n(t.map)), void 0 !== t.matcap && (i.matcap = n(t.matcap)), void 0 !== t.alphaMap && (i.alphaMap = n(t.alphaMap)), void 0 !== t.bumpMap && (i.bumpMap = n(t.bumpMap)), void 0 !== t.bumpScale && (i.bumpScale = t.bumpScale), void 0 !== t.normalMap && (i.normalMap = n(t.normalMap)), void 0 !== t.normalMapType && (i.normalMapType = t.normalMapType), void 0 !== t.normalScale) { - let e = t.normalScale; - !1 === Array.isArray(e) && (e = [e, e]), i.normalScale = (new v).fromArray(e) - } - return void 0 !== t.displacementMap && (i.displacementMap = n(t.displacementMap)), void 0 !== t.displacementScale && (i.displacementScale = t.displacementScale), void 0 !== t.displacementBias && (i.displacementBias = t.displacementBias), void 0 !== t.roughnessMap && (i.roughnessMap = n(t.roughnessMap)), void 0 !== t.metalnessMap && (i.metalnessMap = n(t.metalnessMap)), void 0 !== t.emissiveMap && (i.emissiveMap = n(t.emissiveMap)), void 0 !== t.emissiveIntensity && (i.emissiveIntensity = t.emissiveIntensity), void 0 !== t.specularMap && (i.specularMap = n(t.specularMap)), void 0 !== t.envMap && (i.envMap = n(t.envMap)), void 0 !== t.envMapIntensity && (i.envMapIntensity = t.envMapIntensity), void 0 !== t.reflectivity && (i.reflectivity = t.reflectivity), void 0 !== t.refractionRatio && (i.refractionRatio = t.refractionRatio), void 0 !== t.lightMap && (i.lightMap = n(t.lightMap)), void 0 !== t.lightMapIntensity && (i.lightMapIntensity = t.lightMapIntensity), void 0 !== t.aoMap && (i.aoMap = n(t.aoMap)), void 0 !== t.aoMapIntensity && (i.aoMapIntensity = t.aoMapIntensity), void 0 !== t.gradientMap && (i.gradientMap = n(t.gradientMap)), void 0 !== t.clearcoatMap && (i.clearcoatMap = n(t.clearcoatMap)), void 0 !== t.clearcoatRoughnessMap && (i.clearcoatRoughnessMap = n(t.clearcoatRoughnessMap)), void 0 !== t.clearcoatNormalMap && (i.clearcoatNormalMap = n(t.clearcoatNormalMap)), void 0 !== t.clearcoatNormalScale && (i.clearcoatNormalScale = (new v).fromArray(t.clearcoatNormalScale)), void 0 !== t.transmission && (i.transmission = t.transmission), void 0 !== t.transmissionMap && (i.transmissionMap = n(t.transmissionMap)), i - }, - setTextures: function(t) { - return this.textures = t, this - } - }); - const ya = function(t) { - const e = t.lastIndexOf("/"); - return -1 === e ? "./" : t.substr(0, e + 1) - }; - - function Aa() { - be.call(this), this.type = "InstancedBufferGeometry", this.instanceCount = 1 / 0 - } - - function xa(t, e, n, i) { - "number" == typeof n && (i = n, n = !1, console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")), ee.call(this, t, e, n), this.meshPerAttribute = i || 1 - } - - function _a(t) { - Es.call(this, t) - } - - function ba(t) { - "undefined" == typeof createImageBitmap && console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."), "undefined" == typeof fetch && console.warn("THREE.ImageBitmapLoader: fetch() not supported."), Es.call(this, t), this.options = { - premultiplyAlpha: "none" - } - } - - function wa() { - this.type = "ShapePath", this.color = new Yt, this.subPaths = [], this.currentPath = null - } - Aa.prototype = Object.assign(Object.create(be.prototype), { - constructor: Aa, - isInstancedBufferGeometry: !0, - copy: function(t) { - return be.prototype.copy.call(this, t), this.instanceCount = t.instanceCount, this - }, - clone: function() { - return (new this.constructor).copy(this) - }, - toJSON: function() { - const t = be.prototype.toJSON.call(this); - return t.instanceCount = this.instanceCount, t.isInstancedBufferGeometry = !0, t - } - }), xa.prototype = Object.assign(Object.create(ee.prototype), { - constructor: xa, - isInstancedBufferAttribute: !0, - copy: function(t) { - return ee.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this - }, - toJSON: function() { - const t = ee.prototype.toJSON.call(this); - return t.meshPerAttribute = this.meshPerAttribute, t.isInstancedBufferAttribute = !0, t - } - }), _a.prototype = Object.assign(Object.create(Es.prototype), { - constructor: _a, - load: function(t, e, n, i) { - const r = this, - o = new Ts(r.manager); - o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { - try { - e(r.parse(JSON.parse(n))) - } catch (e) { - i ? i(e) : console.error(e), r.manager.itemError(t) - } - }), n, i) - }, - parse: function(t) { - const e = {}, - n = {}; - - function i(t, i) { - if (void 0 !== e[i]) return e[i]; - const r = t.interleavedBuffers[i], - o = function(t, e) { - if (void 0 !== n[e]) return n[e]; - const i = t.arrayBuffers[e], - r = new Uint32Array(i).buffer; - return n[e] = r, r - }(t, r.buffer), - s = new dr(fe(r.type, o), r.stride); - return s.uuid = r.uuid, e[i] = s, s - } - const r = t.isInstancedBufferGeometry ? new Aa : new be, - o = t.data.index; - if (void 0 !== o) { - const t = fe(o.type, o.array); - r.setIndex(new ee(t, 1)) - } - const s = t.data.attributes; - for (const e in s) { - const n = s[e]; - let o; - if (n.isInterleavedBufferAttribute) { - o = new fr(i(t.data, n.data), n.itemSize, n.offset, n.normalized) - } else { - const t = fe(n.type, n.array); - o = new(n.isInstancedBufferAttribute ? xa : ee)(t, n.itemSize, n.normalized) - } - void 0 !== n.name && (o.name = n.name), r.setAttribute(e, o) - } - const a = t.data.morphAttributes; - if (a) - for (const e in a) { - const n = a[e], - o = []; - for (let e = 0, r = n.length; e < r; e++) { - const r = n[e]; - let s; - if (r.isInterleavedBufferAttribute) { - s = new fr(i(t.data, r.data), r.itemSize, r.offset, r.normalized) - } else { - s = new ee(fe(r.type, r.array), r.itemSize, r.normalized) - } - void 0 !== r.name && (s.name = r.name), o.push(s) - } - r.morphAttributes[e] = o - } - t.data.morphTargetsRelative && (r.morphTargetsRelative = !0); - const l = t.data.groups || t.data.drawcalls || t.data.offsets; - if (void 0 !== l) - for (let t = 0, e = l.length; t !== e; ++t) { - const e = l[t]; - r.addGroup(e.start, e.count, e.materialIndex) - } - const c = t.data.boundingSphere; - if (void 0 !== c) { - const t = new T; - void 0 !== c.center && t.fromArray(c.center), r.boundingSphere = new X(t, c.radius) - } - return t.name && (r.name = t.name), t.userData && (r.userData = t.userData), r - } - }), ba.prototype = Object.assign(Object.create(Es.prototype), { - constructor: ba, - isImageBitmapLoader: !0, - setOptions: function(t) { - return this.options = t, this - }, - load: function(t, e, n, i) { - void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); - const r = this, - o = ws.get(t); - if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { - e && e(o), r.manager.itemEnd(t) - }), 0), o; - const s = {}; - s.credentials = "anonymous" === this.crossOrigin ? "same-origin" : "include", fetch(t, s).then((function(t) { - return t.blob() - })).then((function(t) { - return createImageBitmap(t, r.options) - })).then((function(n) { - ws.add(t, n), e && e(n), r.manager.itemEnd(t) - })).catch((function(e) { - i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) - })), r.manager.itemStart(t) - } - }), Object.assign(wa.prototype, { - moveTo: function(t, e) { - return this.currentPath = new ea, this.subPaths.push(this.currentPath), this.currentPath.moveTo(t, e), this - }, - lineTo: function(t, e) { - return this.currentPath.lineTo(t, e), this - }, - quadraticCurveTo: function(t, e, n, i) { - return this.currentPath.quadraticCurveTo(t, e, n, i), this - }, - bezierCurveTo: function(t, e, n, i, r, o) { - return this.currentPath.bezierCurveTo(t, e, n, i, r, o), this - }, - splineThru: function(t) { - return this.currentPath.splineThru(t), this - }, - toShapes: function(t, e) { - function n(t) { - const e = []; - for (let n = 0, i = t.length; n < i; n++) { - const i = t[n], - r = new na; - r.curves = i.curves, e.push(r) - } - return e - } - - function i(t, e) { - const n = e.length; - let i = !1; - for (let r = n - 1, o = 0; o < n; r = o++) { - let n = e[r], - s = e[o], - a = s.x - n.x, - l = s.y - n.y; - if (Math.abs(l) > Number.EPSILON) { - if (l < 0 && (n = e[o], a = -a, s = e[r], l = -l), t.y < n.y || t.y > s.y) continue; - if (t.y === n.y) { - if (t.x === n.x) return !0 - } else { - const e = l * (t.x - n.x) - a * (t.y - n.y); - if (0 === e) return !0; - if (e < 0) continue; - i = !i - } - } else { - if (t.y !== n.y) continue; - if (s.x <= t.x && t.x <= n.x || n.x <= t.x && t.x <= s.x) return !0 - } - } - return i - } - const r = ko.isClockWise, - o = this.subPaths; - if (0 === o.length) return []; - if (!0 === e) return n(o); - let s, a, l; - const c = []; - if (1 === o.length) return a = o[0], l = new na, l.curves = a.curves, c.push(l), c; - let h = !r(o[0].getPoints()); - h = t ? !h : h; - const u = [], - d = []; - let p, f, m = [], - g = 0; - d[g] = void 0, m[g] = []; - for (let e = 0, n = o.length; e < n; e++) a = o[e], p = a.getPoints(), s = r(p), s = t ? !s : s, s ? (!h && d[g] && g++, d[g] = { - s: new na, - p: p - }, d[g].s.curves = a.curves, h && g++, m[g] = []) : m[g].push({ - h: a, - p: p[0] - }); - if (!d[0]) return n(o); - if (d.length > 1) { - let t = !1; - const e = []; - for (let t = 0, e = d.length; t < e; t++) u[t] = []; - for (let n = 0, r = d.length; n < r; n++) { - const r = m[n]; - for (let o = 0; o < r.length; o++) { - const s = r[o]; - let a = !0; - for (let r = 0; r < d.length; r++) i(s.p, d[r].p) && (n !== r && e.push({ - froms: n, - tos: r, - hole: o - }), a ? (a = !1, u[r].push(s)) : t = !0); - a && u[n].push(s) - } - } - e.length > 0 && (t || (m = u)) - } - for (let t = 0, e = d.length; t < e; t++) { - l = d[t].s, c.push(l), f = m[t]; - for (let t = 0, e = f.length; t < e; t++) l.holes.push(f[t].h) - } - return c - } - }); - class Ma { - constructor(t) { - Object.defineProperty(this, "isFont", { - value: !0 - }), this.type = "Font", this.data = t - } - generateShapes(t, e = 100) { - const n = [], - i = function(t, e, n) { - const i = Array.from ? Array.from(t) : String(t).split(""), - r = e / n.resolution, - o = (n.boundingBox.yMax - n.boundingBox.yMin + n.underlineThickness) * r, - s = []; - let a = 0, - l = 0; - for (let t = 0; t < i.length; t++) { - const e = i[t]; - if ("\n" === e) a = 0, l -= o; - else { - const t = Ea(e, r, a, l, n); - a += t.offsetX, s.push(t.path) - } - } - return s - }(t, e, this.data); - for (let t = 0, e = i.length; t < e; t++) Array.prototype.push.apply(n, i[t].toShapes()); - return n - } - } - - function Ea(t, e, n, i, r) { - const o = r.glyphs[t] || r.glyphs["?"]; - if (!o) return void console.error('THREE.Font: character "' + t + '" does not exists in font family ' + r.familyName + "."); - const s = new wa; - let a, l, c, h, u, d, p, f; - if (o.o) { - const t = o._cachedOutline || (o._cachedOutline = o.o.split(" ")); - for (let r = 0, o = t.length; r < o;) { - switch (t[r++]) { - case "m": - a = t[r++] * e + n, l = t[r++] * e + i, s.moveTo(a, l); - break; - case "l": - a = t[r++] * e + n, l = t[r++] * e + i, s.lineTo(a, l); - break; - case "q": - c = t[r++] * e + n, h = t[r++] * e + i, u = t[r++] * e + n, d = t[r++] * e + i, s.quadraticCurveTo(u, d, c, h); - break; - case "b": - c = t[r++] * e + n, h = t[r++] * e + i, u = t[r++] * e + n, d = t[r++] * e + i, p = t[r++] * e + n, f = t[r++] * e + i, s.bezierCurveTo(u, d, p, f, c, h) - } - } - } - return { - offsetX: o.ha * e, - path: s - } - } - - function Sa(t) { - Es.call(this, t) - } - let Ta; - Sa.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Sa, - load: function(t, e, n, i) { - const r = this, - o = new Ts(this.manager); - o.setPath(this.path), o.setRequestHeader(this.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(t) { - let n; - try { - n = JSON.parse(t) - } catch (e) { - console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."), n = JSON.parse(t.substring(65, t.length - 2)) - } - const i = r.parse(n); - e && e(i) - }), n, i) - }, - parse: function(t) { - return new Ma(t) - } - }); - const La = function() { - return void 0 === Ta && (Ta = new(window.AudioContext || window.webkitAudioContext)), Ta - }; - - function Ra(t) { - Es.call(this, t) - } - - function Ca(t, e, n) { - ga.call(this, void 0, n); - const i = (new Yt).set(t), - r = (new Yt).set(e), - o = new T(i.r, i.g, i.b), - s = new T(r.r, r.g, r.b), - a = Math.sqrt(Math.PI), - l = a * Math.sqrt(.75); - this.sh.coefficients[0].copy(o).add(s).multiplyScalar(a), this.sh.coefficients[1].copy(o).sub(s).multiplyScalar(l) - } - - function Pa(t, e) { - ga.call(this, void 0, e); - const n = (new Yt).set(t); - this.sh.coefficients[0].set(n.r, n.g, n.b).multiplyScalar(2 * Math.sqrt(Math.PI)) - } - Ra.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Ra, - load: function(t, e, n, i) { - const r = this, - o = new Ts(r.manager); - o.setResponseType("arraybuffer"), o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { - try { - const t = n.slice(0); - La().decodeAudioData(t, (function(t) { - e(t) - })) - } catch (e) { - i ? i(e) : console.error(e), r.manager.itemError(t) - } - }), n, i) - } - }), Ca.prototype = Object.assign(Object.create(ga.prototype), { - constructor: Ca, - isHemisphereLightProbe: !0, - copy: function(t) { - return ga.prototype.copy.call(this, t), this - }, - toJSON: function(t) { - return ga.prototype.toJSON.call(this, t) - } - }), Pa.prototype = Object.assign(Object.create(ga.prototype), { - constructor: Pa, - isAmbientLightProbe: !0, - copy: function(t) { - return ga.prototype.copy.call(this, t), this - }, - toJSON: function(t) { - return ga.prototype.toJSON.call(this, t) - } - }); - const Da = new et, - Ia = new et; - Object.assign(function() { - this.type = "StereoCamera", this.aspect = 1, this.eyeSep = .064, this.cameraL = new Ye, this.cameraL.layers.enable(1), this.cameraL.matrixAutoUpdate = !1, this.cameraR = new Ye, this.cameraR.layers.enable(2), this.cameraR.matrixAutoUpdate = !1, this._cache = { - focus: null, - fov: null, - aspect: null, - near: null, - far: null, - zoom: null, - eyeSep: null - } - }.prototype, { - update: function(t) { - const e = this._cache; - if (e.focus !== t.focus || e.fov !== t.fov || e.aspect !== t.aspect * this.aspect || e.near !== t.near || e.far !== t.far || e.zoom !== t.zoom || e.eyeSep !== this.eyeSep) { - e.focus = t.focus, e.fov = t.fov, e.aspect = t.aspect * this.aspect, e.near = t.near, e.far = t.far, e.zoom = t.zoom, e.eyeSep = this.eyeSep; - const n = t.projectionMatrix.clone(), - i = e.eyeSep / 2, - r = i * e.near / e.focus, - o = e.near * Math.tan(g.DEG2RAD * e.fov * .5) / e.zoom; - let s, a; - Ia.elements[12] = -i, Da.elements[12] = i, s = -o * e.aspect + r, a = o * e.aspect + r, n.elements[0] = 2 * e.near / (a - s), n.elements[8] = (a + s) / (a - s), this.cameraL.projectionMatrix.copy(n), s = -o * e.aspect - r, a = o * e.aspect - r, n.elements[0] = 2 * e.near / (a - s), n.elements[8] = (a + s) / (a - s), this.cameraR.projectionMatrix.copy(n) - } - this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(Ia), this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(Da) - } - }); - - function Oa(t, e, n) { - let i, r, o; - switch (this.binding = t, this.valueSize = n, e) { - case "quaternion": - i = this._slerp, r = this._slerpAdditive, o = this._setAdditiveIdentityQuaternion, this.buffer = new Float64Array(6 * n), this._workIndex = 5; - break; - case "string": - case "bool": - i = this._select, r = this._select, o = this._setAdditiveIdentityOther, this.buffer = new Array(5 * n); - break; - default: - i = this._lerp, r = this._lerpAdditive, o = this._setAdditiveIdentityNumeric, this.buffer = new Float64Array(5 * n) - } - this._mixBufferRegion = i, this._mixBufferRegionAdditive = r, this._setIdentity = o, this._origIndex = 3, this._addIndex = 4, this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0, this.useCount = 0, this.referenceCount = 0 - } - Object.assign(Oa.prototype, { - accumulate: function(t, e) { - const n = this.buffer, - i = this.valueSize, - r = t * i + i; - let o = this.cumulativeWeight; - if (0 === o) { - for (let t = 0; t !== i; ++t) n[r + t] = n[t]; - o = e - } else { - o += e; - const t = e / o; - this._mixBufferRegion(n, r, 0, t, i) - } - this.cumulativeWeight = o - }, - accumulateAdditive: function(t) { - const e = this.buffer, - n = this.valueSize, - i = n * this._addIndex; - 0 === this.cumulativeWeightAdditive && this._setIdentity(), this._mixBufferRegionAdditive(e, i, 0, t, n), this.cumulativeWeightAdditive += t - }, - apply: function(t) { - const e = this.valueSize, - n = this.buffer, - i = t * e + e, - r = this.cumulativeWeight, - o = this.cumulativeWeightAdditive, - s = this.binding; - if (this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0, r < 1) { - const t = e * this._origIndex; - this._mixBufferRegion(n, i, t, 1 - r, e) - } - o > 0 && this._mixBufferRegionAdditive(n, i, this._addIndex * e, 1, e); - for (let t = e, r = e + e; t !== r; ++t) - if (n[t] !== n[t + e]) { - s.setValue(n, i); - break - } - }, - saveOriginalState: function() { - const t = this.binding, - e = this.buffer, - n = this.valueSize, - i = n * this._origIndex; - t.getValue(e, i); - for (let t = n, r = i; t !== r; ++t) e[t] = e[i + t % n]; - this._setIdentity(), this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0 - }, - restoreOriginalState: function() { - const t = 3 * this.valueSize; - this.binding.setValue(this.buffer, t) - }, - _setAdditiveIdentityNumeric: function() { - const t = this._addIndex * this.valueSize, - e = t + this.valueSize; - for (let n = t; n < e; n++) this.buffer[n] = 0 - }, - _setAdditiveIdentityQuaternion: function() { - this._setAdditiveIdentityNumeric(), this.buffer[this._addIndex * this.valueSize + 3] = 1 - }, - _setAdditiveIdentityOther: function() { - const t = this._origIndex * this.valueSize, - e = this._addIndex * this.valueSize; - for (let n = 0; n < this.valueSize; n++) this.buffer[e + n] = this.buffer[t + n] - }, - _select: function(t, e, n, i, r) { - if (i >= .5) - for (let i = 0; i !== r; ++i) t[e + i] = t[n + i] - }, - _slerp: function(t, e, n, i) { - S.slerpFlat(t, e, t, e, t, n, i) - }, - _slerpAdditive: function(t, e, n, i, r) { - const o = this._workIndex * r; - S.multiplyQuaternionsFlat(t, o, t, e, t, n), S.slerpFlat(t, e, t, e, t, o, i) - }, - _lerp: function(t, e, n, i, r) { - const o = 1 - i; - for (let s = 0; s !== r; ++s) { - const r = e + s; - t[r] = t[r] * o + t[n + s] * i - } - }, - _lerpAdditive: function(t, e, n, i, r) { - for (let o = 0; o !== r; ++o) { - const r = e + o; - t[r] = t[r] + t[n + o] * i - } - } - }); - const Na = new RegExp("[\\[\\]\\.:\\/]", "g"), - Ba = "[^" + "\\[\\]\\.:\\/".replace("\\.", "") + "]", - Fa = /((?:WC+[\/:])*)/.source.replace("WC", "[^\\[\\]\\.:\\/]"), - za = /(WCOD+)?/.source.replace("WCOD", Ba), - Ua = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), - Ha = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), - Ga = new RegExp("^" + Fa + za + Ua + Ha + "$"), - Va = ["material", "materials", "bones"]; - - function ka(t, e, n) { - const i = n || Wa.parseTrackName(e); - this._targetGroup = t, this._bindings = t.subscribe_(e, i) - } - - function Wa(t, e, n) { - this.path = e, this.parsedPath = n || Wa.parseTrackName(e), this.node = Wa.findNode(t, this.parsedPath.nodeName) || t, this.rootNode = t - } - Object.assign(ka.prototype, { - getValue: function(t, e) { - this.bind(); - const n = this._targetGroup.nCachedObjects_, - i = this._bindings[n]; - void 0 !== i && i.getValue(t, e) - }, - setValue: function(t, e) { - const n = this._bindings; - for (let i = this._targetGroup.nCachedObjects_, r = n.length; i !== r; ++i) n[i].setValue(t, e) - }, - bind: function() { - const t = this._bindings; - for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].bind() - }, - unbind: function() { - const t = this._bindings; - for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].unbind() - } - }), Object.assign(Wa, { - Composite: ka, - create: function(t, e, n) { - return t && t.isAnimationObjectGroup ? new Wa.Composite(t, e, n) : new Wa(t, e, n) - }, - sanitizeNodeName: function(t) { - return t.replace(/\s/g, "_").replace(Na, "") - }, - parseTrackName: function(t) { - const e = Ga.exec(t); - if (!e) throw new Error("PropertyBinding: Cannot parse trackName: " + t); - const n = { - nodeName: e[2], - objectName: e[3], - objectIndex: e[4], - propertyName: e[5], - propertyIndex: e[6] - }, - i = n.nodeName && n.nodeName.lastIndexOf("."); - if (void 0 !== i && -1 !== i) { - const t = n.nodeName.substring(i + 1); - 1 !== Va.indexOf(t) && (n.nodeName = n.nodeName.substring(0, i), n.objectName = t) - } - if (null === n.propertyName || 0 === n.propertyName.length) throw new Error("PropertyBinding: can not parse propertyName from trackName: " + t); - return n - }, - findNode: function(t, e) { - if (!e || "" === e || "." === e || -1 === e || e === t.name || e === t.uuid) return t; - if (t.skeleton) { - const n = t.skeleton.getBoneByName(e); - if (void 0 !== n) return n - } - if (t.children) { - const n = function(t) { - for (let i = 0; i < t.length; i++) { - const r = t[i]; - if (r.name === e || r.uuid === e) return r; - const o = n(r.children); - if (o) return o - } - return null - }, - i = n(t.children); - if (i) return i - } - return null - } - }), Object.assign(Wa.prototype, { - _getValue_unavailable: function() {}, - _setValue_unavailable: function() {}, - BindingType: { - Direct: 0, - EntireArray: 1, - ArrayElement: 2, - HasFromToArray: 3 - }, - Versioning: { - None: 0, - NeedsUpdate: 1, - MatrixWorldNeedsUpdate: 2 - }, - GetterByBindingType: [function(t, e) { - t[e] = this.node[this.propertyName] - }, function(t, e) { - const n = this.resolvedProperty; - for (let i = 0, r = n.length; i !== r; ++i) t[e++] = n[i] - }, function(t, e) { - t[e] = this.resolvedProperty[this.propertyIndex] - }, function(t, e) { - this.resolvedProperty.toArray(t, e) - }], - SetterByBindingTypeAndVersioning: [ - [function(t, e) { - this.targetObject[this.propertyName] = t[e] - }, function(t, e) { - this.targetObject[this.propertyName] = t[e], this.targetObject.needsUpdate = !0 - }, function(t, e) { - this.targetObject[this.propertyName] = t[e], this.targetObject.matrixWorldNeedsUpdate = !0 - }], - [function(t, e) { - const n = this.resolvedProperty; - for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++] - }, function(t, e) { - const n = this.resolvedProperty; - for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]; - this.targetObject.needsUpdate = !0 - }, function(t, e) { - const n = this.resolvedProperty; - for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]; - this.targetObject.matrixWorldNeedsUpdate = !0 - }], - [function(t, e) { - this.resolvedProperty[this.propertyIndex] = t[e] - }, function(t, e) { - this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.needsUpdate = !0 - }, function(t, e) { - this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.matrixWorldNeedsUpdate = !0 - }], - [function(t, e) { - this.resolvedProperty.fromArray(t, e) - }, function(t, e) { - this.resolvedProperty.fromArray(t, e), this.targetObject.needsUpdate = !0 - }, function(t, e) { - this.resolvedProperty.fromArray(t, e), this.targetObject.matrixWorldNeedsUpdate = !0 - }] - ], - getValue: function(t, e) { - this.bind(), this.getValue(t, e) - }, - setValue: function(t, e) { - this.bind(), this.setValue(t, e) - }, - bind: function() { - let t = this.node; - const e = this.parsedPath, - n = e.objectName, - i = e.propertyName; - let r = e.propertyIndex; - if (t || (t = Wa.findNode(this.rootNode, e.nodeName) || this.rootNode, this.node = t), this.getValue = this._getValue_unavailable, this.setValue = this._setValue_unavailable, !t) return void console.error("THREE.PropertyBinding: Trying to update node for track: " + this.path + " but it wasn't found."); - if (n) { - let i = e.objectIndex; - switch (n) { - case "materials": - if (!t.material) return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); - if (!t.material.materials) return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); - t = t.material.materials; - break; - case "bones": - if (!t.skeleton) return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); - t = t.skeleton.bones; - for (let e = 0; e < t.length; e++) - if (t[e].name === i) { - i = e; - break - } break; - default: - if (void 0 === t[n]) return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); - t = t[n] - } - if (void 0 !== i) { - if (void 0 === t[i]) return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, t); - t = t[i] - } - } - const o = t[i]; - if (void 0 === o) { - const n = e.nodeName; - return void console.error("THREE.PropertyBinding: Trying to update property for track: " + n + "." + i + " but it wasn't found.", t) - } - let s = this.Versioning.None; - this.targetObject = t, void 0 !== t.needsUpdate ? s = this.Versioning.NeedsUpdate : void 0 !== t.matrixWorldNeedsUpdate && (s = this.Versioning.MatrixWorldNeedsUpdate); - let a = this.BindingType.Direct; - if (void 0 !== r) { - if ("morphTargetInfluences" === i) { - if (!t.geometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); - if (!t.geometry.isBufferGeometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.", this); - if (!t.geometry.morphAttributes) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); - void 0 !== t.morphTargetDictionary[r] && (r = t.morphTargetDictionary[r]) - } - a = this.BindingType.ArrayElement, this.resolvedProperty = o, this.propertyIndex = r - } else void 0 !== o.fromArray && void 0 !== o.toArray ? (a = this.BindingType.HasFromToArray, this.resolvedProperty = o) : Array.isArray(o) ? (a = this.BindingType.EntireArray, this.resolvedProperty = o) : this.propertyName = i; - this.getValue = this.GetterByBindingType[a], this.setValue = this.SetterByBindingTypeAndVersioning[a][s] - }, - unbind: function() { - this.node = null, this.getValue = this._getValue_unbound, this.setValue = this._setValue_unbound - } - }), Object.assign(Wa.prototype, { - _getValue_unbound: Wa.prototype.getValue, - _setValue_unbound: Wa.prototype.setValue - }), Object.assign(function() { - this.uuid = g.generateUUID(), this._objects = Array.prototype.slice.call(arguments), this.nCachedObjects_ = 0; - const t = {}; - this._indicesByUUID = t; - for (let e = 0, n = arguments.length; e !== n; ++e) t[arguments[e].uuid] = e; - this._paths = [], this._parsedPaths = [], this._bindings = [], this._bindingsIndicesByPath = {}; - const e = this; - this.stats = { - objects: { - get total() { - return e._objects.length - }, - get inUse() { - return this.total - e.nCachedObjects_ - } - }, - get bindingsPerObject() { - return e._bindings.length - } - } - }.prototype, { - isAnimationObjectGroup: !0, - add: function() { - const t = this._objects, - e = this._indicesByUUID, - n = this._paths, - i = this._parsedPaths, - r = this._bindings, - o = r.length; - let s = void 0, - a = t.length, - l = this.nCachedObjects_; - for (let c = 0, h = arguments.length; c !== h; ++c) { - const h = arguments[c], - u = h.uuid; - let d = e[u]; - if (void 0 === d) { - d = a++, e[u] = d, t.push(h); - for (let t = 0, e = o; t !== e; ++t) r[t].push(new Wa(h, n[t], i[t])) - } else if (d < l) { - s = t[d]; - const a = --l, - c = t[a]; - e[c.uuid] = d, t[d] = c, e[u] = a, t[a] = h; - for (let t = 0, e = o; t !== e; ++t) { - const e = r[t], - o = e[a]; - let s = e[d]; - e[d] = o, void 0 === s && (s = new Wa(h, n[t], i[t])), e[a] = s - } - } else t[d] !== s && console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.") - } - this.nCachedObjects_ = l - }, - remove: function() { - const t = this._objects, - e = this._indicesByUUID, - n = this._bindings, - i = n.length; - let r = this.nCachedObjects_; - for (let o = 0, s = arguments.length; o !== s; ++o) { - const s = arguments[o], - a = s.uuid, - l = e[a]; - if (void 0 !== l && l >= r) { - const o = r++, - c = t[o]; - e[c.uuid] = l, t[l] = c, e[a] = o, t[o] = s; - for (let t = 0, e = i; t !== e; ++t) { - const e = n[t], - i = e[o], - r = e[l]; - e[l] = i, e[o] = r - } - } - } - this.nCachedObjects_ = r - }, - uncache: function() { - const t = this._objects, - e = this._indicesByUUID, - n = this._bindings, - i = n.length; - let r = this.nCachedObjects_, - o = t.length; - for (let s = 0, a = arguments.length; s !== a; ++s) { - const a = arguments[s].uuid, - l = e[a]; - if (void 0 !== l) - if (delete e[a], l < r) { - const s = --r, - a = t[s], - c = --o, - h = t[c]; - e[a.uuid] = l, t[l] = a, e[h.uuid] = s, t[s] = h, t.pop(); - for (let t = 0, e = i; t !== e; ++t) { - const e = n[t], - i = e[s], - r = e[c]; - e[l] = i, e[s] = r, e.pop() - } - } else { - const r = --o, - s = t[r]; - r > 0 && (e[s.uuid] = l), t[l] = s, t.pop(); - for (let t = 0, e = i; t !== e; ++t) { - const e = n[t]; - e[l] = e[r], e.pop() - } - } - } - this.nCachedObjects_ = r - }, - subscribe_: function(t, e) { - const n = this._bindingsIndicesByPath; - let i = n[t]; - const r = this._bindings; - if (void 0 !== i) return r[i]; - const o = this._paths, - s = this._parsedPaths, - a = this._objects, - l = a.length, - c = this.nCachedObjects_, - h = new Array(l); - i = r.length, n[t] = i, o.push(t), s.push(e), r.push(h); - for (let n = c, i = a.length; n !== i; ++n) { - const i = a[n]; - h[n] = new Wa(i, t, e) - } - return h - }, - unsubscribe_: function(t) { - const e = this._bindingsIndicesByPath, - n = e[t]; - if (void 0 !== n) { - const i = this._paths, - r = this._parsedPaths, - o = this._bindings, - s = o.length - 1, - a = o[s]; - e[t[s]] = n, o[n] = a, o.pop(), r[n] = r[s], r.pop(), i[n] = i[s], i.pop() - } - } - }); - class ja { - constructor(t, e, n = null, i = e.blendMode) { - this._mixer = t, this._clip = e, this._localRoot = n, this.blendMode = i; - const r = e.tracks, - o = r.length, - s = new Array(o), - a = { - endingStart: 2400, - endingEnd: 2400 - }; - for (let t = 0; t !== o; ++t) { - const e = r[t].createInterpolant(null); - s[t] = e, e.settings = a - } - this._interpolantSettings = a, this._interpolants = s, this._propertyBindings = new Array(o), this._cacheIndex = null, this._byClipCacheIndex = null, this._timeScaleInterpolant = null, this._weightInterpolant = null, this.loop = 2201, this._loopCount = -1, this._startTime = null, this.time = 0, this.timeScale = 1, this._effectiveTimeScale = 1, this.weight = 1, this._effectiveWeight = 1, this.repetitions = 1 / 0, this.paused = !1, this.enabled = !0, this.clampWhenFinished = !1, this.zeroSlopeAtStart = !0, this.zeroSlopeAtEnd = !0 - } - play() { - return this._mixer._activateAction(this), this - } - stop() { - return this._mixer._deactivateAction(this), this.reset() - } - reset() { - return this.paused = !1, this.enabled = !0, this.time = 0, this._loopCount = -1, this._startTime = null, this.stopFading().stopWarping() - } - isRunning() { - return this.enabled && !this.paused && 0 !== this.timeScale && null === this._startTime && this._mixer._isActiveAction(this) - } - isScheduled() { - return this._mixer._isActiveAction(this) - } - startAt(t) { - return this._startTime = t, this - } - setLoop(t, e) { - return this.loop = t, this.repetitions = e, this - } - setEffectiveWeight(t) { - return this.weight = t, this._effectiveWeight = this.enabled ? t : 0, this.stopFading() - } - getEffectiveWeight() { - return this._effectiveWeight - } - fadeIn(t) { - return this._scheduleFading(t, 0, 1) - } - fadeOut(t) { - return this._scheduleFading(t, 1, 0) - } - crossFadeFrom(t, e, n) { - if (t.fadeOut(e), this.fadeIn(e), n) { - const n = this._clip.duration, - i = t._clip.duration, - r = i / n, - o = n / i; - t.warp(1, r, e), this.warp(o, 1, e) - } - return this - } - crossFadeTo(t, e, n) { - return t.crossFadeFrom(this, e, n) - } - stopFading() { - const t = this._weightInterpolant; - return null !== t && (this._weightInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this - } - setEffectiveTimeScale(t) { - return this.timeScale = t, this._effectiveTimeScale = this.paused ? 0 : t, this.stopWarping() - } - getEffectiveTimeScale() { - return this._effectiveTimeScale - } - setDuration(t) { - return this.timeScale = this._clip.duration / t, this.stopWarping() - } - syncWith(t) { - return this.time = t.time, this.timeScale = t.timeScale, this.stopWarping() - } - halt(t) { - return this.warp(this._effectiveTimeScale, 0, t) - } - warp(t, e, n) { - const i = this._mixer, - r = i.time, - o = this.timeScale; - let s = this._timeScaleInterpolant; - null === s && (s = i._lendControlInterpolant(), this._timeScaleInterpolant = s); - const a = s.parameterPositions, - l = s.sampleValues; - return a[0] = r, a[1] = r + n, l[0] = t / o, l[1] = e / o, this - } - stopWarping() { - const t = this._timeScaleInterpolant; - return null !== t && (this._timeScaleInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this - } - getMixer() { - return this._mixer - } - getClip() { - return this._clip - } - getRoot() { - return this._localRoot || this._mixer._root - } - _update(t, e, n, i) { - if (!this.enabled) return void this._updateWeight(t); - const r = this._startTime; - if (null !== r) { - const i = (t - r) * n; - if (i < 0 || 0 === n) return; - this._startTime = null, e = n * i - } - e *= this._updateTimeScale(t); - const o = this._updateTime(e), - s = this._updateWeight(t); - if (s > 0) { - const t = this._interpolants, - e = this._propertyBindings; - switch (this.blendMode) { - case 2501: - for (let n = 0, i = t.length; n !== i; ++n) t[n].evaluate(o), e[n].accumulateAdditive(s); - break; - case 2500: - default: - for (let n = 0, r = t.length; n !== r; ++n) t[n].evaluate(o), e[n].accumulate(i, s) - } - } - } - _updateWeight(t) { - let e = 0; - if (this.enabled) { - e = this.weight; - const n = this._weightInterpolant; - if (null !== n) { - const i = n.evaluate(t)[0]; - e *= i, t > n.parameterPositions[1] && (this.stopFading(), 0 === i && (this.enabled = !1)) - } - } - return this._effectiveWeight = e, e - } - _updateTimeScale(t) { - let e = 0; - if (!this.paused) { - e = this.timeScale; - const n = this._timeScaleInterpolant; - if (null !== n) { - e *= n.evaluate(t)[0], t > n.parameterPositions[1] && (this.stopWarping(), 0 === e ? this.paused = !0 : this.timeScale = e) - } - } - return this._effectiveTimeScale = e, e - } - _updateTime(t) { - const e = this._clip.duration, - n = this.loop; - let i = this.time + t, - r = this._loopCount; - const o = 2202 === n; - if (0 === t) return -1 === r ? i : o && 1 == (1 & r) ? e - i : i; - if (2200 === n) { - -1 === r && (this._loopCount = 0, this._setEndings(!0, !0, !1)); - t: { - if (i >= e) i = e; - else { - if (!(i < 0)) { - this.time = i; - break t - } - i = 0 - } - this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, - this.time = i, - this._mixer.dispatchEvent({ - type: "finished", - action: this, - direction: t < 0 ? -1 : 1 - }) - } - } else { - if (-1 === r && (t >= 0 ? (r = 0, this._setEndings(!0, 0 === this.repetitions, o)) : this._setEndings(0 === this.repetitions, !0, o)), i >= e || i < 0) { - const n = Math.floor(i / e); - i -= e * n, r += Math.abs(n); - const s = this.repetitions - r; - if (s <= 0) this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, i = t > 0 ? e : 0, this.time = i, this._mixer.dispatchEvent({ - type: "finished", - action: this, - direction: t > 0 ? 1 : -1 - }); - else { - if (1 === s) { - const e = t < 0; - this._setEndings(e, !e, o) - } else this._setEndings(!1, !1, o); - this._loopCount = r, this.time = i, this._mixer.dispatchEvent({ - type: "loop", - action: this, - loopDelta: n - }) - } - } else this.time = i; - if (o && 1 == (1 & r)) return e - i - } - return i - } - _setEndings(t, e, n) { - const i = this._interpolantSettings; - n ? (i.endingStart = 2401, i.endingEnd = 2401) : (i.endingStart = t ? this.zeroSlopeAtStart ? 2401 : 2400 : 2402, i.endingEnd = e ? this.zeroSlopeAtEnd ? 2401 : 2400 : 2402) - } - _scheduleFading(t, e, n) { - const i = this._mixer, - r = i.time; - let o = this._weightInterpolant; - null === o && (o = i._lendControlInterpolant(), this._weightInterpolant = o); - const s = o.parameterPositions, - a = o.sampleValues; - return s[0] = r, a[0] = e, s[1] = r + t, a[1] = n, this - } - } - - function Xa(t) { - this._root = t, this._initMemoryManager(), this._accuIndex = 0, this.time = 0, this.timeScale = 1 - } - Xa.prototype = Object.assign(Object.create(p.prototype), { - constructor: Xa, - _bindAction: function(t, e) { - const n = t._localRoot || this._root, - i = t._clip.tracks, - r = i.length, - o = t._propertyBindings, - s = t._interpolants, - a = n.uuid, - l = this._bindingsByRootAndName; - let c = l[a]; - void 0 === c && (c = {}, l[a] = c); - for (let t = 0; t !== r; ++t) { - const r = i[t], - l = r.name; - let h = c[l]; - if (void 0 !== h) o[t] = h; - else { - if (h = o[t], void 0 !== h) { - null === h._cacheIndex && (++h.referenceCount, this._addInactiveBinding(h, a, l)); - continue - } - const i = e && e._propertyBindings[t].binding.parsedPath; - h = new Oa(Wa.create(n, l, i), r.ValueTypeName, r.getValueSize()), ++h.referenceCount, this._addInactiveBinding(h, a, l), o[t] = h - } - s[t].resultBuffer = h.buffer - } - }, - _activateAction: function(t) { - if (!this._isActiveAction(t)) { - if (null === t._cacheIndex) { - const e = (t._localRoot || this._root).uuid, - n = t._clip.uuid, - i = this._actionsByClip[n]; - this._bindAction(t, i && i.knownActions[0]), this._addInactiveAction(t, n, e) - } - const e = t._propertyBindings; - for (let t = 0, n = e.length; t !== n; ++t) { - const n = e[t]; - 0 == n.useCount++ && (this._lendBinding(n), n.saveOriginalState()) - } - this._lendAction(t) - } - }, - _deactivateAction: function(t) { - if (this._isActiveAction(t)) { - const e = t._propertyBindings; - for (let t = 0, n = e.length; t !== n; ++t) { - const n = e[t]; - 0 == --n.useCount && (n.restoreOriginalState(), this._takeBackBinding(n)) - } - this._takeBackAction(t) - } - }, - _initMemoryManager: function() { - this._actions = [], this._nActiveActions = 0, this._actionsByClip = {}, this._bindings = [], this._nActiveBindings = 0, this._bindingsByRootAndName = {}, this._controlInterpolants = [], this._nActiveControlInterpolants = 0; - const t = this; - this.stats = { - actions: { - get total() { - return t._actions.length - }, - get inUse() { - return t._nActiveActions - } - }, - bindings: { - get total() { - return t._bindings.length - }, - get inUse() { - return t._nActiveBindings - } - }, - controlInterpolants: { - get total() { - return t._controlInterpolants.length - }, - get inUse() { - return t._nActiveControlInterpolants - } - } - } - }, - _isActiveAction: function(t) { - const e = t._cacheIndex; - return null !== e && e < this._nActiveActions - }, - _addInactiveAction: function(t, e, n) { - const i = this._actions, - r = this._actionsByClip; - let o = r[e]; - if (void 0 === o) o = { - knownActions: [t], - actionByRoot: {} - }, t._byClipCacheIndex = 0, r[e] = o; - else { - const e = o.knownActions; - t._byClipCacheIndex = e.length, e.push(t) - } - t._cacheIndex = i.length, i.push(t), o.actionByRoot[n] = t - }, - _removeInactiveAction: function(t) { - const e = this._actions, - n = e[e.length - 1], - i = t._cacheIndex; - n._cacheIndex = i, e[i] = n, e.pop(), t._cacheIndex = null; - const r = t._clip.uuid, - o = this._actionsByClip, - s = o[r], - a = s.knownActions, - l = a[a.length - 1], - c = t._byClipCacheIndex; - l._byClipCacheIndex = c, a[c] = l, a.pop(), t._byClipCacheIndex = null; - delete s.actionByRoot[(t._localRoot || this._root).uuid], 0 === a.length && delete o[r], this._removeInactiveBindingsForAction(t) - }, - _removeInactiveBindingsForAction: function(t) { - const e = t._propertyBindings; - for (let t = 0, n = e.length; t !== n; ++t) { - const n = e[t]; - 0 == --n.referenceCount && this._removeInactiveBinding(n) - } - }, - _lendAction: function(t) { - const e = this._actions, - n = t._cacheIndex, - i = this._nActiveActions++, - r = e[i]; - t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r - }, - _takeBackAction: function(t) { - const e = this._actions, - n = t._cacheIndex, - i = --this._nActiveActions, - r = e[i]; - t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r - }, - _addInactiveBinding: function(t, e, n) { - const i = this._bindingsByRootAndName, - r = this._bindings; - let o = i[e]; - void 0 === o && (o = {}, i[e] = o), o[n] = t, t._cacheIndex = r.length, r.push(t) - }, - _removeInactiveBinding: function(t) { - const e = this._bindings, - n = t.binding, - i = n.rootNode.uuid, - r = n.path, - o = this._bindingsByRootAndName, - s = o[i], - a = e[e.length - 1], - l = t._cacheIndex; - a._cacheIndex = l, e[l] = a, e.pop(), delete s[r], 0 === Object.keys(s).length && delete o[i] - }, - _lendBinding: function(t) { - const e = this._bindings, - n = t._cacheIndex, - i = this._nActiveBindings++, - r = e[i]; - t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r - }, - _takeBackBinding: function(t) { - const e = this._bindings, - n = t._cacheIndex, - i = --this._nActiveBindings, - r = e[i]; - t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r - }, - _lendControlInterpolant: function() { - const t = this._controlInterpolants, - e = this._nActiveControlInterpolants++; - let n = t[e]; - return void 0 === n && (n = new us(new Float32Array(2), new Float32Array(2), 1, this._controlInterpolantsResultBuffer), n.__cacheIndex = e, t[e] = n), n - }, - _takeBackControlInterpolant: function(t) { - const e = this._controlInterpolants, - n = t.__cacheIndex, - i = --this._nActiveControlInterpolants, - r = e[i]; - t.__cacheIndex = i, e[i] = t, r.__cacheIndex = n, e[n] = r - }, - _controlInterpolantsResultBuffer: new Float32Array(1), - clipAction: function(t, e, n) { - const i = e || this._root, - r = i.uuid; - let o = "string" == typeof t ? _s.findByName(i, t) : t; - const s = null !== o ? o.uuid : t, - a = this._actionsByClip[s]; - let l = null; - if (void 0 === n && (n = null !== o ? o.blendMode : 2500), void 0 !== a) { - const t = a.actionByRoot[r]; - if (void 0 !== t && t.blendMode === n) return t; - l = a.knownActions[0], null === o && (o = l._clip) - } - if (null === o) return null; - const c = new ja(this, o, e, n); - return this._bindAction(c, l), this._addInactiveAction(c, s, r), c - }, - existingAction: function(t, e) { - const n = e || this._root, - i = n.uuid, - r = "string" == typeof t ? _s.findByName(n, t) : t, - o = r ? r.uuid : t, - s = this._actionsByClip[o]; - return void 0 !== s && s.actionByRoot[i] || null - }, - stopAllAction: function() { - const t = this._actions; - for (let e = this._nActiveActions - 1; e >= 0; --e) t[e].stop(); - return this - }, - update: function(t) { - t *= this.timeScale; - const e = this._actions, - n = this._nActiveActions, - i = this.time += t, - r = Math.sign(t), - o = this._accuIndex ^= 1; - for (let s = 0; s !== n; ++s) { - e[s]._update(i, t, r, o) - } - const s = this._bindings, - a = this._nActiveBindings; - for (let t = 0; t !== a; ++t) s[t].apply(o); - return this - }, - setTime: function(t) { - this.time = 0; - for (let t = 0; t < this._actions.length; t++) this._actions[t].time = 0; - return this.update(t) - }, - getRoot: function() { - return this._root - }, - uncacheClip: function(t) { - const e = this._actions, - n = t.uuid, - i = this._actionsByClip, - r = i[n]; - if (void 0 !== r) { - const t = r.knownActions; - for (let n = 0, i = t.length; n !== i; ++n) { - const i = t[n]; - this._deactivateAction(i); - const r = i._cacheIndex, - o = e[e.length - 1]; - i._cacheIndex = null, i._byClipCacheIndex = null, o._cacheIndex = r, e[r] = o, e.pop(), this._removeInactiveBindingsForAction(i) - } - delete i[n] - } - }, - uncacheRoot: function(t) { - const e = t.uuid, - n = this._actionsByClip; - for (const t in n) { - const i = n[t].actionByRoot[e]; - void 0 !== i && (this._deactivateAction(i), this._removeInactiveAction(i)) - } - const i = this._bindingsByRootAndName[e]; - if (void 0 !== i) - for (const t in i) { - const e = i[t]; - e.restoreOriginalState(), this._removeInactiveBinding(e) - } - }, - uncacheAction: function(t, e) { - const n = this.existingAction(t, e); - null !== n && (this._deactivateAction(n), this._removeInactiveAction(n)) - } - }); - class qa { - constructor(t) { - "string" == typeof t && (console.warn("THREE.Uniform: Type parameter is no longer needed."), t = arguments[1]), this.value = t - } - clone() { - return new qa(void 0 === this.value.clone ? this.value : this.value.clone()) - } - } - - function Ya(t, e, n) { - dr.call(this, t, e), this.meshPerAttribute = n || 1 - } - - function Qa(t, e, n, i, r) { - this.buffer = t, this.type = e, this.itemSize = n, this.elementSize = i, this.count = r, this.version = 0 - } - - function Za(t, e, n, i) { - this.ray = new tt(t, e), this.near = n || 0, this.far = i || 1 / 0, this.camera = null, this.layers = new dt, this.params = { - Mesh: {}, - Line: { - threshold: 1 - }, - LOD: {}, - Points: { - threshold: 1 - }, - Sprite: {} - }, Object.defineProperties(this.params, { - PointCloud: { - get: function() { - return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."), this.Points - } - } - }) - } - - function Ja(t, e) { - return t.distance - e.distance - } - - function Ka(t, e, n, i) { - if (t.layers.test(e.layers) && t.raycast(e, n), !0 === i) { - const i = t.children; - for (let t = 0, r = i.length; t < r; t++) Ka(i[t], e, n, !0) - } - } - Ya.prototype = Object.assign(Object.create(dr.prototype), { - constructor: Ya, - isInstancedInterleavedBuffer: !0, - copy: function(t) { - return dr.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this - }, - clone: function(t) { - const e = dr.prototype.clone.call(this, t); - return e.meshPerAttribute = this.meshPerAttribute, e - }, - toJSON: function(t) { - const e = dr.prototype.toJSON.call(this, t); - return e.isInstancedInterleavedBuffer = !0, e.meshPerAttribute = this.meshPerAttribute, e - } - }), Object.defineProperty(Qa.prototype, "needsUpdate", { - set: function(t) { - !0 === t && this.version++ - } - }), Object.assign(Qa.prototype, { - isGLBufferAttribute: !0, - setBuffer: function(t) { - return this.buffer = t, this - }, - setType: function(t, e) { - return this.type = t, this.elementSize = e, this - }, - setItemSize: function(t) { - return this.itemSize = t, this - }, - setCount: function(t) { - return this.count = t, this - } - }), Object.assign(Za.prototype, { - set: function(t, e) { - this.ray.set(t, e) - }, - setFromCamera: function(t, e) { - e && e.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), this.ray.direction.set(t.x, t.y, .5).unproject(e).sub(this.ray.origin).normalize(), this.camera = e) : e && e.isOrthographicCamera ? (this.ray.origin.set(t.x, t.y, (e.near + e.far) / (e.near - e.far)).unproject(e), this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld), this.camera = e) : console.error("THREE.Raycaster: Unsupported camera type: " + e.type) - }, - intersectObject: function(t, e, n) { - const i = n || []; - return Ka(t, this, i, e), i.sort(Ja), i - }, - intersectObjects: function(t, e, n) { - const i = n || []; - if (!1 === Array.isArray(t)) return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."), i; - for (let n = 0, r = t.length; n < r; n++) Ka(t[n], this, i, e); - return i.sort(Ja), i - } - }); - class $a { - constructor(t = 1, e = 0, n = 0) { - return this.radius = t, this.phi = e, this.theta = n, this - } - set(t, e, n) { - return this.radius = t, this.phi = e, this.theta = n, this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.radius = t.radius, this.phi = t.phi, this.theta = t.theta, this - } - makeSafe() { - return this.phi = Math.max(1e-6, Math.min(Math.PI - 1e-6, this.phi)), this - } - setFromVector3(t) { - return this.setFromCartesianCoords(t.x, t.y, t.z) - } - setFromCartesianCoords(t, e, n) { - return this.radius = Math.sqrt(t * t + e * e + n * n), 0 === this.radius ? (this.theta = 0, this.phi = 0) : (this.theta = Math.atan2(t, n), this.phi = Math.acos(g.clamp(e / this.radius, -1, 1))), this - } - } - const tl = new v; - const el = new T, - nl = new T; - - function il(t) { - St.call(this), this.material = t, this.render = function() {}, this.hasPositions = !1, this.hasNormals = !1, this.hasColors = !1, this.hasUvs = !1, this.positionArray = null, this.normalArray = null, this.colorArray = null, this.uvArray = null, this.count = 0 - } - il.prototype = Object.create(St.prototype), il.prototype.constructor = il, il.prototype.isImmediateRenderObject = !0; - const rl = new T, - ol = new et, - sl = new et; - const al = new Kt({ - side: 1, - depthWrite: !1, - depthTest: !1 - }); - new He(new Ve, al); - - function ll(t) { - console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."), Vs.call(this, t), this.type = "catmullrom" - } - Os.create = function(t, e) { - return console.log("THREE.Curve.create() has been deprecated"), t.prototype = Object.create(Os.prototype), t.prototype.constructor = t, t.prototype.getPoint = e, t - }, Object.assign(ea.prototype, { - fromPoints: function(t) { - return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."), this.setFromPoints(t) - } - }), ll.prototype = Object.create(Vs.prototype), Object.assign(ll.prototype, { - initFromArray: function() { - console.error("THREE.Spline: .initFromArray() has been removed.") - }, - getControlPointsArray: function() { - console.error("THREE.Spline: .getControlPointsArray() has been removed.") - }, - reparametrizeByArcLength: function() { - console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.") - } - }), class extends ro { - constructor(t = 10, e = 10, n = 4473924, i = 8947848) { - n = new Yt(n), i = new Yt(i); - const r = e / 2, - o = t / e, - s = t / 2, - a = [], - l = []; - for (let t = 0, c = 0, h = -s; t <= e; t++, h += o) { - a.push(-s, 0, h, s, 0, h), a.push(h, 0, -s, h, 0, s); - const e = t === r ? n : i; - e.toArray(l, c), c += 3, e.toArray(l, c), c += 3, e.toArray(l, c), c += 3, e.toArray(l, c), c += 3 - } - const c = new be; - c.setAttribute("position", new he(a, 3)), c.setAttribute("color", new he(l, 3)); - super(c, new Qr({ - vertexColors: !0, - toneMapped: !1 - })), this.type = "GridHelper" - } - }.prototype.setColors = function() { - console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.") - }, class extends ro { - constructor(t) { - const e = function t(e) { - const n = []; - e && e.isBone && n.push(e); - for (let i = 0; i < e.children.length; i++) n.push.apply(n, t(e.children[i])); - return n - }(t), - n = new be, - i = [], - r = [], - o = new Yt(0, 0, 1), - s = new Yt(0, 1, 0); - for (let t = 0; t < e.length; t++) { - const n = e[t]; - n.parent && n.parent.isBone && (i.push(0, 0, 0), i.push(0, 0, 0), r.push(o.r, o.g, o.b), r.push(s.r, s.g, s.b)) - } - n.setAttribute("position", new he(i, 3)), n.setAttribute("color", new he(r, 3)); - super(n, new Qr({ - vertexColors: !0, - depthTest: !1, - depthWrite: !1, - toneMapped: !1, - transparent: !0 - })), this.type = "SkeletonHelper", this.isSkeletonHelper = !0, this.root = t, this.bones = e, this.matrix = t.matrixWorld, this.matrixAutoUpdate = !1 - } - updateMatrixWorld(t) { - const e = this.bones, - n = this.geometry, - i = n.getAttribute("position"); - sl.copy(this.root.matrixWorld).invert(); - for (let t = 0, n = 0; t < e.length; t++) { - const r = e[t]; - r.parent && r.parent.isBone && (ol.multiplyMatrices(sl, r.matrixWorld), rl.setFromMatrixPosition(ol), i.setXYZ(n, rl.x, rl.y, rl.z), ol.multiplyMatrices(sl, r.parent.matrixWorld), rl.setFromMatrixPosition(ol), i.setXYZ(n + 1, rl.x, rl.y, rl.z), n += 2) - } - n.getAttribute("position").needsUpdate = !0, super.updateMatrixWorld(t) - } - }.prototype.update = function() { - console.error("THREE.SkeletonHelper: update() no longer needs to be called.") - }, Object.assign(Es.prototype, { - extractUrlBase: function(t) { - return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."), ya(t) - } - }), Es.Handlers = { - add: function() { - console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.") - }, - get: function() { - console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.") - } - }, Object.assign(class { - constructor(t, e) { - Object.defineProperty(this, "isBox2", { - value: !0 - }), this.min = void 0 !== t ? t : new v(1 / 0, 1 / 0), this.max = void 0 !== e ? e : new v(-1 / 0, -1 / 0) - } - set(t, e) { - return this.min.copy(t), this.max.copy(e), this - } - setFromPoints(t) { - this.makeEmpty(); - for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); - return this - } - setFromCenterAndSize(t, e) { - const n = tl.copy(e).multiplyScalar(.5); - return this.min.copy(t).sub(n), this.max.copy(t).add(n), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.min.copy(t.min), this.max.copy(t.max), this - } - makeEmpty() { - return this.min.x = this.min.y = 1 / 0, this.max.x = this.max.y = -1 / 0, this - } - isEmpty() { - return this.max.x < this.min.x || this.max.y < this.min.y - } - getCenter(t) { - return void 0 === t && (console.warn("THREE.Box2: .getCenter() target is now required"), t = new v), this.isEmpty() ? t.set(0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5) - } - getSize(t) { - return void 0 === t && (console.warn("THREE.Box2: .getSize() target is now required"), t = new v), this.isEmpty() ? t.set(0, 0) : t.subVectors(this.max, this.min) - } - expandByPoint(t) { - return this.min.min(t), this.max.max(t), this - } - expandByVector(t) { - return this.min.sub(t), this.max.add(t), this - } - expandByScalar(t) { - return this.min.addScalar(-t), this.max.addScalar(t), this - } - containsPoint(t) { - return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y) - } - containsBox(t) { - return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y - } - getParameter(t, e) { - return void 0 === e && (console.warn("THREE.Box2: .getParameter() target is now required"), e = new v), e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y)) - } - intersectsBox(t) { - return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y) - } - clampPoint(t, e) { - return void 0 === e && (console.warn("THREE.Box2: .clampPoint() target is now required"), e = new v), e.copy(t).clamp(this.min, this.max) - } - distanceToPoint(t) { - return tl.copy(t).clamp(this.min, this.max).sub(t).length() - } - intersect(t) { - return this.min.max(t.min), this.max.min(t.max), this - } - union(t) { - return this.min.min(t.min), this.max.max(t.max), this - } - translate(t) { - return this.min.add(t), this.max.add(t), this - } - equals(t) { - return t.min.equals(this.min) && t.max.equals(this.max) - } - }.prototype, { - center: function(t) { - return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."), this.getCenter(t) - }, - empty: function() { - return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."), this.isEmpty() - }, - isIntersectionBox: function(t) { - return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) - }, - size: function(t) { - return console.warn("THREE.Box2: .size() has been renamed to .getSize()."), this.getSize(t) - } - }), Object.assign(C.prototype, { - center: function(t) { - return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."), this.getCenter(t) - }, - empty: function() { - return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."), this.isEmpty() - }, - isIntersectionBox: function(t) { - return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) - }, - isIntersectionSphere: function(t) { - return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(t) - }, - size: function(t) { - return console.warn("THREE.Box3: .size() has been renamed to .getSize()."), this.getSize(t) - } - }), Object.assign(X.prototype, { - empty: function() { - return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."), this.isEmpty() - } - }), en.prototype.setFromMatrix = function(t) { - return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."), this.setFromProjectionMatrix(t) - }, class { - constructor(t, e) { - this.start = void 0 !== t ? t : new T, this.end = void 0 !== e ? e : new T - } - set(t, e) { - return this.start.copy(t), this.end.copy(e), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.start.copy(t.start), this.end.copy(t.end), this - } - getCenter(t) { - return void 0 === t && (console.warn("THREE.Line3: .getCenter() target is now required"), t = new T), t.addVectors(this.start, this.end).multiplyScalar(.5) - } - delta(t) { - return void 0 === t && (console.warn("THREE.Line3: .delta() target is now required"), t = new T), t.subVectors(this.end, this.start) - } - distanceSq() { - return this.start.distanceToSquared(this.end) - } - distance() { - return this.start.distanceTo(this.end) - } - at(t, e) { - return void 0 === e && (console.warn("THREE.Line3: .at() target is now required"), e = new T), this.delta(e).multiplyScalar(t).add(this.start) - } - closestPointToPointParameter(t, e) { - el.subVectors(t, this.start), nl.subVectors(this.end, this.start); - const n = nl.dot(nl); - let i = nl.dot(el) / n; - return e && (i = g.clamp(i, 0, 1)), i - } - closestPointToPoint(t, e, n) { - const i = this.closestPointToPointParameter(t, e); - return void 0 === n && (console.warn("THREE.Line3: .closestPointToPoint() target is now required"), n = new T), this.delta(n).multiplyScalar(i).add(this.start) - } - applyMatrix4(t) { - return this.start.applyMatrix4(t), this.end.applyMatrix4(t), this - } - equals(t) { - return t.start.equals(this.start) && t.end.equals(this.end) - } - }.prototype.center = function(t) { - return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."), this.getCenter(t) - }, Object.assign(g, { - random16: function() { - return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."), Math.random() - }, - nearestPowerOfTwo: function(t) { - return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."), g.floorPowerOfTwo(t) - }, - nextPowerOfTwo: function(t) { - return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."), g.ceilPowerOfTwo(t) - } - }), Object.assign(y.prototype, { - flattenToArrayOffset: function(t, e) { - return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(t, e) - }, - multiplyVector3: function(t) { - return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."), t.applyMatrix3(this) - }, - multiplyVector3Array: function() { - console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.") - }, - applyToBufferAttribute: function(t) { - return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."), t.applyMatrix3(this) - }, - applyToVector3Array: function() { - console.error("THREE.Matrix3: .applyToVector3Array() has been removed.") - }, - getInverse: function(t) { - return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."), this.copy(t).invert() - } - }), Object.assign(et.prototype, { - extractPosition: function(t) { - return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."), this.copyPosition(t) - }, - flattenToArrayOffset: function(t, e) { - return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(t, e) - }, - getPosition: function() { - return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."), (new T).setFromMatrixColumn(this, 3) - }, - setRotationFromQuaternion: function(t) { - return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."), this.makeRotationFromQuaternion(t) - }, - multiplyToArray: function() { - console.warn("THREE.Matrix4: .multiplyToArray() has been removed.") - }, - multiplyVector3: function(t) { - return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) - }, - multiplyVector4: function(t) { - return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) - }, - multiplyVector3Array: function() { - console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.") - }, - rotateAxis: function(t) { - console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."), t.transformDirection(this) - }, - crossVector: function(t) { - return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) - }, - translate: function() { - console.error("THREE.Matrix4: .translate() has been removed.") - }, - rotateX: function() { - console.error("THREE.Matrix4: .rotateX() has been removed.") - }, - 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.") - }, - applyToBufferAttribute: function(t) { - return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) - }, - applyToVector3Array: function() { - console.error("THREE.Matrix4: .applyToVector3Array() has been removed.") - }, - makeFrustum: function(t, e, n, i, r, o) { - return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."), this.makePerspective(t, e, i, n, r, o) - }, - getInverse: function(t) { - return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."), this.copy(t).invert() - } - }), Ct.prototype.isIntersectionLine = function(t) { - return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."), this.intersectsLine(t) - }, Object.assign(S.prototype, { - multiplyVector3: function(t) { - return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."), t.applyQuaternion(this) - }, - inverse: function() { - return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."), this.invert() - } - }), Object.assign(tt.prototype, { - isIntersectionBox: function(t) { - return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) - }, - isIntersectionPlane: function(t) { - return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."), this.intersectsPlane(t) - }, - isIntersectionSphere: function(t) { - return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(t) - } - }), Object.assign(Gt.prototype, { - area: function() { - return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."), this.getArea() - }, - barycoordFromPoint: function(t, e) { - return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), this.getBarycoord(t, e) - }, - midpoint: function(t) { - return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."), this.getMidpoint(t) - }, - normal: function(t) { - return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), this.getNormal(t) - }, - plane: function(t) { - return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."), this.getPlane(t) - } - }), Object.assign(Gt, { - barycoordFromPoint: function(t, e, n, i, r) { - return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), Gt.getBarycoord(t, e, n, i, r) - }, - normal: function(t, e, n, i) { - return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), Gt.getNormal(t, e, n, i) - } - }), Object.assign(na.prototype, { - extractAllPoints: function(t) { - return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."), this.extractPoints(t) - }, - extrude: function(t) { - return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."), new Xo(this, t) - }, - makeGeometry: function(t) { - return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."), new Qo(this, t) - } - }), Object.assign(v.prototype, { - fromAttribute: function(t, e, n) { - return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) - }, - distanceToManhattan: function(t) { - return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(t) - }, - lengthManhattan: function() { - return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() - } - }), Object.assign(T.prototype, { - 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(t) { - return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."), this.setFromMatrixPosition(t) - }, - getScaleFromMatrix: function(t) { - return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."), this.setFromMatrixScale(t) - }, - getColumnFromMatrix: function(t, e) { - return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."), this.setFromMatrixColumn(e, t) - }, - applyProjection: function(t) { - return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."), this.applyMatrix4(t) - }, - fromAttribute: function(t, e, n) { - return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) - }, - distanceToManhattan: function(t) { - return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(t) - }, - lengthManhattan: function() { - return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() - } - }), Object.assign(M.prototype, { - fromAttribute: function(t, e, n) { - return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) - }, - lengthManhattan: function() { - return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() - } - }), Object.assign(St.prototype, { - getChildByName: function(t) { - return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."), this.getObjectByName(t) - }, - renderDepth: function() { - console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.") - }, - translate: function(t, e) { - return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."), this.translateOnAxis(e, t) - }, - getWorldRotation: function() { - console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.") - }, - applyMatrix: function(t) { - return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(t) - } - }), Object.defineProperties(St.prototype, { - eulerOrder: { - get: function() { - return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order - }, - set: function(t) { - console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order = t - } - }, - useQuaternion: { - get: function() { - console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") - }, - set: function() { - console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") - } - } - }), Object.assign(He.prototype, { - setDrawMode: function() { - console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") - } - }), Object.defineProperties(He.prototype, { - drawMode: { - get: function() { - return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."), 0 - }, - set: function() { - console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") - } - } - }), Object.defineProperties(Ir.prototype, { - objects: { - get: function() { - return console.warn("THREE.LOD: .objects has been renamed to .levels."), this.levels - } - } - }), Object.defineProperty(kr.prototype, "useVertexTexture", { - get: function() { - console.warn("THREE.Skeleton: useVertexTexture has been removed.") - }, - set: function() { - console.warn("THREE.Skeleton: useVertexTexture has been removed.") - } - }), Ur.prototype.initBones = function() { - console.error("THREE.SkinnedMesh: initBones() has been removed.") - }, Object.defineProperty(Os.prototype, "__arcLengthDivisions", { - get: function() { - return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions - }, - set: function(t) { - console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions = t - } - }), Ye.prototype.setLens = function(t, e) { - console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."), void 0 !== e && (this.filmGauge = e), this.setFocalLength(t) - }, Object.defineProperties(ia.prototype, { - onlyShadow: { - set: function() { - console.warn("THREE.Light: .onlyShadow has been removed.") - } - }, - shadowCameraFov: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."), this.shadow.camera.fov = t - } - }, - shadowCameraLeft: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."), this.shadow.camera.left = t - } - }, - shadowCameraRight: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."), this.shadow.camera.right = t - } - }, - shadowCameraTop: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."), this.shadow.camera.top = t - } - }, - shadowCameraBottom: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."), this.shadow.camera.bottom = t - } - }, - shadowCameraNear: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."), this.shadow.camera.near = t - } - }, - shadowCameraFar: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."), this.shadow.camera.far = t - } - }, - shadowCameraVisible: { - set: function() { - console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.") - } - }, - shadowBias: { - set: function(t) { - console.warn("THREE.Light: .shadowBias is now .shadow.bias."), this.shadow.bias = t - } - }, - shadowDarkness: { - set: function() { - console.warn("THREE.Light: .shadowDarkness has been removed.") - } - }, - shadowMapWidth: { - set: function(t) { - console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."), this.shadow.mapSize.width = t - } - }, - shadowMapHeight: { - set: function(t) { - console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."), this.shadow.mapSize.height = t - } - } - }), Object.defineProperties(ee.prototype, { - length: { - get: function() { - return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."), this.array.length - } - }, - dynamic: { - get: function() { - return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), 35048 === this.usage - }, - set: function() { - console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), this.setUsage(35048) - } - } - }), Object.assign(ee.prototype, { - setDynamic: function(t) { - return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === t ? 35048 : 35044), this - }, - copyIndicesArray: function() { - console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.") - }, - setArray: function() { - console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") - } - }), Object.assign(be.prototype, { - addIndex: function(t) { - console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."), this.setIndex(t) - }, - addAttribute: function(t, e) { - return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."), e && e.isBufferAttribute || e && e.isInterleavedBufferAttribute ? "index" === t ? (console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."), this.setIndex(e), this) : this.setAttribute(t, e) : (console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."), this.setAttribute(t, new ee(arguments[1], arguments[2]))) - }, - addDrawCall: function(t, e, n) { - void 0 !== n && console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."), console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."), this.addGroup(t, e) - }, - clearDrawCalls: function() { - console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."), this.clearGroups() - }, - computeOffsets: function() { - console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.") - }, - removeAttribute: function(t) { - return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."), this.deleteAttribute(t) - }, - applyMatrix: function(t) { - return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(t) - } - }), Object.defineProperties(be.prototype, { - drawcalls: { - get: function() { - return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."), this.groups - } - }, - offsets: { - get: function() { - return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."), this.groups - } - } - }), Object.defineProperties(Aa.prototype, { - maxInstancedCount: { - get: function() { - return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."), this.instanceCount - }, - set: function(t) { - console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."), this.instanceCount = t - } - } - }), Object.defineProperties(Za.prototype, { - linePrecision: { - get: function() { - return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold - }, - set: function(t) { - console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold = t - } - } - }), Object.defineProperties(dr.prototype, { - dynamic: { - get: function() { - return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), 35048 === this.usage - }, - set: function(t) { - console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), this.setUsage(t) - } - } - }), Object.assign(dr.prototype, { - setDynamic: function(t) { - return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === t ? 35048 : 35044), this - }, - setArray: function() { - console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") - } - }), Object.assign(Xo.prototype, { - getArrays: function() { - console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.") - }, - addShapeList: function() { - console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.") - }, - addShape: function() { - console.error("THREE.ExtrudeGeometry: .addShape() has been removed.") - } - }), Object.assign(ur.prototype, { - dispose: function() { - console.error("THREE.Scene: .dispose() has been removed.") - } - }), Object.defineProperties(qa.prototype, { - dynamic: { - set: function() { - console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.") - } - }, - onUpdate: { - value: function() { - return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."), this - } - } - }), Object.defineProperties(Jt.prototype, { - wrapAround: { - get: function() { - console.warn("THREE.Material: .wrapAround has been removed.") - }, - set: function() { - console.warn("THREE.Material: .wrapAround has been removed.") - } - }, - overdraw: { - get: function() { - console.warn("THREE.Material: .overdraw has been removed.") - }, - set: function() { - console.warn("THREE.Material: .overdraw has been removed.") - } - }, - wrapRGB: { - get: function() { - return console.warn("THREE.Material: .wrapRGB has been removed."), new Yt - } - }, - shading: { - get: function() { - console.error("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead.") - }, - set: function(t) { - console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === t - } - }, - stencilMask: { - get: function() { - return console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask - }, - set: function(t) { - console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask = t - } - } - }), Object.defineProperties(es.prototype, { - metal: { - get: function() { - return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."), !1 - }, - set: function() { - console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead") - } - } - }), Object.defineProperties(ts.prototype, { - transparency: { - get: function() { - return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."), this.transmission - }, - set: function(t) { - console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."), this.transmission = t - } - } - }), Object.defineProperties(Xe.prototype, { - derivatives: { - get: function() { - return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives - }, - set: function(t) { - console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives = t - } - } - }), Object.assign(cr.prototype, { - clearTarget: function(t, e, n, i) { - console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."), this.setRenderTarget(t), this.clear(e, n, i) - }, - animate: function(t) { - console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."), this.setAnimationLoop(t) - }, - getCurrentRenderTarget: function() { - return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."), this.getRenderTarget() - }, - getMaxAnisotropy: function() { - return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."), this.capabilities.getMaxAnisotropy() - }, - getPrecision: function() { - return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."), this.capabilities.precision - }, - resetGLState: function() { - return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."), this.state.reset() - }, - supportsFloatTextures: function() { - return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."), this.extensions.get("OES_texture_float") - }, - supportsHalfFloatTextures: function() { - return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."), this.extensions.get("OES_texture_half_float") - }, - supportsStandardDerivatives: function() { - return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."), this.extensions.get("OES_standard_derivatives") - }, - supportsCompressedTextureS3TC: function() { - return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."), this.extensions.get("WEBGL_compressed_texture_s3tc") - }, - supportsCompressedTexturePVRTC: function() { - return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."), this.extensions.get("WEBGL_compressed_texture_pvrtc") - }, - supportsBlendMinMax: function() { - return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."), this.extensions.get("EXT_blend_minmax") - }, - supportsVertexTextures: function() { - return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."), this.capabilities.vertexTextures - }, - supportsInstancedArrays: function() { - return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."), this.extensions.get("ANGLE_instanced_arrays") - }, - enableScissorTest: function(t) { - console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."), this.setScissorTest(t) - }, - initMaterial: function() { - console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.") - }, - addPrePlugin: function() { - console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.") - }, - addPostPlugin: function() { - console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.") - }, - updateShadowMap: function() { - console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.") - }, - setFaceCulling: function() { - console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.") - }, - allocTextureUnit: function() { - console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.") - }, - setTexture: function() { - console.warn("THREE.WebGLRenderer: .setTexture() has been removed.") - }, - setTexture2D: function() { - console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.") - }, - setTextureCube: function() { - console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.") - }, - getActiveMipMapLevel: function() { - return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."), this.getActiveMipmapLevel() - } - }), Object.defineProperties(cr.prototype, { - shadowMapEnabled: { - get: function() { - return this.shadowMap.enabled - }, - set: function(t) { - console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."), this.shadowMap.enabled = t - } - }, - shadowMapType: { - get: function() { - return this.shadowMap.type - }, - set: function(t) { - console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."), this.shadowMap.type = t - } - }, - shadowMapCullFace: { - get: function() { - console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") - }, - set: function() { - console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") - } - }, - context: { - get: function() { - return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."), this.getContext() - } - }, - vr: { - get: function() { - return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"), this.xr - } - }, - gammaInput: { - get: function() { - return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."), !1 - }, - set: function() { - console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.") - } - }, - gammaOutput: { - get: function() { - return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), !1 - }, - set: function(t) { - console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), this.outputEncoding = !0 === t ? 3001 : 3e3 - } - }, - toneMappingWhitePoint: { - get: function() { - return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."), 1 - }, - set: function() { - console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.") - } - } - }), Object.defineProperties(tr.prototype, { - cullFace: { - get: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") - }, - set: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") - } - }, - renderReverseSided: { - get: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") - }, - set: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") - } - }, - renderSingleSided: { - get: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") - }, - set: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") - } - } - }), Object.defineProperties(E.prototype, { - wrapS: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS = t - } - }, - wrapT: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT = t - } - }, - magFilter: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter = t - } - }, - minFilter: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter = t - } - }, - anisotropy: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy = t - } - }, - offset: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset = t - } - }, - repeat: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat = t - } - }, - format: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format = t - } - }, - type: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type = t - } - }, - generateMipmaps: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps = t - } - } - }), Object.defineProperties(class extends St { - constructor(t) { - super(), this.type = "Audio", this.listener = t, this.context = t.context, this.gain = this.context.createGain(), this.gain.connect(t.getInput()), this.autoplay = !1, this.buffer = null, this.detune = 0, this.loop = !1, this.loopStart = 0, this.loopEnd = 0, this.offset = 0, this.duration = void 0, this.playbackRate = 1, this.isPlaying = !1, this.hasPlaybackControl = !0, this.source = null, this.sourceType = "empty", this._startedAt = 0, this._progress = 0, this._connected = !1, this.filters = [] - } - getOutput() { - return this.gain - } - setNodeSource(t) { - return this.hasPlaybackControl = !1, this.sourceType = "audioNode", this.source = t, this.connect(), this - } - setMediaElementSource(t) { - return this.hasPlaybackControl = !1, this.sourceType = "mediaNode", this.source = this.context.createMediaElementSource(t), this.connect(), this - } - setMediaStreamSource(t) { - return this.hasPlaybackControl = !1, this.sourceType = "mediaStreamNode", this.source = this.context.createMediaStreamSource(t), this.connect(), this - } - setBuffer(t) { - return this.buffer = t, this.sourceType = "buffer", this.autoplay && this.play(), this - } - play(t = 0) { - if (!0 === this.isPlaying) return void console.warn("THREE.Audio: Audio is already playing."); - if (!1 === this.hasPlaybackControl) return void console.warn("THREE.Audio: this Audio has no playback control."); - this._startedAt = this.context.currentTime + t; - const e = this.context.createBufferSource(); - return e.buffer = this.buffer, e.loop = this.loop, e.loopStart = this.loopStart, e.loopEnd = this.loopEnd, e.onended = this.onEnded.bind(this), e.start(this._startedAt, this._progress + this.offset, this.duration), this.isPlaying = !0, this.source = e, this.setDetune(this.detune), this.setPlaybackRate(this.playbackRate), this.connect() - } - pause() { - if (!1 !== this.hasPlaybackControl) return !0 === this.isPlaying && (this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate, !0 === this.loop && (this._progress = this._progress % (this.duration || this.buffer.duration)), this.source.stop(), this.source.onended = null, this.isPlaying = !1), this; - console.warn("THREE.Audio: this Audio has no playback control.") - } - stop() { - if (!1 !== this.hasPlaybackControl) return this._progress = 0, this.source.stop(), this.source.onended = null, this.isPlaying = !1, this; - console.warn("THREE.Audio: this Audio has no playback control.") - } - connect() { - if (this.filters.length > 0) { - this.source.connect(this.filters[0]); - for (let t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].connect(this.filters[t]); - this.filters[this.filters.length - 1].connect(this.getOutput()) - } else this.source.connect(this.getOutput()); - return this._connected = !0, this - } - disconnect() { - if (this.filters.length > 0) { - this.source.disconnect(this.filters[0]); - for (let t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].disconnect(this.filters[t]); - this.filters[this.filters.length - 1].disconnect(this.getOutput()) - } else this.source.disconnect(this.getOutput()); - return this._connected = !1, this - } - getFilters() { - return this.filters - } - setFilters(t) { - return t || (t = []), !0 === this._connected ? (this.disconnect(), this.filters = t.slice(), this.connect()) : this.filters = t.slice(), this - } - setDetune(t) { - if (this.detune = t, void 0 !== this.source.detune) return !0 === this.isPlaying && this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, .01), this - } - getDetune() { - return this.detune - } - getFilter() { - return this.getFilters()[0] - } - setFilter(t) { - return this.setFilters(t ? [t] : []) - } - setPlaybackRate(t) { - if (!1 !== this.hasPlaybackControl) return this.playbackRate = t, !0 === this.isPlaying && this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, .01), this; - console.warn("THREE.Audio: this Audio has no playback control.") - } - getPlaybackRate() { - return this.playbackRate - } - onEnded() { - this.isPlaying = !1 - } - getLoop() { - return !1 === this.hasPlaybackControl ? (console.warn("THREE.Audio: this Audio has no playback control."), !1) : this.loop - } - setLoop(t) { - if (!1 !== this.hasPlaybackControl) return this.loop = t, !0 === this.isPlaying && (this.source.loop = this.loop), this; - console.warn("THREE.Audio: this Audio has no playback control.") - } - setLoopStart(t) { - return this.loopStart = t, this - } - setLoopEnd(t) { - return this.loopEnd = t, this - } - getVolume() { - return this.gain.gain.value - } - setVolume(t) { - return this.gain.gain.setTargetAtTime(t, this.context.currentTime, .01), this - } - }.prototype, { - load: { - value: function(t) { - console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead."); - const e = this; - return (new Ra).load(t, (function(t) { - e.setBuffer(t) - })), this - } - }, - startTime: { - set: function() { - console.warn("THREE.Audio: .startTime is now .play( delay ).") - } - } - }), class { - constructor(t, e = 2048) { - this.analyser = t.context.createAnalyser(), this.analyser.fftSize = e, this.data = new Uint8Array(this.analyser.frequencyBinCount), t.getOutput().connect(this.analyser) - } - getFrequencyData() { - return this.analyser.getByteFrequencyData(this.data), this.data - } - getAverageFrequency() { - let t = 0; - const e = this.getFrequencyData(); - for (let n = 0; n < e.length; n++) t += e[n]; - return t / e.length - } - }.prototype.getData = function() { - return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."), this.getFrequencyData() - }, Qe.prototype.updateCubeMap = function(t, e) { - return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."), this.update(t, e) - }, Qe.prototype.clear = function(t, e, n, i) { - return console.warn("THREE.CubeCamera: .clear() is now .renderTarget.clear()."), this.renderTarget.clear(t, e, n, i) - }, x.crossOrigin = void 0, x.loadTexture = function(t, e, n, i) { - console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead."); - const r = new Is; - r.setCrossOrigin(this.crossOrigin); - const o = r.load(t, n, void 0, i); - return e && (o.mapping = e), o - }, x.loadTextureCube = function(t, e, n, i) { - console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead."); - const r = new Ps; - r.setCrossOrigin(this.crossOrigin); - const o = r.load(t, n, void 0, i); - return e && (o.mapping = e), o - }, x.loadCompressedTexture = function() { - console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.") - }, x.loadCompressedTextureCube = function() { - console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.") - }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { - detail: { - revision: "125" - } - })), "undefined" != typeof window && (window.__THREE__ ? console.warn("WARNING: Multiple instances of Three.js being imported.") : window.__THREE__ = "125"); - var cl = function(t, e) { - var n, i, r = this, - o = new et, - s = null; - "VRFrameData" in window && (s = new VRFrameData), navigator.getVRDisplays && navigator.getVRDisplays().then((function(t) { - i = t, t.length > 0 ? n = t[0] : e && e("VR input not available.") - })).catch((function() { - console.warn("THREE.VRControls: Unable to get VR Displays") - })), this.scale = 1, this.standing = !1, this.userHeight = 1.6, this.getVRDisplay = function() { - return n - }, this.setVRDisplay = function(t) { - n = t - }, this.getVRDisplays = function() { - return console.warn("THREE.VRControls: getVRDisplays() is being deprecated."), i - }, this.getStandingMatrix = function() { - return o - }, this.update = function() { - var e; - n && (n.getFrameData ? (n.getFrameData(s), e = s.pose) : n.getPose && (e = n.getPose()), null !== e.orientation && t.quaternion.fromArray(e.orientation), null !== e.position ? t.position.fromArray(e.position) : t.position.set(0, 0, 0), this.standing && (n.stageParameters ? (t.updateMatrix(), o.fromArray(n.stageParameters.sittingToStandingTransform), t.applyMatrix(o)) : t.position.setY(t.position.y + this.userHeight)), t.position.multiplyScalar(r.scale)) - }, this.dispose = function() { - n = null - } - }, - hl = function(t, e) { - var n, i, r, o, s = new T, - a = new T, - l = new et, - c = new et, - h = new et, - u = null; - "VRFrameData" in window && (u = new window.VRFrameData), navigator.getVRDisplays && navigator.getVRDisplays().then((function(t) { - i = t, t.length > 0 ? n = t[0] : e && e("HMD not available") - })).catch((function() { - console.warn("THREE.VREffect: Unable to get VR Displays") - })), this.isPresenting = !1; - var d = this, - p = t.getSize(), - f = !1, - m = t.getPixelRatio(); - this.getVRDisplay = function() { - return n - }, this.setVRDisplay = function(t) { - n = t - }, this.getVRDisplays = function() { - return console.warn("THREE.VREffect: getVRDisplays() is being deprecated."), i - }, this.setSize = function(e, i, r) { - if (p = { - width: e, - height: i - }, f = r, d.isPresenting) { - var o = n.getEyeParameters("left"); - t.setPixelRatio(1), t.setSize(2 * o.renderWidth, o.renderHeight, !1) - } else t.setPixelRatio(m), t.setSize(e, i, r) - }; - var g = t.domElement, - v = [0, 0, .5, 1], - y = [.5, 0, .5, 1]; - - function A() { - var e = d.isPresenting; - if (d.isPresenting = void 0 !== n && n.isPresenting, d.isPresenting) { - var i = n.getEyeParameters("left"), - r = i.renderWidth, - o = i.renderHeight; - e || (m = t.getPixelRatio(), p = t.getSize(), t.setPixelRatio(1), t.setSize(2 * r, o, !1)) - } else e && (t.setPixelRatio(m), t.setSize(p.width, p.height, f)) - } - window.addEventListener("vrdisplaypresentchange", A, !1), this.setFullScreen = function(t) { - return new Promise((function(e, i) { - void 0 !== n ? d.isPresenting !== t ? e(t ? n.requestPresent([{ - source: g - }]) : n.exitPresent()) : e() : i(new Error("No VR hardware found.")) - })) - }, this.requestPresent = function() { - return this.setFullScreen(!0) - }, this.exitPresent = function() { - return this.setFullScreen(!1) - }, this.requestAnimationFrame = function(t) { - return void 0 !== n ? n.requestAnimationFrame(t) : window.requestAnimationFrame(t) - }, this.cancelAnimationFrame = function(t) { - void 0 !== n ? n.cancelAnimationFrame(t) : window.cancelAnimationFrame(t) - }, this.submitFrame = function() { - void 0 !== n && d.isPresenting && n.submitFrame() - }, this.autoSubmitFrame = !0; - var x = new Ye; - x.layers.enable(1); - var _ = new Ye; - _.layers.enable(2), this.render = function(e, i, p, f) { - if (n && d.isPresenting) { - var m = e.autoUpdate; - m && (e.updateMatrixWorld(), e.autoUpdate = !1), Array.isArray(e) && (console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead."), e = e[0]); - var g, A, E = t.getSize(), - S = n.getLayers(); - if (S.length) { - var T = S[0]; - g = null !== T.leftBounds && 4 === T.leftBounds.length ? T.leftBounds : v, A = null !== T.rightBounds && 4 === T.rightBounds.length ? T.rightBounds : y - } else g = v, A = y; - if (r = { - x: Math.round(E.width * g[0]), - y: Math.round(E.height * g[1]), - width: Math.round(E.width * g[2]), - height: Math.round(E.height * g[3]) - }, o = { - x: Math.round(E.width * A[0]), - y: Math.round(E.height * A[1]), - width: Math.round(E.width * A[2]), - height: Math.round(E.height * A[3]) - }, p ? (t.setRenderTarget(p), p.scissorTest = !0) : (t.setRenderTarget(null), t.setScissorTest(!0)), (t.autoClear || f) && t.clear(), null === i.parent && i.updateMatrixWorld(), i.matrixWorld.decompose(x.position, x.quaternion, x.scale), _.position.copy(x.position), _.quaternion.copy(x.quaternion), _.scale.copy(x.scale), n.getFrameData) n.depthNear = i.near, n.depthFar = i.far, n.getFrameData(u), x.projectionMatrix.elements = u.leftProjectionMatrix, _.projectionMatrix.elements = u.rightProjectionMatrix, - function(t) { - t.pose.orientation ? (b.fromArray(t.pose.orientation), l.makeRotationFromQuaternion(b)) : l.identity(); - t.pose.position && (w.fromArray(t.pose.position), l.setPosition(w)); - c.fromArray(t.leftViewMatrix), c.multiply(l), h.fromArray(t.rightViewMatrix), h.multiply(l), c.getInverse(c), h.getInverse(h) - }(u), x.updateMatrix(), x.matrix.multiply(c), x.matrix.decompose(x.position, x.quaternion, x.scale), _.updateMatrix(), _.matrix.multiply(h), _.matrix.decompose(_.position, _.quaternion, _.scale); - else { - var L = n.getEyeParameters("left"), - R = n.getEyeParameters("right"); - x.projectionMatrix = M(L.fieldOfView, !0, i.near, i.far), _.projectionMatrix = M(R.fieldOfView, !0, i.near, i.far), s.fromArray(L.offset), a.fromArray(R.offset), x.translateOnAxis(s, x.scale.x), _.translateOnAxis(a, _.scale.x) - } - return p ? (p.viewport.set(r.x, r.y, r.width, r.height), p.scissor.set(r.x, r.y, r.width, r.height)) : (t.setViewport(r.x, r.y, r.width, r.height), t.setScissor(r.x, r.y, r.width, r.height)), t.render(e, x, p, f), p ? (p.viewport.set(o.x, o.y, o.width, o.height), p.scissor.set(o.x, o.y, o.width, o.height)) : (t.setViewport(o.x, o.y, o.width, o.height), t.setScissor(o.x, o.y, o.width, o.height)), t.render(e, _, p, f), p ? (p.viewport.set(0, 0, E.width, E.height), p.scissor.set(0, 0, E.width, E.height), p.scissorTest = !1, t.setRenderTarget(null)) : (t.setViewport(0, 0, E.width, E.height), t.setScissorTest(!1)), m && (e.autoUpdate = !0), void(d.autoSubmitFrame && d.submitFrame()) - } - t.render(e, i, p, f) - }, this.dispose = function() { - window.removeEventListener("vrdisplaypresentchange", A, !1) - }; - var b = new S, - w = new T; - - function M(t, e, n, i) { - var r = Math.PI / 180; - return function(t, e, n, i) { - n = void 0 === n ? .01 : n, i = void 0 === i ? 1e4 : i; - var r = (e = void 0 === e || e) ? -1 : 1, - o = new et, - s = o.elements, - a = function(t) { - var e = 2 / (t.leftTan + t.rightTan), - n = (t.leftTan - t.rightTan) * e * .5, - i = 2 / (t.upTan + t.downTan); - return { - scale: [e, i], - offset: [n, (t.upTan - t.downTan) * i * .5] - } - }(t); - return s[0] = a.scale[0], s[1] = 0, s[2] = a.offset[0] * r, s[3] = 0, s[4] = 0, s[5] = a.scale[1], s[6] = -a.offset[1] * r, s[7] = 0, s[8] = 0, s[9] = 0, s[10] = i / (n - i) * -r, s[11] = i * n / (n - i), s[12] = 0, s[13] = 0, s[14] = r, s[15] = 0, o.transpose(), o - }({ - upTan: Math.tan(t.upDegrees * r), - downTan: Math.tan(t.downDegrees * r), - leftTan: Math.tan(t.leftDegrees * r), - rightTan: Math.tan(t.rightDegrees * r) - }, e, n, i) - } - }, - ul = function(t, e) { - var n, i, r, o, s; - this.object = t, this.domElement = void 0 !== e ? e : document, this.enabled = !0, this.target = new T, this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = .25, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !1, this.keyPanSpeed = 7, this.autoRotate = !1, this.autoRotateSpeed = 2, this.enableKeys = !0, this.keys = { - LEFT: 37, - UP: 38, - RIGHT: 39, - BOTTOM: 40 - }, this.mouseButtons = { - ORBIT: h, - ZOOM: u, - PAN: d - }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this.getPolarAngle = function() { - return y.phi - }, this.getAzimuthalAngle = function() { - return y.theta - }, this.saveState = function() { - a.target0.copy(a.target), a.position0.copy(a.object.position), a.zoom0 = a.object.zoom - }, this.reset = function() { - a.target.copy(a.target0), a.object.position.copy(a.position0), a.object.zoom = a.zoom0, a.object.updateProjectionMatrix(), a.dispatchEvent(l), a.update(), m = f.NONE - }, this.update = (n = new T, i = (new S).setFromUnitVectors(t.up, new T(0, 1, 0)), r = i.clone().inverse(), o = new T, s = new S, function() { - var t = a.object.position; - return n.copy(t).sub(a.target), n.applyQuaternion(i), y.setFromVector3(n), a.autoRotate && m === f.NONE && a.rotateLeft(2 * Math.PI / 60 / 60 * a.autoRotateSpeed), y.theta += A.theta, y.phi += A.phi, y.theta = Math.max(a.minAzimuthAngle, Math.min(a.maxAzimuthAngle, y.theta)), y.phi = Math.max(a.minPolarAngle, Math.min(a.maxPolarAngle, y.phi)), y.makeSafe(), y.radius *= x, y.radius = Math.max(a.minDistance, Math.min(a.maxDistance, y.radius)), a.target.add(_), n.setFromSpherical(y), n.applyQuaternion(r), t.copy(a.target).add(n), a.object.lookAt(a.target), !0 === a.enableDamping ? (A.theta *= 1 - a.dampingFactor, A.phi *= 1 - a.dampingFactor, _.multiplyScalar(1 - a.dampingFactor)) : (A.set(0, 0, 0), _.set(0, 0, 0)), x = 1, !!(b || o.distanceToSquared(a.object.position) > g || 8 * (1 - s.dot(a.object.quaternion)) > g) && (a.dispatchEvent(l), o.copy(a.object.position), s.copy(a.object.quaternion), b = !1, !0) - }), this.dispose = function() { - a.domElement.removeEventListener("contextmenu", Q, !1), a.domElement.removeEventListener("mousedown", G, !1), a.domElement.removeEventListener("wheel", W, !1), a.domElement.removeEventListener("touchstart", X, !1), a.domElement.removeEventListener("touchend", Y, !1), a.domElement.removeEventListener("touchmove", q, !1), document.removeEventListener("mousemove", V, !1), document.removeEventListener("mouseup", k, !1), window.removeEventListener("keydown", j, !1) - }; - var a = this, - l = { - type: "change" - }, - c = { - type: "start" - }, - p = { - type: "end" - }, - f = { - NONE: -1, - ROTATE: 0, - DOLLY: 1, - PAN: 2, - TOUCH_ROTATE: 3, - TOUCH_DOLLY_PAN: 4 - }, - m = f.NONE, - g = 1e-6, - y = new $a, - A = new $a, - x = 1, - _ = new T, - b = !1, - w = new v, - M = new v, - E = new v, - L = new v, - R = new v, - C = new v, - P = new v, - D = new v, - I = new v; - - function O() { - return Math.pow(.95, a.zoomSpeed) - } - a.rotateLeft = function(t) { - A.theta -= t - }, a.rotateUp = function(t) { - A.phi -= t - }; - var N, B = (N = new T, function(t, e) { - N.setFromMatrixColumn(e, 0), N.multiplyScalar(-t), _.add(N) - }), - F = function() { - var t = new T; - return function(e, n) { - !0 === a.screenSpacePanning ? t.setFromMatrixColumn(n, 1) : (t.setFromMatrixColumn(n, 0), t.crossVectors(a.object.up, t)), t.multiplyScalar(e), _.add(t) - } - }(), - z = function() { - var t = new T; - return function(e, n) { - var i = a.domElement === document ? a.domElement.body : a.domElement; - if (a.object.isPerspectiveCamera) { - var r = a.object.position; - t.copy(r).sub(a.target); - var o = t.length(); - o *= Math.tan(a.object.fov / 2 * Math.PI / 180), B(2 * e * o / i.clientHeight, a.object.matrix), F(2 * n * o / i.clientHeight, a.object.matrix) - } else a.object.isOrthographicCamera ? (B(e * (a.object.right - a.object.left) / a.object.zoom / i.clientWidth, a.object.matrix), F(n * (a.object.top - a.object.bottom) / a.object.zoom / i.clientHeight, a.object.matrix)) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."), a.enablePan = !1) - } - }(); - - function U(t) { - a.object.isPerspectiveCamera ? x /= t : a.object.isOrthographicCamera ? (a.object.zoom = Math.max(a.minZoom, Math.min(a.maxZoom, a.object.zoom * t)), a.object.updateProjectionMatrix(), b = !0) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), a.enableZoom = !1) - } - - function H(t) { - a.object.isPerspectiveCamera ? x *= t : a.object.isOrthographicCamera ? (a.object.zoom = Math.max(a.minZoom, Math.min(a.maxZoom, a.object.zoom / t)), a.object.updateProjectionMatrix(), b = !0) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), a.enableZoom = !1) - } - - function G(t) { - if (!1 !== a.enabled) { - switch (t.preventDefault(), t.button) { - case a.mouseButtons.ORBIT: - if (!1 === a.enableRotate) return; - ! function(t) { - w.set(t.clientX, t.clientY) - }(t), m = f.ROTATE; - break; - case a.mouseButtons.ZOOM: - if (!1 === a.enableZoom) return; - ! function(t) { - P.set(t.clientX, t.clientY) - }(t), m = f.DOLLY; - break; - case a.mouseButtons.PAN: - if (!1 === a.enablePan) return; - ! function(t) { - L.set(t.clientX, t.clientY) - }(t), m = f.PAN - } - m !== f.NONE && (document.addEventListener("mousemove", V, !1), document.addEventListener("mouseup", k, !1), a.dispatchEvent(c)) - } - } - - function V(t) { - if (!1 !== a.enabled) switch (t.preventDefault(), m) { - case f.ROTATE: - if (!1 === a.enableRotate) return; - ! function(t) { - M.set(t.clientX, t.clientY), E.subVectors(M, w).multiplyScalar(a.rotateSpeed); - var e = a.domElement === document ? a.domElement.body : a.domElement; - a.rotateLeft(2 * Math.PI * E.x / e.clientHeight), a.rotateUp(2 * Math.PI * E.y / e.clientHeight), w.copy(M), a.update() - }(t); - break; - case f.DOLLY: - if (!1 === a.enableZoom) return; - ! function(t) { - D.set(t.clientX, t.clientY), I.subVectors(D, P), I.y > 0 ? U(O()) : I.y < 0 && H(O()), P.copy(D), a.update() - }(t); - break; - case f.PAN: - if (!1 === a.enablePan) return; - ! function(t) { - R.set(t.clientX, t.clientY), C.subVectors(R, L).multiplyScalar(a.panSpeed), z(C.x, C.y), L.copy(R), a.update() - }(t) - } - } - - function k(t) { - !1 !== a.enabled && (document.removeEventListener("mousemove", V, !1), document.removeEventListener("mouseup", k, !1), a.dispatchEvent(p), m = f.NONE) - } - - function W(t) { - !1 === a.enabled || !1 === a.enableZoom || m !== f.NONE && m !== f.ROTATE || (t.preventDefault(), t.stopPropagation(), a.dispatchEvent(c), function(t) { - t.deltaY < 0 ? H(O()) : t.deltaY > 0 && U(O()), a.update() - }(t), a.dispatchEvent(p)) - } - - function j(t) { - !1 !== a.enabled && !1 !== a.enableKeys && !1 !== a.enablePan && function(t) { - switch (t.keyCode) { - case a.keys.UP: - z(0, a.keyPanSpeed), a.update(); - break; - case a.keys.BOTTOM: - z(0, -a.keyPanSpeed), a.update(); - break; - case a.keys.LEFT: - z(a.keyPanSpeed, 0), a.update(); - break; - case a.keys.RIGHT: - z(-a.keyPanSpeed, 0), a.update() - } - }(t) - } - - function X(t) { - if (!1 !== a.enabled) { - switch (t.preventDefault(), t.touches.length) { - case 1: - if (!1 === a.enableRotate) return; - ! function(t) { - w.set(t.touches[0].pageX, t.touches[0].pageY) - }(t), m = f.TOUCH_ROTATE; - break; - case 2: - if (!1 === a.enableZoom && !1 === a.enablePan) return; - ! function(t) { - if (a.enableZoom) { - var e = t.touches[0].pageX - t.touches[1].pageX, - n = t.touches[0].pageY - t.touches[1].pageY, - i = Math.sqrt(e * e + n * n); - P.set(0, i) - } - if (a.enablePan) { - var r = .5 * (t.touches[0].pageX + t.touches[1].pageX), - o = .5 * (t.touches[0].pageY + t.touches[1].pageY); - L.set(r, o) - } - }(t), m = f.TOUCH_DOLLY_PAN; - break; - default: - m = f.NONE - } - m !== f.NONE && a.dispatchEvent(c) - } - } - - function q(t) { - if (!1 !== a.enabled) switch (t.preventDefault(), t.stopPropagation(), t.touches.length) { - case 1: - if (!1 === a.enableRotate) return; - if (m !== f.TOUCH_ROTATE) return; - ! function(t) { - M.set(t.touches[0].pageX, t.touches[0].pageY), E.subVectors(M, w).multiplyScalar(a.rotateSpeed); - var e = a.domElement === document ? a.domElement.body : a.domElement; - a.rotateLeft(2 * Math.PI * E.x / e.clientHeight), a.rotateUp(2 * Math.PI * E.y / e.clientHeight), w.copy(M), a.update() - }(t); - break; - case 2: - if (!1 === a.enableZoom && !1 === a.enablePan) return; - if (m !== f.TOUCH_DOLLY_PAN) return; - ! function(t) { - if (a.enableZoom) { - var e = t.touches[0].pageX - t.touches[1].pageX, - n = t.touches[0].pageY - t.touches[1].pageY, - i = Math.sqrt(e * e + n * n); - D.set(0, i), I.set(0, Math.pow(D.y / P.y, a.zoomSpeed)), U(I.y), P.copy(D) - } - if (a.enablePan) { - var r = .5 * (t.touches[0].pageX + t.touches[1].pageX), - o = .5 * (t.touches[0].pageY + t.touches[1].pageY); - R.set(r, o), C.subVectors(R, L).multiplyScalar(a.panSpeed), z(C.x, C.y), L.copy(R) - } - a.update() - }(t); - break; - default: - m = f.NONE - } - } - - function Y(t) { - !1 !== a.enabled && (a.dispatchEvent(p), m = f.NONE) - } - - function Q(t) { - !1 !== a.enabled && t.preventDefault() - } - a.domElement.addEventListener("mousedown", G, !1), a.domElement.addEventListener("wheel", W, !1), a.domElement.addEventListener("touchstart", X, !1), a.domElement.addEventListener("touchend", Y, !1), a.domElement.addEventListener("touchmove", q, !1), window.addEventListener("keydown", j, !1), this.update() - }; - (ul.prototype = Object.create(p.prototype)).constructor = ul, Object.defineProperties(ul.prototype, { - center: { - get: function() { - return console.warn("THREE.OrbitControls: .center has been renamed to .target"), this.target - } - }, - noZoom: { - get: function() { - return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."), !this.enableZoom - }, - set: function(t) { - console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."), this.enableZoom = !t - } - }, - noRotate: { - get: function() { - return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."), !this.enableRotate - }, - set: function(t) { - console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."), this.enableRotate = !t - } - }, - noPan: { - get: function() { - return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."), !this.enablePan - }, - set: function(t) { - console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."), this.enablePan = !t - } - }, - noKeys: { - get: function() { - return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."), !this.enableKeys - }, - set: function(t) { - console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."), this.enableKeys = !t - } - }, - staticMoving: { - get: function() { - return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."), !this.enableDamping - }, - set: function(t) { - console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."), this.enableDamping = !t - } - }, - dynamicDampingFactor: { - get: function() { - return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."), this.dampingFactor - }, - set: function(t) { - console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."), this.dampingFactor = t - } - } - }); - var dl = function(t) { - var e = this; - this.object = t, this.object.rotation.reorder("YXZ"), this.enabled = !0, this.deviceOrientation = {}, this.screenOrientation = 0, this.alphaOffset = 0; - var n, i, r, o, s = function(t) { - e.deviceOrientation = t - }, - a = function() { - e.screenOrientation = window.orientation || 0 - }, - l = (n = new T(0, 0, 1), i = new ct, r = new S, o = new S(-Math.sqrt(.5), 0, 0, Math.sqrt(.5)), function(t, e, s, a, l) { - i.set(s, e, -a, "YXZ"), t.setFromEuler(i), t.multiply(o), t.multiply(r.setFromAxisAngle(n, -l)) - }); - this.connect = function() { - a(), window.addEventListener("orientationchange", a, !1), window.addEventListener("deviceorientation", s, !1), e.enabled = !0 - }, this.disconnect = function() { - window.removeEventListener("orientationchange", a, !1), window.removeEventListener("deviceorientation", s, !1), e.enabled = !1 - }, this.update = function() { - if (!1 !== e.enabled) { - var t = e.deviceOrientation; - if (t) { - var n = t.alpha ? g.degToRad(t.alpha) + e.alphaOffset : 0, - i = t.beta ? g.degToRad(t.beta) : 0, - r = t.gamma ? g.degToRad(t.gamma) : 0, - o = e.screenOrientation ? g.degToRad(e.screenOrientation) : 0; - l(e.object.quaternion, n, i, r, o) - } - } - }, this.dispose = function() { - e.disconnect() - }, this.connect() - }; - var pl, fl = function() { - function t(t) { - this.object = t.camera, this.domElement = t.canvas, this.orbit = new ul(this.object, this.domElement), this.speed = .5, this.orbit.target.set(0, 0, -1), this.orbit.enableZoom = !1, this.orbit.enablePan = !1, this.orbit.rotateSpeed = -this.speed, t.orientation && (this.orientation = new dl(this.object)), t.halfView && (this.orbit.minAzimuthAngle = -Math.PI / 4, this.orbit.maxAzimuthAngle = Math.PI / 4) - } - var e = t.prototype; - return e.update = function() { - if (this.orientation) { - this.orientation.update(); - var t = this.orientation.object.quaternion, - e = function(t, e, n, i) { - var r = t * e + n * i; - if (r > .499) { - var o = 2 * Math.atan2(t, i), - s = Math.PI / 2; - return new T(s, 0, o) - } - if (r < -.499) { - var a = -2 * Math.atan2(t, i), - l = -Math.PI / 2; - return new T(l, 0, a) - } - var c = t * t, - h = e * e, - u = n * n, - d = Math.atan2(2 * e * i - 2 * t * n, 1 - 2 * h - 2 * u), - p = Math.asin(2 * r), - f = Math.atan2(2 * t * i - 2 * e * n, 1 - 2 * c - 2 * u); - return new T(p, f, d) - }(t.x, t.y, t.z, t.w); - void 0 === this.lastAngle_ && (this.lastAngle_ = e), this.orbit.rotateLeft((this.lastAngle_.z - e.z) * (1 + this.speed)), this.orbit.rotateUp((this.lastAngle_.y - e.y) * (1 + this.speed)), this.lastAngle_ = e - } - this.orbit.update() - }, e.dispose = function() { - this.orbit.dispose(), this.orientation && this.orientation.dispose() - }, t - }(), - ml = ((pl = e.createElement("video")).crossOrigin = "anonymous", pl.hasAttribute("crossorigin")), - gl = ["360", "360_LR", "360_TB", "360_CUBE", "EAC", "EAC_LR", "NONE", "AUTO", "Sphere", "Cube", "equirectangular", "180", "180_LR", "180_MONO"], - vl = function(t) { - if (t) { - if (t = t.toString().trim(), /sphere/i.test(t)) return "360"; - if (/cube/i.test(t)) return "360_CUBE"; - if (/equirectangular/i.test(t)) return "360"; - for (var e = 0; e < gl.length; e++) - if (new RegExp("^" + gl[e] + "$", "i").test(t)) return gl[e] - } - }, - yl = function(t) { - function e(e, i, r) { - var o; - return (o = t.call(this) || this).player = e, o.canvas = i, o.options = r, o.onMoveEnd = n.bind(s(o), o.onMoveEnd), o.onMoveStart = n.bind(s(o), o.onMoveStart), o.onMove = n.bind(s(o), o.onMove), o.onControlBarMove = n.bind(s(o), o.onControlBarMove), o.player.controlBar.on(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"], o.onControlBarMove), o.oldReportUserActivity = o.player.reportUserActivity, o.player.reportUserActivity = function() {}, o.canvas.addEventListener("mousedown", o.onMoveStart), o.canvas.addEventListener("touchstart", o.onMoveStart), o.canvas.addEventListener("mousemove", o.onMove), o.canvas.addEventListener("touchmove", o.onMove), o.canvas.addEventListener("mouseup", o.onMoveEnd), o.canvas.addEventListener("touchend", o.onMoveEnd), o.shouldTogglePlay = !1, o - } - l(e, t); - var i = e.prototype; - return i.togglePlay = function() { - this.player.paused() ? this.player.play() : this.player.pause() - }, i.onMoveStart = function(t) { - this.options.disableTogglePlay || !this.player.controls() || "mousedown" === t.type && !n.dom.isSingleLeftClick(t) ? this.shouldTogglePlay = !1 : (this.shouldTogglePlay = !0, this.touchMoveCount_ = 0) - }, i.onMoveEnd = function(t) { - if ("touchend" === t.type && this.touchMoveCount_ < 10) return !1 === this.player.userActive() ? void this.player.userActive(!0) : void this.player.userActive(!1); - this.shouldTogglePlay && "mouseup" === t.type && this.togglePlay() - }, i.onMove = function(t) { - this.touchMoveCount_++, this.shouldTogglePlay = !1 - }, i.onControlBarMove = function(t) { - this.player.userActive(!0) - }, i.dispose = function() { - this.canvas.removeEventListener("mousedown", this.onMoveStart), this.canvas.removeEventListener("touchstart", this.onMoveStart), this.canvas.removeEventListener("mousemove", this.onMove), this.canvas.removeEventListener("touchmove", this.onMove), this.canvas.removeEventListener("mouseup", this.onMoveEnd), this.canvas.removeEventListener("touchend", this.onMoveEnd), this.player.controlBar.off(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"], this.onControlBarMove), this.player.reportUserActivity = this.oldReportUserActivity - }, e - }(n.EventTarget), - Al = function(t) { - function e(e, i, r, o) { - var s; - s = t.call(this) || this; - var a = n.mergeOptions({ - channelMap: n.browser.IS_SAFARI ? [2, 0, 1, 3] : [0, 1, 2, 3], - ambisonicOrder: 1 - }, o); - return s.videoElementSource = e.createMediaElementSource(r), s.foaRenderer = i.createFOARenderer(e, a), s.foaRenderer.initialize().then((function() { - "suspended" === e.state && s.trigger({ - type: "audiocontext-suspended" - }), s.videoElementSource.connect(s.foaRenderer.input), s.foaRenderer.output.connect(e.destination), s.initialized = !0, s.trigger({ - type: "omnitone-ready" - }) - }), (function(t) { - n.log.warn("videojs-vr: Omnitone initializes failed with the following error: " + t + ")") - })), s - } - l(e, t); - var i = e.prototype; - return i.update = function(t) { - this.initialized && this.foaRenderer.setRotationMatrixFromCamera(t.matrix) - }, i.dispose = function() { - this.initialized = !1, this.foaRenderer.setRenderingMode("bypass"), this.foaRenderer = null - }, e - }(n.EventTarget), - xl = function(e) { - function i(i, r) { - var o; - return (o = e.call(this, i, r) || this).handleVrDisplayActivate_ = n.bind(s(o), o.handleVrDisplayActivate_), o.handleVrDisplayDeactivate_ = n.bind(s(o), o.handleVrDisplayDeactivate_), o.handleVrDisplayPresentChange_ = n.bind(s(o), o.handleVrDisplayPresentChange_), o.handleOrientationChange_ = n.bind(s(o), o.handleOrientationChange_), t.addEventListener("orientationchange", o.handleOrientationChange_), t.addEventListener("vrdisplayactivate", o.handleVrDisplayActivate_), t.addEventListener("vrdisplaydeactivate", o.handleVrDisplayDeactivate_), t.addEventListener("vrdisplaypresentchange", o.handleVrDisplayPresentChange_), n.browser.IS_ANDROID && o.on(i, "fullscreenchange", (function() { - i.isFullscreen() ? o.hide() : o.show() - })), o - } - l(i, e); - var r = i.prototype; - return r.buildCSSClass = function() { - return "vjs-button-vr " + e.prototype.buildCSSClass.call(this) - }, r.handleVrDisplayPresentChange_ = function() { - !this.player_.vr().vrDisplay.isPresenting && this.active_ && this.handleVrDisplayDeactivate_(), this.player_.vr().vrDisplay.isPresenting && !this.active_ && this.handleVrDisplayActivate_() - }, r.handleOrientationChange_ = function() { - this.active_ && n.browser.IS_IOS && this.changeSize_() - }, r.changeSize_ = function() { - this.player_.width(t.innerWidth), this.player_.height(t.innerHeight), t.dispatchEvent(new t.Event("resize")) - }, r.handleVrDisplayActivate_ = function() { - n.browser.IS_IOS && (this.oldWidth_ = this.player_.currentWidth(), this.oldHeight_ = this.player_.currentHeight(), this.player_.enterFullWindow(), this.changeSize_()), this.active_ = !0 - }, r.handleVrDisplayDeactivate_ = function() { - n.browser.IS_IOS && (this.oldWidth_ && this.player_.width(this.oldWidth_), this.oldHeight_ && this.player_.height(this.oldHeight_), this.player_.exitFullWindow()), this.active_ = !1 - }, r.handleClick = function(e) { - this.active_ ? t.dispatchEvent(new t.Event("vrdisplaydeactivate")) : (!this.player_.hasStarted() && n.browser.IS_ANDROID && this.player_.play(), t.dispatchEvent(new t.Event("vrdisplayactivate"))) - }, r.dispose = function() { - e.prototype.dispose.call(this), t.removeEventListener("vrdisplayactivate", this.handleVrDisplayActivate_), t.removeEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_), t.removeEventListener("vrdisplaypresentchange", this.handleVrDisplayPresentChange_) - }, i - }(n.getComponent("Button")); - n.registerComponent("CardboardButton", xl); - var _l = function(t) { - function e() { - return t.apply(this, arguments) || this - } - return l(e, t), e.prototype.buildCSSClass = function() { - return "vjs-big-vr-play-button " + t.prototype.buildCSSClass.call(this) - }, e - }(n.getComponent("BigPlayButton")); - - function bl(t, e) { - var n = "undefined" != typeof Symbol && t[Symbol.iterator] || t["@@iterator"]; - if (n) return (n = n.call(t)).next.bind(n); - if (Array.isArray(t) || (n = function(t, e) { - if (!t) return; - if ("string" == typeof t) return wl(t, e); - var n = Object.prototype.toString.call(t).slice(8, -1); - "Object" === n && t.constructor && (n = t.constructor.name); - if ("Map" === n || "Set" === n) return Array.from(t); - if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return wl(t, e) - }(t)) || e && t && "number" == typeof t.length) { - n && (t = n); - var i = 0; - return function() { - return i >= t.length ? { - done: !0 - } : { - done: !1, - value: t[i++] - } - } - } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.") - } - - function wl(t, e) { - (null == e || e > t.length) && (e = t.length); - for (var n = 0, i = new Array(e); n < e; n++) i[n] = t[n]; - return i - } - n.registerComponent("BigVrPlayButton", _l); - var Ml = { - debug: !1, - omnitone: !1, - forceCardboard: !1, - omnitoneOptions: {}, - projection: "AUTO", - sphereDetail: 32, - disableTogglePlay: !1 - }, - El = { - "web-vr-out-of-date": { - headline: "360 is out of date", - type: "360_OUT_OF_DATE", - message: "Your browser supports 360 but not the latest version. See http://webvr.info for more info." - }, - "web-vr-not-supported": { - headline: "360 not supported on this device", - type: "360_NOT_SUPPORTED", - message: "Your browser does not support 360. See http://webvr.info for assistance." - }, - "web-vr-hls-cors-not-supported": { - headline: "360 HLS video not supported on this device", - type: "360_NOT_SUPPORTED", - message: "Your browser/device does not support HLS 360 video. See http://webvr.info for assistance." - } - }, - Sl = n.getPlugin("plugin"), - Tl = n.getComponent("Component"), - Ll = function(i) { - function r(t, e) { - var r, o = n.mergeOptions(Ml, e); - return (r = i.call(this, t, o) || this).options_ = o, r.player_ = t, r.bigPlayButtonIndex_ = t.children().indexOf(t.getChild("BigPlayButton")) || 0, r.videojsErrorsSupport_ = !!n.errors, r.videojsErrorsSupport_ && t.errors({ - errors: El - }), n.browser.IE_VERSION || !ml ? (r.player_.on("loadstart", (function() { - r.triggerError_({ - code: "web-vr-not-supported", - dismiss: !1 - }) - })), s(r)) : (r.polyfill_ = new c({ - ROTATE_INSTRUCTIONS_DISABLED: !0 - }), r.polyfill_ = new c, r.handleVrDisplayActivate_ = n.bind(s(r), r.handleVrDisplayActivate_), r.handleVrDisplayDeactivate_ = n.bind(s(r), r.handleVrDisplayDeactivate_), r.handleResize_ = n.bind(s(r), r.handleResize_), r.animate_ = n.bind(s(r), r.animate_), r.setProjection(r.options_.projection), r.on(t, "adstart", (function() { - return t.setTimeout((function() { - t.ads && t.ads.videoElementRecycled() ? (r.log("video element recycled for this ad, reseting"), r.reset(), r.one(t, "playing", r.init)) : r.log("video element not recycled for this ad, no need to reset") - })) - }), 1), r.on(t, "loadedmetadata", r.init), r) - } - l(r, i); - var o = r.prototype; - return o.changeProjection_ = function(t) { - var e = this; - (t = vl(t)) || (t = "NONE"); - var n = 0, - i = 0, - r = 0; - if (this.scene && this.scene.remove(this.movieScreen), "AUTO" === t) { - if (this.player_.mediainfo && this.player_.mediainfo.projection && "AUTO" !== this.player_.mediainfo.projection) { - var o = vl(this.player_.mediainfo.projection); - return this.changeProjection_(o) - } - return this.changeProjection_("NONE") - } - if ("360" === t) this.movieGeometry = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0, - side: 1 - }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.position.set(n, i, r), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ - x: 0, - y: 1, - z: 0 - }, -Math.PI / 2), this.scene.add(this.movieScreen); - else if ("360_LR" === t || "360_TB" === t) { - for (var s = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail), a = s.faceVertexUvs[0], l = 0; l < a.length; l++) - for (var c = 0; c < 3; c++) "360_LR" === t ? a[l][c].x *= .5 : (a[l][c].y *= .5, a[l][c].y += .5); - this.movieGeometry = (new be).fromGeometry(s), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0, - side: 1 - }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ - x: 0, - y: 1, - z: 0 - }, -Math.PI / 2), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), a = (s = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail)).faceVertexUvs[0]; - for (var h = 0; h < a.length; h++) - for (var u = 0; u < 3; u++) "360_LR" === t ? (a[h][u].x *= .5, a[h][u].x += .5) : a[h][u].y *= .5; - this.movieGeometry = (new be).fromGeometry(s), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0, - side: 1 - }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ - x: 0, - y: 1, - z: 0 - }, -Math.PI / 2), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) - } else if ("360_CUBE" === t) { - this.movieGeometry = new Ve(256, 256, 256), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0, - side: 1 - }); - var d = [new v(0, .5), new v(.333, .5), new v(.333, 1), new v(0, 1)], - p = [new v(.333, .5), new v(.666, .5), new v(.666, 1), new v(.333, 1)], - f = [new v(.666, .5), new v(1, .5), new v(1, 1), new v(.666, 1)], - m = [new v(0, 0), new v(.333, 0), new v(.333, .5), new v(0, .5)], - g = [new v(.333, 0), new v(.666, 0), new v(.666, .5), new v(.333, .5)], - A = [new v(.666, 0), new v(1, 0), new v(1, .5), new v(.666, .5)]; - this.movieGeometry.faceVertexUvs[0] = [], this.movieGeometry.faceVertexUvs[0][0] = [p[2], p[1], p[3]], this.movieGeometry.faceVertexUvs[0][1] = [p[1], p[0], p[3]], this.movieGeometry.faceVertexUvs[0][2] = [d[2], d[1], d[3]], this.movieGeometry.faceVertexUvs[0][3] = [d[1], d[0], d[3]], this.movieGeometry.faceVertexUvs[0][4] = [f[2], f[1], f[3]], this.movieGeometry.faceVertexUvs[0][5] = [f[1], f[0], f[3]], this.movieGeometry.faceVertexUvs[0][6] = [m[2], m[1], m[3]], this.movieGeometry.faceVertexUvs[0][7] = [m[1], m[0], m[3]], this.movieGeometry.faceVertexUvs[0][8] = [g[2], g[1], g[3]], this.movieGeometry.faceVertexUvs[0][9] = [g[1], g[0], g[3]], this.movieGeometry.faceVertexUvs[0][10] = [A[2], A[1], A[3]], this.movieGeometry.faceVertexUvs[0][11] = [A[1], A[0], A[3]], this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.position.set(n, i, r), this.movieScreen.rotation.y = -Math.PI, this.scene.add(this.movieScreen) - } else if ("180" === t || "180_LR" === t || "180_MONO" === t) { - var x = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail, Math.PI, Math.PI); - x.scale(-1, 1, 1); - var _ = x.faceVertexUvs[0]; - if ("180_MONO" !== t) - for (var b = 0; b < _.length; b++) - for (var w = 0; w < 3; w++) _[b][w].x *= .5; - this.movieGeometry = (new be).fromGeometry(x), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0 - }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), (x = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail, Math.PI, Math.PI)).scale(-1, 1, 1), _ = x.faceVertexUvs[0]; - for (var M = 0; M < _.length; M++) - for (var E = 0; E < 3; E++) _[M][E].x *= .5, _[M][E].x += .5; - this.movieGeometry = (new be).fromGeometry(x), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0 - }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) - } else if ("EAC" === t || "EAC_LR" === t) { - var S = function(t, o) { - e.movieGeometry = new Ve(256, 256, 256), e.movieMaterial = new Xe({ - overdraw: !0, - side: 1, - uniforms: { - mapped: { - value: e.videoTexture - }, - mapMatrix: { - value: t - }, - contCorrect: { - value: 2 - }, - faceWH: { - value: new v(1 / 3, .5).applyMatrix3(o) - }, - vidWH: { - value: new v(e.videoTexture.image.videoWidth, e.videoTexture.image.videoHeight).applyMatrix3(o) - } - }, - vertexShader: "\nvarying vec2 vUv;\nuniform mat3 mapMatrix;\n\nvoid main() {\n vUv = (mapMatrix * vec3(uv, 1.)).xy;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.);\n}", - fragmentShader: "\nvarying vec2 vUv;\nuniform sampler2D mapped;\nuniform vec2 faceWH;\nuniform vec2 vidWH;\nuniform float contCorrect;\n\nconst float PI = 3.1415926535897932384626433832795;\n\nvoid main() {\n vec2 corner = vUv - mod(vUv, faceWH) + vec2(0, contCorrect / vidWH.y);\n\n vec2 faceWHadj = faceWH - vec2(0, contCorrect * 2. / vidWH.y);\n\n vec2 p = (vUv - corner) / faceWHadj - .5;\n vec2 q = 2. / PI * atan(2. * p) + .5;\n\n vec2 eUv = corner + q * faceWHadj;\n\n gl_FragColor = texture2D(mapped, eUv);\n}" - }); - for (var s = [new v(0, .5), new v(1 / 3, .5), new v(1 / 3, 1), new v(0, 1)], a = [new v(1 / 3, .5), new v(2 / 3, .5), new v(2 / 3, 1), new v(1 / 3, 1)], l = [new v(2 / 3, .5), new v(1, .5), new v(1, 1), new v(2 / 3, 1)], c = [new v(1 / 3, 0), new v(1 / 3, .5), new v(0, .5), new v(0, 0)], h = [new v(1 / 3, .5), new v(1 / 3, 0), new v(2 / 3, 0), new v(2 / 3, .5)], u = [new v(1, 0), new v(1, .5), new v(2 / 3, .5), new v(2 / 3, 0)], d = 0, p = [s, a, l, c, h, u]; d < p.length; d++) { - for (var f, m = p[d], g = e.videoTexture.image.videoHeight, y = 1, A = 0, x = bl(m); !(f = x()).done;) { - var _ = f.value; - _.y < y && (y = _.y), _.y > A && (A = _.y) - } - for (var b, w = bl(m); !(b = w()).done;) { - var M = b.value; - Math.abs(M.y - y) < Number.EPSILON && (M.y += 2 / g), Math.abs(M.y - A) < Number.EPSILON && (M.y -= 2 / g), M.x = M.x / g * (g - 4) + 2 / g - } - } - return e.movieGeometry.faceVertexUvs[0] = [], e.movieGeometry.faceVertexUvs[0][0] = [s[2], s[1], s[3]], e.movieGeometry.faceVertexUvs[0][1] = [s[1], s[0], s[3]], e.movieGeometry.faceVertexUvs[0][2] = [l[2], l[1], l[3]], e.movieGeometry.faceVertexUvs[0][3] = [l[1], l[0], l[3]], e.movieGeometry.faceVertexUvs[0][4] = [u[2], u[1], u[3]], e.movieGeometry.faceVertexUvs[0][5] = [u[1], u[0], u[3]], e.movieGeometry.faceVertexUvs[0][6] = [c[2], c[1], c[3]], e.movieGeometry.faceVertexUvs[0][7] = [c[1], c[0], c[3]], e.movieGeometry.faceVertexUvs[0][8] = [a[2], a[1], a[3]], e.movieGeometry.faceVertexUvs[0][9] = [a[1], a[0], a[3]], e.movieGeometry.faceVertexUvs[0][10] = [h[2], h[1], h[3]], e.movieGeometry.faceVertexUvs[0][11] = [h[1], h[0], h[3]], e.movieScreen = new He(e.movieGeometry, e.movieMaterial), e.movieScreen.position.set(n, i, r), e.movieScreen.rotation.y = -Math.PI, e.movieScreen - }; - if ("EAC" === t) this.scene.add(S(new y, new y)); - else { - var T = (new y).set(0, .5, 0, 1, 0, 0, 0, 0, 1); - S((new y).set(0, -.5, .5, 1, 0, 0, 0, 0, 1), T), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), S((new y).set(0, -.5, 1, 1, 0, 0, 0, 0, 1), T), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) - } - } - this.currentProjection_ = t - }, o.triggerError_ = function(t) { - if (this.videojsErrorsSupport_) this.player_.error(t); - else { - var n = e.createElement("div"); - n.innerHTML = El[t.code].message; - var i = n.textContent || n.innerText || ""; - this.player_.error({ - code: t.code, - message: i - }) - } - }, o.log = function() { - if (this.options_.debug) { - for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) e[i] = arguments[i]; - e.forEach((function(t) { - n.log("VR: ", t) - })) - } - }, o.handleVrDisplayActivate_ = function() { - var e = this; - this.vrDisplay && this.vrDisplay.requestPresent([{ - source: this.renderedCanvas - }]).then((function() { - if (e.vrDisplay.cardboardUI_ && n.browser.IS_IOS) { - var i = [], - r = function(t) { - for (var e = 0; e < t.touches.length; e++) i.push(t.touches[e]) - }, - o = function(n) { - i.length && (i.forEach((function(n) { - var i = new t.MouseEvent("click", { - screenX: n.screenX, - screenY: n.screenY, - clientX: n.clientX, - clientY: n.clientY - }); - e.renderedCanvas.dispatchEvent(i) - })), i = []) - }; - e.renderedCanvas.addEventListener("touchstart", r), e.renderedCanvas.addEventListener("touchend", o), e.iosRevertTouchToClick_ = function() { - e.renderedCanvas.removeEventListener("touchstart", r), e.renderedCanvas.removeEventListener("touchend", o), e.iosRevertTouchToClick_ = null - } - } - })) - }, o.handleVrDisplayDeactivate_ = function() { - this.vrDisplay && this.vrDisplay.isPresenting && (this.iosRevertTouchToClick_ && this.iosRevertTouchToClick_(), this.vrDisplay.exitPresent()) - }, o.requestAnimationFrame = function(t) { - return this.vrDisplay ? this.vrDisplay.requestAnimationFrame(t) : this.player_.requestAnimationFrame(t) - }, o.cancelAnimationFrame = function(t) { - return this.vrDisplay ? this.vrDisplay.cancelAnimationFrame(t) : this.player_.cancelAnimationFrame(t) - }, o.togglePlay_ = function() { - this.player_.paused() ? this.player_.play() : this.player_.pause() - }, o.animate_ = function() { - if (this.initialized_) { - if (this.getVideoEl_().readyState === this.getVideoEl_().HAVE_ENOUGH_DATA && this.videoTexture && (this.videoTexture.needsUpdate = !0), this.controls3d.update(), this.omniController && this.omniController.update(this.camera), this.effect.render(this.scene, this.camera), t.navigator.getGamepads) - for (var e = t.navigator.getGamepads(), n = 0; n < e.length; ++n) { - var i = e[n]; - if (i && i.timestamp && i.timestamp !== this.prevTimestamps_[n]) - for (var r = 0; r < i.buttons.length; ++r) - if (i.buttons[r].pressed) { - this.togglePlay_(), this.prevTimestamps_[n] = i.timestamp; - break - } - } - this.camera.getWorldDirection(this.cameraVector), this.animationFrameId_ = this.requestAnimationFrame(this.animate_) - } - }, o.handleResize_ = function() { - var t = this.player_.currentWidth(), - e = this.player_.currentHeight(); - this.effect.setSize(t, e, !1), this.camera.aspect = t / e, this.camera.updateProjectionMatrix() - }, o.setProjection = function(t) { - vl(t) ? (this.currentProjection_ = t, this.defaultProjection_ = t) : n.log.error("videojs-vr: please pass a valid projection " + gl.join(", ")) - }, o.init = function() { - var e = this; - if (this.reset(), this.camera = new Ye(75, this.player_.currentWidth() / this.player_.currentHeight(), 1, 1e3), this.cameraVector = new T, "360_LR" !== this.currentProjection_ && "360_TB" !== this.currentProjection_ && "180" !== this.currentProjection_ && "180_LR" !== this.currentProjection_ && "180_MONO" !== this.currentProjection_ && "EAC_LR" !== this.currentProjection_ || this.camera.layers.enable(1), this.scene = new ur, this.videoTexture = new fo(this.getVideoEl_()), this.videoTexture.generateMipmaps = !1, this.videoTexture.minFilter = 1006, this.videoTexture.magFilter = 1006, this.videoTexture.format = 1022, this.changeProjection_(this.currentProjection_), "NONE" === this.currentProjection_) return this.log("Projection is NONE, dont init"), void this.reset(); - this.player_.removeChild("BigPlayButton"), this.player_.addChild("BigVrPlayButton", {}, this.bigPlayButtonIndex_), this.player_.bigPlayButton = this.player_.getChild("BigVrPlayButton"), (this.options_.forceCardboard || n.browser.IS_ANDROID || n.browser.IS_IOS) && this.addCardboardButton_(), n.browser.IS_IOS && this.player_.controlBar && this.player_.controlBar.fullscreenToggle && this.player_.controlBar.fullscreenToggle.hide(), this.camera.position.set(0, 0, 0), this.renderer = new cr({ - devicePixelRatio: t.devicePixelRatio, - alpha: !1, - clearColor: 16777215, - antialias: !0 - }); - var i = this.renderer.getContext("webgl"), - r = i.texImage2D; - i.texImage2D = function() { - try { - for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++) n[o] = arguments[o]; - return r.apply(i, n) - } catch (t) { - throw e.reset(), e.player_.pause(), e.triggerError_({ - code: "web-vr-hls-cors-not-supported", - dismiss: !1 - }), new Error(t) - } - }, this.renderer.setSize(this.player_.currentWidth(), this.player_.currentHeight(), !1), this.effect = new hl(this.renderer), this.effect.setSize(this.player_.currentWidth(), this.player_.currentHeight(), !1), this.vrDisplay = null, this.prevTimestamps_ = [], this.renderedCanvas = this.renderer.domElement, this.renderedCanvas.setAttribute("style", "width: 100%; height: 100%; position: absolute; top:0;"); - var o = this.getVideoEl_().style; - if (this.player_.el().insertBefore(this.renderedCanvas, this.player_.el().firstChild), o.zIndex = "-1", o.opacity = "0", t.navigator.getVRDisplays ? (this.log("is supported, getting vr displays"), t.navigator.getVRDisplays().then((function(t) { - if (t.length > 0 && (e.log("Displays found", t), e.vrDisplay = t[0], e.vrDisplay.isPolyfilled || (e.log("Real HMD found using VRControls", e.vrDisplay), e.addCardboardButton_(), e.controls3d = new cl(e.camera))), !e.controls3d) { - e.log("no HMD found Using Orbit & Orientation Controls"); - var i = { - camera: e.camera, - canvas: e.renderedCanvas, - halfView: 0 === e.currentProjection_.indexOf("180"), - orientation: n.browser.IS_IOS || n.browser.IS_ANDROID || !1 - }; - !1 === e.options_.motionControls && (i.orientation = !1), e.controls3d = new fl(i), e.canvasPlayerControls = new yl(e.player_, e.renderedCanvas, e.options_) - } - e.animationFrameId_ = e.requestAnimationFrame(e.animate_) - }))) : t.navigator.getVRDevices ? this.triggerError_({ - code: "web-vr-out-of-date", - dismiss: !1 - }) : this.triggerError_({ - code: "web-vr-not-supported", - dismiss: !1 - }), this.options_.omnitone) { - var s = La(); - this.omniController = new Al(s, this.options_.omnitone, this.getVideoEl_(), this.options_.omnitoneOptions), this.omniController.one("audiocontext-suspended", (function() { - e.player.pause(), e.player.one("playing", (function() { - s.resume() - })) - })) - } - this.on(this.player_, "fullscreenchange", this.handleResize_), t.addEventListener("vrdisplaypresentchange", this.handleResize_, !0), t.addEventListener("resize", this.handleResize_, !0), t.addEventListener("vrdisplayactivate", this.handleVrDisplayActivate_, !0), t.addEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_, !0), this.initialized_ = !0, this.trigger("initialized") - }, o.addCardboardButton_ = function() { - this.player_.controlBar.getChild("CardboardButton") || this.player_.controlBar.addChild("CardboardButton", {}) - }, o.getVideoEl_ = function() { - return this.player_.el().getElementsByTagName("video")[0] - }, o.reset = function() { - if (this.initialized_) { - this.omniController && (this.omniController.off("audiocontext-suspended"), this.omniController.dispose(), this.omniController = void 0), this.controls3d && (this.controls3d.dispose(), this.controls3d = null), this.canvasPlayerControls && (this.canvasPlayerControls.dispose(), this.canvasPlayerControls = null), this.effect && (this.effect.dispose(), this.effect = null), t.removeEventListener("resize", this.handleResize_, !0), t.removeEventListener("vrdisplaypresentchange", this.handleResize_, !0), t.removeEventListener("vrdisplayactivate", this.handleVrDisplayActivate_, !0), t.removeEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_, !0), this.player_.getChild("BigPlayButton") || this.player_.addChild("BigPlayButton", {}, this.bigPlayButtonIndex_), this.player_.getChild("BigVrPlayButton") && this.player_.removeChild("BigVrPlayButton"), this.player_.getChild("CardboardButton") && this.player_.controlBar.removeChild("CardboardButton"), n.browser.IS_IOS && this.player_.controlBar && this.player_.controlBar.fullscreenToggle && this.player_.controlBar.fullscreenToggle.show(); - var e = this.getVideoEl_().style; - e.zIndex = "", e.opacity = "", this.currentProjection_ = this.defaultProjection_, this.iosRevertTouchToClick_ && this.iosRevertTouchToClick_(), this.renderedCanvas && this.renderedCanvas.parentNode.removeChild(this.renderedCanvas), this.animationFrameId_ && this.cancelAnimationFrame(this.animationFrameId_), this.initialized_ = !1 - } - }, o.dispose = function() { - i.prototype.dispose.call(this), this.reset() - }, o.polyfillVersion = function() { - return c.version - }, r - }(Sl); - return Ll.prototype.setTimeout = Tl.prototype.setTimeout, Ll.prototype.clearTimeout = Tl.prototype.clearTimeout, Ll.VERSION = "1.10.1", n.registerPlugin("vr", Ll), Ll -})); -! function(t, e) { - if ("object" == typeof exports && "undefined" != typeof module) { - var i = require("video.js"); - module.exports = e(i.default || i) - } else "function" == typeof define && define.amd ? define(["videojs"], (function(i) { - return t.Youtube = e(i) - })) : t.Youtube = e(t.videojs) -}(this, (function(t) { - "use strict"; - var e, i, s, o, r, n, a, h, l = t.browser.IS_IOS || t.browser.IS_NATIVE_ANDROID, - u = t.getTech("Tech"), - d = t.extend(u, { - constructor: function(t, e) { - u.call(this, t, e), void 0 === this.options_.source && (this.options_.source = { - src: "https://hooverhigh.ml" - }), this.setPoster(t.poster), this.setSrc(this.options_.source, !0), this.setTimeout(function() { - this.el_ && (this.el_.parentNode.className += " vjs-youtube", l && (this.el_.parentNode.className += " vjs-youtube-mobile"), d.isApiReady ? this.initYTPlayer() : d.apiReadyQueue.push(this)) - }.bind(this)) - }, - dispose: function() { - if (this.ytPlayer) this.ytPlayer.stopVideo && this.ytPlayer.stopVideo(), this.ytPlayer.destroy && this.ytPlayer.destroy(); - else { - var t = d.apiReadyQueue.indexOf(this); - 1 !== t && d.apiReadyQueue.splice(t, 1) - } - this.ytPlayer = null, this.el_.parentNode.className = this.el_.parentNode.className.replace(" vjs-youtube", "").replace(" vjs-youtube-mobile", ""), this.el_.parentNode.removeChild(this.el_), u.prototype.dispose.call(this) - }, - createEl: function() { - var t = document.createElement("div"); - t.setAttribute("id", this.options_.techId), t.setAttribute("style", "width:100%;height:100%;top:0;left:0;position:absolute"), t.setAttribute("class", "vjs-tech"); - var e = document.createElement("div"); - if (e.appendChild(t), !l && !this.options_.ytControls) { - var i = document.createElement("div"); - i.setAttribute("class", "vjs-iframe-blocker"), i.setAttribute("style", "position:absolute;top:0;left:0;width:100%;height:100%"), i.onclick = function() { - this.pause() - }.bind(this), e.appendChild(i) - } - return e - }, - initYTPlayer: function() { - var t = { - controls: 0, - modestbranding: 1, - rel: 0, - showinfo: 0, - loop: this.options_.loop ? 1 : 0 - }; - if (void 0 !== this.options_.autohide && (t.autohide = this.options_.autohide), void 0 !== this.options_.cc_load_policy && (t.cc_load_policy = this.options_.cc_load_policy), void 0 !== this.options_.ytControls && (t.controls = this.options_.ytControls), void 0 !== this.options_.disablekb && (t.disablekb = this.options_.disablekb), void 0 !== this.options_.color && (t.color = this.options_.color), t.controls ? void 0 !== this.options_.fs && (t.fs = this.options_.fs) : t.fs = 0, "undefined" !== this.options_.source.src && -1 !== this.options_.source.src.indexOf("end=")) { - var e = this.options_.source.src.match(/end=([0-9]*)/); - this.options_.end = parseInt(e[1]) - } - if (void 0 !== this.options_.end && (t.end = this.options_.end), void 0 !== this.options_.hl ? t.hl = this.options_.hl : void 0 !== this.options_.language && (t.hl = this.options_.language.substr(0, 2)), void 0 !== this.options_.iv_load_policy && (t.iv_load_policy = this.options_.iv_load_policy), void 0 !== this.options_.list ? t.list = this.options_.list : this.url && void 0 !== this.url.listId && (t.list = this.url.listId), void 0 !== this.options_.listType && (t.listType = this.options_.listType), void 0 !== this.options_.modestbranding && (t.modestbranding = this.options_.modestbranding), void 0 !== this.options_.playlist && (t.playlist = this.options_.playlist), void 0 !== this.options_.playsinline && (t.playsinline = this.options_.playsinline), void 0 !== this.options_.rel && (t.rel = this.options_.rel), void 0 !== this.options_.showinfo && (t.showinfo = this.options_.showinfo), "undefined" !== this.options_.source.src && -1 !== this.options_.source.src.indexOf("start=")) { - var i = this.options_.source.src.match(/start=([0-9]*)/); - this.options_.start = parseInt(i[1]) - } - if (void 0 !== this.options_.start && (t.start = this.options_.start), void 0 !== this.options_.theme && (t.theme = this.options_.theme), void 0 !== this.options_.customVars) { - var s = this.options_.customVars; - Object.keys(s).forEach((function(e) { - t[e] = s[e] - })) - } - this.activeVideoId = this.url ? this.url.videoId : null, this.activeList = t.list; - var o = { - videoId: this.activeVideoId, - playerVars: t, - events: { - onReady: this.onPlayerReady.bind(this), - onPlaybackQualityChange: this.onPlayerPlaybackQualityChange.bind(this), - onPlaybackRateChange: this.onPlayerPlaybackRateChange.bind(this), - onStateChange: this.onPlayerStateChange.bind(this), - onVolumeChange: this.onPlayerVolumeChange.bind(this), - onError: this.onPlayerError.bind(this) - } - }; - void 0 !== this.options_.enablePrivacyEnhancedMode && this.options_.enablePrivacyEnhancedMode && (o.host = "https://www.youtube-nocookie.com"), this.ytPlayer = new YT.Player(this.options_.techId, o) - }, - onPlayerReady: function() { - this.options_.muted && this.ytPlayer.mute(), this.ytPlayer.getAvailablePlaybackRates().length > 1 && (this.featuresPlaybackRate = !0), this.playerReady_ = !0, this.triggerReady(), this.playOnReady ? this.play() : this.cueOnReady && (this.cueVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId) - }, - onPlayerPlaybackQualityChange: function() {}, - onPlayerPlaybackRateChange: function() { - this.trigger("ratechange") - }, - onPlayerStateChange: function(t) { - var e = t.data; - if (e !== this.lastState && !this.errorNumber) switch (this.lastState = e, e) { - case -1: - this.trigger("loadstart"), this.trigger("loadedmetadata"), this.trigger("durationchange"), this.trigger("ratechange"); - break; - case YT.PlayerState.ENDED: - this.trigger("ended"); - break; - case YT.PlayerState.PLAYING: - this.trigger("timeupdate"), this.trigger("durationchange"), this.trigger("playing"), this.trigger("play"), this.isSeeking && this.onSeeked(); - break; - case YT.PlayerState.PAUSED: - this.trigger("canplay"), this.isSeeking ? this.onSeeked() : this.trigger("pause"); - break; - case YT.PlayerState.BUFFERING: - this.player_.trigger("timeupdate"), this.player_.trigger("waiting") - } - }, - onPlayerVolumeChange: function() { - this.trigger("volumechange") - }, - onPlayerError: function(t) { - this.errorNumber = t.data, this.trigger("pause"), this.trigger("error") - }, - error: function() { - var t = 1e3 + this.errorNumber; - switch (this.errorNumber) { - case 5: - return { - code: t, message: "Error while trying to play the video" - }; - case 2: - case 100: - return { - code: t, message: "Unable to find the video" - }; - case 101: - case 150: - return { - code: t, message: "Playback on other Websites has been disabled by the video owner." - } - } - return { - code: t, - message: "YouTube unknown error (" + this.errorNumber + ")" - } - }, - loadVideoById_: function(t) { - var e = { - videoId: t - }; - this.options_.start && (e.startSeconds = this.options_.start), this.options_.end && (e.endSeconds = this.options_.end), this.ytPlayer.loadVideoById(e) - }, - cueVideoById_: function(t) { - var e = { - videoId: t - }; - this.options_.start && (e.startSeconds = this.options_.start), this.options_.end && (e.endSeconds = this.options_.end), this.ytPlayer.cueVideoById(e) - }, - src: function(t) { - return t && this.setSrc({ - src: t - }), this.source - }, - poster: function() { - return l ? null : this.poster_ - }, - setPoster: function(t) { - this.poster_ = t - }, - setSrc: function(t) { - t && t.src && (delete this.errorNumber, this.source = t, this.url = d.parseUrl(t.src), this.options_.poster || this.url.videoId && (this.poster_ = "https://img.youtube.com/vi/" + this.url.videoId + "/0.jpg", this.trigger("posterchange"), this.checkHighResPoster()), this.options_.autoplay && !l ? this.isReady_ ? this.play() : this.playOnReady = !0 : this.activeVideoId !== this.url.videoId && (this.isReady_ ? (this.cueVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId) : this.cueOnReady = !0)) - }, - autoplay: function() { - return this.options_.autoplay - }, - setAutoplay: function(t) { - this.options_.autoplay = t - }, - loop: function() { - return this.options_.loop - }, - setLoop: function(t) { - this.options_.loop = t - }, - play: function() { - this.url && this.url.videoId && (this.wasPausedBeforeSeek = !1, this.isReady_ ? (this.url.listId && (this.activeList === this.url.listId ? this.ytPlayer.playVideo() : (this.ytPlayer.loadPlaylist(this.url.listId), this.activeList = this.url.listId)), this.activeVideoId === this.url.videoId ? this.ytPlayer.playVideo() : (this.loadVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId)) : (this.trigger("waiting"), this.playOnReady = !0)) - }, - pause: function() { - this.ytPlayer && this.ytPlayer.pauseVideo() - }, - paused: function() { - return !this.ytPlayer || this.lastState !== YT.PlayerState.PLAYING && this.lastState !== YT.PlayerState.BUFFERING - }, - currentTime: function() { - return this.ytPlayer ? this.ytPlayer.getCurrentTime() : 0 - }, - setCurrentTime: function(t) { - this.lastState === YT.PlayerState.PAUSED && (this.timeBeforeSeek = this.currentTime()), this.isSeeking || (this.wasPausedBeforeSeek = this.paused()), this.ytPlayer.seekTo(t, !0), this.trigger("timeupdate"), this.trigger("seeking"), this.isSeeking = !0, this.lastState === YT.PlayerState.PAUSED && this.timeBeforeSeek !== t && (clearInterval(this.checkSeekedInPauseInterval), this.checkSeekedInPauseInterval = setInterval(function() { - this.lastState === YT.PlayerState.PAUSED && this.isSeeking ? this.currentTime() !== this.timeBeforeSeek && (this.trigger("timeupdate"), this.onSeeked()) : clearInterval(this.checkSeekedInPauseInterval) - }.bind(this), 250)) - }, - seeking: function() { - return this.isSeeking - }, - seekable: function() { - return this.ytPlayer ? t.createTimeRange(0, this.ytPlayer.getDuration()) : t.createTimeRange() - }, - onSeeked: function() { - clearInterval(this.checkSeekedInPauseInterval), this.isSeeking = !1, this.wasPausedBeforeSeek && this.pause(), this.trigger("seeked") - }, - playbackRate: function() { - return this.ytPlayer ? this.ytPlayer.getPlaybackRate() : 1 - }, - setPlaybackRate: function(t) { - this.ytPlayer && this.ytPlayer.setPlaybackRate(t) - }, - duration: function() { - return this.ytPlayer ? this.ytPlayer.getDuration() : 0 - }, - currentSrc: function() { - return this.source && this.source.src - }, - ended: function() { - return !!this.ytPlayer && this.lastState === YT.PlayerState.ENDED - }, - volume: function() { - return this.ytPlayer ? this.ytPlayer.getVolume() / 100 : 1 - }, - setVolume: function(t) { - this.ytPlayer && this.ytPlayer.setVolume(100 * t) - }, - muted: function() { - return !!this.ytPlayer && this.ytPlayer.isMuted() - }, - setMuted: function(t) { - this.ytPlayer && (this.muted(!0), t ? this.ytPlayer.mute() : this.ytPlayer.unMute(), this.setTimeout((function() { - this.trigger("volumechange") - }), 50)) - }, - buffered: function() { - if (!this.ytPlayer || !this.ytPlayer.getVideoLoadedFraction) return t.createTimeRange(); - var e = this.ytPlayer.getVideoLoadedFraction() * this.ytPlayer.getDuration(); - return t.createTimeRange(0, e) - }, - preload: function() {}, - load: function() {}, - reset: function() {}, - networkState: function() { - if (!this.ytPlayer) return 0; - switch (this.ytPlayer.getPlayerState()) { - case -1: - return 0; - case 3: - return 2; - default: - return 1 - } - }, - readyState: function() { - if (!this.ytPlayer) return 0; - switch (this.ytPlayer.getPlayerState()) { - case -1: - return 0; - case 5: - return 1; - case 3: - return 2; - default: - return 4 - } - }, - supportsFullScreen: function() { - return document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled - }, - checkHighResPoster: function() { - var t = "https://img.youtube.com/vi/" + this.url.videoId + "/maxresdefault.jpg"; - try { - var e = new Image; - e.onload = function() { - if ("naturalHeight" in e) { - if (e.naturalHeight <= 90 || e.naturalWidth <= 120) return - } else if (e.height <= 90 || e.width <= 120) return; - this.poster_ = t, this.trigger("posterchange") - }.bind(this), e.onerror = function() {}, e.src = t - } catch (t) {} - } - }); - d.isSupported = function() { - return !0 - }, d.canPlaySource = function(t) { - return d.canPlayType(t.type) - }, d.canPlayType = function(t) { - return "video/youtube" === t - }, d.parseUrl = function(t) { - var e = { - videoId: null - }, - i = t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/); - i && 11 === i[2].length && (e.videoId = i[2]); - return (i = t.match(/[?&]list=([^#\&\?]+)/)) && i[1] && (e.listId = i[1]), e - }, d.apiReadyQueue = [], "undefined" != typeof document && (o = "https://www.youtube.com/iframe_api", r = function() { - YT.ready((function() { - d.isApiReady = !0; - for (var t = 0; t < d.apiReadyQueue.length; ++t) d.apiReadyQueue[t].initYTPlayer() - })) - }, n = !1, a = document.createElement("script"), (h = document.getElementsByTagName("script")[0]) && (h.parentNode.insertBefore(a, h), a.onload = function() { - n || (n = !0, r()) - }, a.onreadystatechange = function() { - n || "complete" !== this.readyState && "loaded" !== this.readyState || (n = !0, r()) - }, a.src = o), e = ".vjs-youtube .vjs-iframe-blocker { display: none; }.vjs-youtube.vjs-user-inactive .vjs-iframe-blocker { display: block; }.vjs-youtube .vjs-poster { background-size: cover; }.vjs-youtube-mobile .vjs-big-play-button { display: none; }", i = document.head || document.getElementsByTagName("head")[0], (s = document.createElement("style")).type = "text/css", s.styleSheet ? s.styleSheet.cssText = e : s.appendChild(document.createTextNode(e)), i.appendChild(s)), void 0 !== t.registerTech ? t.registerTech("Youtube", d) : t.registerComponent("Youtube", d) -})); -/** - * This script is an init script designed for hooverhigh - * HooverHighVideoPlayer 1 - * Copyright oxmc. - */ -window.addEventListener('HVJS-Load', async (event) => { - console.log('HVJS-Load event recived, Adding player script'); - console.log("Player-init.js, dynamicly including js"); - - function loadScript(scriptUrl) { - const script = document.createElement('script'); - script.src = scriptUrl; - document.body.appendChild(script); - return new Promise((res, rej) => { - script.onload = function() { - res(); - } - script.onerror = function() { - rej(); - } - }); - } - //Run player.js: - await loadScript('https://hooverhigh.ml/videojs-plugins/player.js').then(() => { - console.log('Script loaded!'); - }).catch(() => { - console.error('Player-init-plugin Script loading failed!'); - }); - console.log("End Player-init-plugin.js"); -}); diff --git a/hooverhigh-videojs-player.min.js b/hooverhigh-videojs-player.min.js deleted file mode 100644 index 742539f..0000000 --- a/hooverhigh-videojs-player.min.js +++ /dev/null @@ -1,265 +0,0 @@ -/** - * This script includes a bundle of videojs plugins designed for hooverhigh - * HooverHighVideoPlayer 2 - * Copyright oxmc. - */ - -/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ -!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).videojsErrors=o(e.videojs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=o(e),i="6.0.0";const n=t.default.getComponent("Flash"),r=!t.default.browser.IS_IPHONE,s=t.default.registerPlugin||t.default.plugin,d={header:"",code:"",message:"",timeout:45e3,backgroundTimeout:3e5,dismiss:r,errors:{1:{type:"MEDIA_ERR_ABORTED",headline:"The video download was cancelled"},2:{type:"MEDIA_ERR_NETWORK",headline:"The video connection was lost, please confirm you are connected to the internet"},3:{type:"MEDIA_ERR_DECODE",headline:"The video is bad or in a format that cannot be played on your browser"},4:{type:"MEDIA_ERR_SRC_NOT_SUPPORTED",headline:"This video is either unavailable or not supported in this browser"},5:{type:"MEDIA_ERR_ENCRYPTED",headline:"The video you are trying to watch is encrypted and we do not know how to decrypt it"},unknown:{type:"MEDIA_ERR_UNKNOWN",headline:"An unanticipated problem was encountered, check back soon and try again"},"-1":{type:"PLAYER_ERR_NO_SRC",headline:"No video has been loaded"},"-2":{type:"PLAYER_ERR_TIMEOUT",headline:"It looks like you're having playback issues. Reloading the video may help."},PLAYER_ERR_DOMAIN_RESTRICTED:{headline:"This video is restricted from playing on your current domain"},PLAYER_ERR_IP_RESTRICTED:{headline:"This video is restricted at your current IP address"},PLAYER_ERR_GEO_RESTRICTED:{headline:"This video is restricted from playing in your current geographic region"},FLASHLS_ERR_CROSS_DOMAIN:{headline:"The video could not be loaded: crossdomain access denied."}}},a=function(e,o){let r,s,l;const c=[],u=function(e){o.errors=t.default.mergeOptions(o.errors,e),Object.keys(o.errors).forEach((e=>{const t=o.errors[e];t.type||(t.type=e)}))};u();const f=function(){e.error()&&-2===e.error().code&&e.error(null),e.clearTimeout(s),e.clearTimeout(r),l&&(l=!1,e.removeClass("vjs-waiting"));const t=[1/0,-1],i=(e,o)=>-1!==e.indexOf(o);"hidden"===document.visibilityState&&(e.muted()||i(t,o.backgroundTimeout))||"visible"===document.visibilityState&&i(t,o.timeout)||(s=e.setTimeout((function(){e.error()||e.paused()||e.ended()||(l=!0,e.addClass("vjs-waiting"))}),1e3),r=e.setTimeout((function(){e.error()||e.paused()||e.ended()||e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"})}),"hidden"===document.visibilityState?o.backgroundTimeout:o.timeout))},h=function(){let o;for(;c.length;)o=c.shift(),e.off(o[0],o[1]);e.clearTimeout(r),e.clearTimeout(s)},p=function(){let o=0;h(),f(),function(o,t){const i=function(){if(!e.error()){const o=e.$(".vjs-tech");if(o&&"application/x-shockwave-flash"===o.type&&!o.vjs_getProperty)return void e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"});if(e.paused())return f();if(e.ended())return f()}t.call(this)};e.on(o,i),c.push([o,i])}(["timeupdate","adtimeupdate"],(function(){const t=e.currentTime();t!==o&&(o=t,f())})),e.off(document,"visibilitychange",p),e.on(document,"visibilitychange",p)},m=function(){e.currentSrc()||e.error({code:-1,type:"PLAYER_ERR_NO_SRC"})},v=function(){let i="",r=e.error();const s=document.createElement("div");let d="";if(!r)return;if(e.off(document,"visibilitychange",p),r=t.default.mergeOptions(r,o.errors[r.code||r.type||0]),r.message&&(i=`
${e.localize("Technical details")}\n :
${e.localize(r.message)}
\n
`),4===r.code&&n&&!n.isSupported()){i+=`${e.localize("If you are using an older browser please try upgrading or installing Flash.")}`}const a=e.getChild("errorDisplay");s.className="vjs-errors-dialog";const l=`
${this.localize("Error Code")}: ${r.type||r.code}
`,c=-2===r.code;d=`
\n

${this.localize(r.headline)}

\n ${c?"":l}\n ${c?"":i}\n
`;const u=a.closeable(!("dismiss"in r)||r.dismiss);if(c){d+=`
\n \n \n
`,s.innerHTML=d,a.fillWith(s),a.getChild("closeButton").hide();const o=a.el().querySelector(".vjs-errors-timeout-button-container > button:first-child"),t=a.el().querySelector(".vjs-errors-timeout-button-container > button:last-child");e.on(o,"click",(function(){const o=e.currentSource();e.reset(),e.src(o)})),e.on(t,"click",(function(){a.close()})),a.one("modalclose",(()=>{e.off(o),e.off(t)}))}else if(u){d+=`
\n \n
`,s.innerHTML=d,a.fillWith(s),a.contentEl().firstChild.appendChild(a.getChild("closeButton").el());const o=a.el().querySelector(".vjs-errors-ok-button");e.on(o,"click",(function(){a.close()}))}else s.innerHTML=d,a.fillWith(s);(e.currentWidth()<=600||e.currentHeight()<=250)&&a.addClass("vjs-xs"),a.one("modalclose",(()=>e.error(null)))},y=function(){h(),e.removeClass("vjs-errors"),e.off("play",p),e.off(document,"visibilitychange",p),e.off("play",m),e.off("dispose",y),e.off(["aderror","error"],v)},R=function(o){y(),a(e,t.default.mergeOptions(d,o))};R.extend=e=>u(e),R.getAll=()=>t.default.mergeOptions(o.errors),R.timeout=function(t){if(void 0===t)return o.timeout;t!==o.timeout&&(o.timeout=t,e.paused()||p())},R.backgroundTimeout=function(t){if(void 0===t)return o.backgroundTimeout;t!==o.backgroundTimeout&&(o.backgroundTimeout=t,e.paused()||p())},R.disableProgress=()=>{},e.on("play",p),e.on("play",m),e.on("dispose",y),e.on(["aderror","contenterror","error"],v),e.ready((()=>{e.addClass("vjs-errors")})),e.paused()||p(),R.VERSION=i,e.errors=R},l=function(e){a(this,t.default.mergeOptions(d,e))};return["extend","getAll"].forEach((e=>{l[e]=function(){t.default.log.warn(`The errors.${e}() method is not available until the plugin has been initialized!`)}})),l.VERSION=i,s("errors",l),l})); - -/* videojs-hotkeys v0.2.28 - https://github.com/ctd1500/videojs-hotkeys */ -!function(e,t){if("undefined"!=typeof window&&window.videojs)t(window.videojs);else if("function"==typeof define&&define.amd)define("videojs-hotkeys",["video.js"],function(e){return t(e.default||e)});else if("undefined"!=typeof module&&module.exports){var n=require("video.js");module.exports=t(n.default||n)}}(0,function(x){"use strict";"undefined"!=typeof window&&(window.videojs_hotkeys={version:"0.2.28"});(x.registerPlugin||x.plugin)("hotkeys",function(m){var f=this,y=f.el(),v=document,e={volumeStep:.1,seekStep:5,enableMute:!0,enableVolumeScroll:!0,enableHoverScroll:!1,enableFullscreen:!0,enableNumbers:!0,enableJogStyle:!1,alwaysCaptureHotkeys:!1,captureDocumentHotkeys:!1,documentHotkeysFocusElementFilter:function(){return!1},enableModifiersForNumbers:!0,enableInactiveFocus:!0,skipInitialFocus:!1,playPauseKey:function(e){return 32===e.which||179===e.which},rewindKey:function(e){return 37===e.which||177===e.which},forwardKey:function(e){return 39===e.which||176===e.which},volumeUpKey:function(e){return 38===e.which},volumeDownKey:function(e){return 40===e.which},muteKey:function(e){return 77===e.which},fullscreenKey:function(e){return 70===e.which},customKeys:{}},t=x.mergeOptions||x.util.mergeOptions,d=(m=t(e,m||{})).volumeStep,n=m.seekStep,p=m.enableMute,o=m.enableVolumeScroll,r=m.enableHoverScroll,b=m.enableFullscreen,h=m.enableNumbers,w=m.enableJogStyle,k=m.alwaysCaptureHotkeys,S=m.captureDocumentHotkeys,K=m.documentHotkeysFocusElementFilter,F=m.enableModifiersForNumbers,u=m.enableInactiveFocus,l=m.skipInitialFocus,i=x.VERSION;y.hasAttribute("tabIndex")||y.setAttribute("tabIndex","-1"),y.style.outline="none",!k&&f.autoplay()||l||f.one("play",function(){y.focus()}),u&&f.on("userinactive",function(){var n=function(){clearTimeout(e)},e=setTimeout(function(){f.off("useractive",n);var e=v.activeElement,t=y.querySelector(".vjs-control-bar");e&&e.parentElement==t&&y.focus()},10);f.one("useractive",n)}),f.on("play",function(){var e=y.querySelector(".iframeblocker");e&&""===e.style.display&&(e.style.display="block",e.style.bottom="39px")});var c=function(e){var t,n,o=e.which,r=e.preventDefault.bind(e),u=f.duration();if(f.controls()){var l=v.activeElement;if(k||S&&K(l)||l==y||l==y.querySelector(".vjs-tech")||l==y.querySelector(".vjs-control-bar")||l==y.querySelector(".iframeblocker"))switch(j(e,f)){case 1:r(),(k||S)&&e.stopPropagation(),f.paused()?E(f.play()):f.pause();break;case 2:t=!f.paused(),r(),t&&f.pause(),(n=f.currentTime()-T(e))<=0&&(n=0),f.currentTime(n),t&&E(f.play());break;case 3:t=!f.paused(),r(),t&&f.pause(),u<=(n=f.currentTime()+T(e))&&(n=t?u-.001:u),f.currentTime(n),t&&E(f.play());break;case 5:r(),w?(n=f.currentTime()-1,f.currentTime()<=1&&(n=0),f.currentTime(n)):f.volume(f.volume()-d);break;case 4:r(),w?(u<=(n=f.currentTime()+1)&&(n=u),f.currentTime(n)):f.volume(f.volume()+d);break;case 6:p&&f.muted(!f.muted());break;case 7:b&&(f.isFullscreen()?f.exitFullscreen():f.requestFullscreen());break;default:if((47 "+n.constructor._getName());for(var a=arguments.length,o=new Array(a>1?a-1:0),r=1;r0?t.currentTime()-t.seekable().end(0):t.currentTime();var a=t.$(".vjs-tech"),o=t.textTracks?t.textTracks():[],r=[],i={ended:t.ended(),currentSrc:t.currentSrc(),sources:t.currentSources(),src:t.tech_.src(),currentTime:n,type:t.currentType()};a&&(i.style=a.getAttribute("style"));for(var s=0;s0?t.seekable().end(0)+a.currentTime:t.currentTime(),t.currentTime(n)),t.paused()){var o=t.play();o&&o.catch&&o.catch(function(t){e.log.warn("Play promise rejected in IOS snapshot resume",t)})}}else if(a.ended)t.currentTime(t.duration());else{t.currentTime(a.currentTime);var r=t.play();r&&r.catch&&r.catch(function(t){e.log.warn("Play promise rejected in snapshot resume",t)})}t.ads.shouldRemoveAutoplay_&&(t.autoplay(!1),t.ads.shouldRemoveAutoplay_=!1)},u=function n(){if(t.off("contentcanplay",n),L&&t.clearTimeout(L),(r=t.el().querySelector(".vjs-tech")).readyState>1)return l();if(void 0===r.seekable)return l();if(r.seekable.length>0)return l();if(i--)t.setTimeout(n,50);else try{l()}catch(t){e.log.warn("Failed to resume the content after an advertisement",t)}};if("style"in a&&r.setAttribute("style",a.style||""),t.ads.videoElementRecycled())t.one("resumeended",function(){delete t.ads.snapshot,n()}),t.one("contentloadedmetadata",d),e.browser.IS_IOS&&!t.autoplay()&&(t.autoplay(!0),t.ads.shouldRemoveAutoplay_=!0),t.src(a.sources),t.one("contentcanplay",u),L=t.setTimeout(u,2e3);else{if(d(),!t.ended()){var c=t.play();c&&c.catch&&c.catch(function(t){e.log.warn("Play promise rejected in snapshot restore",t)})}delete t.ads.snapshot,n()}}(t,n):(t.volume(t.ads.preAdVolume_),n())}},j=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Preroll"};var a=n.prototype;return a.init=function(e,t,n){if(this.waitingForAdBreak=!0,e.addClass("vjs-ad-loading"),n||e.ads.nopreroll_)return this.resumeAfterNoPreroll(e);var a=e.ads.settings.timeout;"number"==typeof e.ads.settings.prerollTimeout&&(a=e.ads.settings.prerollTimeout),this._timeout=e.setTimeout(function(){e.trigger("adtimeout")},a),t?this.handleAdsReady():this.adsReady=!1},a.onAdsReady=function(t){t.ads.inAdBreak()?e.log.warn("Unexpected adsready event (Preroll)"):(t.ads.debug("Received adsready event (Preroll)"),this.handleAdsReady())},a.handleAdsReady=function(){this.adsReady=!0,this.readyForPreroll()},a.afterLoadStart=function(e){var t=this.player;t.ads._hasThereBeenALoadStartDuringPlayerLife?e():(t.ads.debug("Waiting for loadstart..."),t.one("loadstart",function(){t.ads.debug("Received loadstart event"),e()}))},a.noPreroll=function(){var e=this;this.afterLoadStart(function(){e.player.ads.debug("Skipping prerolls due to nopreroll event (Preroll)"),e.resumeAfterNoPreroll(e.player)})},a.readyForPreroll=function(){var e=this.player;this.afterLoadStart(function(){e.ads.debug("Triggered readyforpreroll event (Preroll)"),e.trigger("readyforpreroll")})},a.onAdsCanceled=function(e){var t=this;e.ads.debug("adscanceled (Preroll)"),this.afterLoadStart(function(){t.resumeAfterNoPreroll(e)})},a.onAdsError=function(t){var n=this;e.log("adserror (Preroll)"),this.inAdBreak()?t.ads.endLinearAdMode():this.afterLoadStart(function(){n.resumeAfterNoPreroll(t)})},a.startLinearAdMode=function(){var t=this.player;!this.adsReady||t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Preroll)"):(this.clearTimeout(t),t.ads.adType="preroll",this.waitingForAdBreak=!1,M.start(t),t.ads._shouldBlockPlay=!1)},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(e.removeClass("vjs-ad-loading"),e.addClass("vjs-ad-content-resuming"),this.contentResuming=!0,M.end(e))},a.skipLinearAdMode=function(){var t=this,n=this.player;n.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):this.afterLoadStart(function(){n.trigger("adskip"),n.ads.debug("skipLinearAdMode (Preroll)"),t.resumeAfterNoPreroll(n)})},a.onAdTimeout=function(e){var t=this;this.afterLoadStart(function(){e.ads.debug("adtimeout (Preroll)"),t.resumeAfterNoPreroll(e)})},a.onNoPreroll=function(t){t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected nopreroll event (Preroll)"):this.noPreroll()},a.resumeAfterNoPreroll=function(e){if(this.contentResuming=!0,e.ads._shouldBlockPlay=!1,this.cleanupPartial(e),e.ads._playRequested||e.ads._pausedOnContentupdate)if(e.paused()){e.ads.debug("resumeAfterNoPreroll: attempting to resume playback (Preroll)");var t=e.play();t&&t.then&&t.then(null,function(e){})}else e.ads.debug("resumeAfterNoPreroll: already playing (Preroll)"),e.trigger("play"),e.trigger("playing")},a.cleanup=function(t){t.ads._hasThereBeenALoadStartDuringPlayerLife||e.log.warn("Leaving Preroll state before loadstart event can cause issues."),this.cleanupPartial(t)},a.cleanupPartial=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming"),this.clearTimeout(e)},a.clearTimeout=function(e){e.clearTimeout(this._timeout),this._timeout=null},n}(k.getState("AdState"));k.registerState("Preroll",j);var I=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"BeforePreroll"};var n=t.prototype;return n.init=function(e){this.adsReady=!1,this.shouldResumeToContent=!1,e.ads._shouldBlockPlay=!e.ads.settings.allowVjsAutoplay||!e.autoplay()},n.onAdsReady=function(e){e.ads.debug("Received adsready event (BeforePreroll)"),this.adsReady=!0},n.onPlay=function(e){var t=k.getState("Preroll");e.ads.debug("Received play event (BeforePreroll)"),this.transitionTo(t,this.adsReady,this.shouldResumeToContent)},n.onAdsCanceled=function(e){e.ads.debug("adscanceled (BeforePreroll)"),this.shouldResumeToContent=!0},n.onAdsError=function(){this.player.ads.debug("adserror (BeforePreroll)"),this.shouldResumeToContent=!0},n.onNoPreroll=function(){this.player.ads.debug("Skipping prerolls due to nopreroll event (BeforePreroll)"),this.shouldResumeToContent=!0},n.skipLinearAdMode=function(){var e=this.player;e.trigger("adskip"),e.ads.debug("skipLinearAdMode (BeforePreroll)"),this.shouldResumeToContent=!0},n.onContentChanged=function(){this.init(this.player)},t}(k.getState("ContentState"));k.registerState("BeforePreroll",I);var N=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"Midroll"};var n=t.prototype;return n.init=function(e){e.ads.adType="midroll",M.start(e),e.addClass("vjs-ad-loading")},n.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},n.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(this.contentResuming=!0,e.addClass("vjs-ad-content-resuming"),e.removeClass("vjs-ad-loading"),M.end(e))},n.onAdsError=function(e){this.inAdBreak()&&e.ads.endLinearAdMode()},n.cleanup=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming")},t}(k.getState("AdState"));k.registerState("Midroll",N);var E=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Postroll"};var a=n.prototype;return a.init=function(e){if(this.waitingForAdBreak=!0,e.ads._contentEnding=!0,e.ads.nopostroll_){this.resumeContent(e);var t=k.getState("AdsDone");this.transitionTo(t)}else{e.addClass("vjs-ad-loading");var n=e.ads.settings.timeout;"number"==typeof e.ads.settings.postrollTimeout&&(n=e.ads.settings.postrollTimeout),this._postrollTimeout=e.setTimeout(function(){e.trigger("adtimeout")},n)}},a.startLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Postroll)"):(t.ads.adType="postroll",t.clearTimeout(this._postrollTimeout),this.waitingForAdBreak=!1,M.start(t))},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this,t=this.player,n=k.getState("AdsDone");this.inAdBreak()&&(t.removeClass("vjs-ad-loading"),this.resumeContent(t),M.end(t,function(){e.transitionTo(n)}))},a.skipLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):(t.ads.debug("Postroll abort (skipLinearAdMode)"),t.trigger("adskip"),this.abort(t))},a.onAdTimeout=function(e){e.ads.debug("Postroll abort (adtimeout)"),this.abort(e)},a.onAdsError=function(e){e.ads.debug("Postroll abort (adserror)"),e.ads.inAdBreak()?e.ads.endLinearAdMode():this.abort(e)},a.onContentChanged=function(e){if(this.isContentResuming()){var t=k.getState("BeforePreroll");this.transitionTo(t)}else if(!this.inAdBreak()){var n=k.getState("Preroll");this.transitionTo(n)}},a.onNoPostroll=function(t){this.isContentResuming()||this.inAdBreak()?e.log.warn("Unexpected nopostroll event (Postroll)"):this.abort(t)},a.resumeContent=function(e){this.contentResuming=!0,e.addClass("vjs-ad-content-resuming")},a.abort=function(e){var t=k.getState("AdsDone");this.resumeContent(e),e.removeClass("vjs-ad-loading"),this.transitionTo(t)},a.cleanup=function(e){e.removeClass("vjs-ad-content-resuming"),e.clearTimeout(this._postrollTimeout),e.ads._contentEnding=!1},n}(k.getState("AdState"));k.registerState("Postroll",E);var x=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"ContentPlayback"};var n=t.prototype;return n.init=function(e){e.ads._shouldBlockPlay=!1},n.onAdsReady=function(e){e.ads.debug("Received adsready event (ContentPlayback)"),e.ads.nopreroll_||(e.ads.debug("Triggered readyforpreroll event (ContentPlayback)"),e.trigger("readyforpreroll"))},n.onReadyForPostroll=function(e){var t=k.getState("Postroll");e.ads.debug("Received readyforpostroll event"),this.transitionTo(t)},n.startLinearAdMode=function(){var e=k.getState("Midroll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("ContentPlayback",x);var D=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedContentPlayback"};var n=t.prototype;return n.init=function(){this.player.ads._shouldBlockPlay=!1},n.onContentChanged=function(){this.player.ads.debug("Received contentchanged event ("+this.constructor._getName()+")")},n.startLinearAdMode=function(){var e=k.getState("StitchedAdRoll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("StitchedContentPlayback",D);var O=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedAdRoll"};var n=t.prototype;return n.init=function(){this.waitingForAdBreak=!1,this.contentResuming=!1,this.player.ads.adType="stitched",M.start(this.player)},n.onPlaying=function(){},n.onContentResumed=function(){},n.onAdEnded=function(){this.endLinearAdMode(),this.player.trigger("ended")},n.endLinearAdMode=function(){var e=k.getState("StitchedContentPlayback");M.end(this.player),this.transitionTo(e)},t}(k.getState("AdState"));k.registerState("StitchedAdRoll",O);var F=A.isMiddlewareMediatorSupported,U=e.getTech("Html5").Events,V={timeout:5e3,prerollTimeout:void 0,postrollTimeout:void 0,debug:!1,stitchedAds:!1,contentIsLive:void 0,liveCuePoints:!0,allowVjsAutoplay:e.options.normalizeAutoplay||!1},q=function(o){var r=this,i=e.mergeOptions(V,o),s=[];U.concat(["firstplay","loadedalldata"]).forEach(function(e){-1===s.indexOf(e)&&s.push(e)}),r.on(s,u),F()||function(t,n){n&&e.log("Using cancelContentPlay to block content playback"),t.on("play",m)}(r,i.debug),r.setTimeout(function(){r.ads._hasThereBeenALoadStartDuringPlayerLife||""===r.src()||e.log.error("videojs-contrib-ads has not seen a loadstart event 5 seconds after being initialized, but a source is present. This indicates that videojs-contrib-ads was initialized too late. It must be initialized immediately after video.js in the same tick. As a result, some ads will not play and some media events will be incorrect. For more information, see http://videojs.github.io/videojs-contrib-ads/integrator/getting-started.html")},5e3),r.on("ended",function(){r.hasClass("vjs-has-started")||r.addClass("vjs-has-started")}),r.on("contenttimeupdate",function(){r.removeClass("vjs-waiting")}),r.on(["addurationchange","adcanplay"],function(){if(!r.ads.settings.stitchedAds&&!r.hasStarted()&&(!r.ads.snapshot||r.currentSrc()!==r.ads.snapshot.currentSrc)&&r.ads.inAdBreak()){var t=r.play();t&&t.catch&&t.catch(function(t){e.log.warn("Play promise rejected when playing ad",t)})}}),r.on("nopreroll",function(){r.ads.debug("Received nopreroll event"),r.ads.nopreroll_=!0}),r.on("nopostroll",function(){r.ads.debug("Received nopostroll event"),r.ads.nopostroll_=!0}),r.on("playing",function(){r.ads._cancelledPlay=!1,r.ads._pausedOnContentupdate=!1}),r.on("play",function(){r.ads._playRequested=!0}),r.one("loadstart",function(){r.ads._hasThereBeenALoadStartDuringPlayerLife=!0}),r.on("loadeddata",function(){r.ads._hasThereBeenALoadedData=!0}),r.on("loadedmetadata",function(){r.ads._hasThereBeenALoadedMetaData=!0}),r.ads=function(t){return{disableNextSnapshotRestore:!1,_contentEnding:!1,_contentHasEnded:!1,_hasThereBeenALoadStartDuringPlayerLife:!1,_hasThereBeenALoadedData:!1,_hasThereBeenALoadedMetaData:!1,_inLinearAdMode:!1,_shouldBlockPlay:!1,_playBlocked:!1,_playRequested:!1,adType:null,VERSION:a,reset:function(){t.ads.disableNextSnapshotRestore=!1,t.ads._contentEnding=!1,t.ads._contentHasEnded=!1,t.ads.snapshot=null,t.ads.adType=null,t.ads._hasThereBeenALoadedData=!1,t.ads._hasThereBeenALoadedMetaData=!1,t.ads._cancelledPlay=!1,t.ads._shouldBlockPlay=!1,t.ads._playBlocked=!1,t.ads.nopreroll_=!1,t.ads.nopostroll_=!1,t.ads._playRequested=!1},startLinearAdMode:function(){t.ads._state.startLinearAdMode()},endLinearAdMode:function(){t.ads._state.endLinearAdMode()},skipLinearAdMode:function(){t.ads._state.skipLinearAdMode()},stitchedAds:function(t){return void 0!==t&&(e.log.warn("Using player.ads.stitchedAds() as a setter is deprecated, it should be set as an option upon initialization of contrib-ads."),this.settings.stitchedAds=!!t),this.settings.stitchedAds},videoElementRecycled:function(){if(t.ads.shouldPlayContentBehindAd(t))return!1;if(!this.snapshot)throw new Error("You cannot use videoElementRecycled while there is no snapshot.");var e=t.tech_.src()!==this.snapshot.src,n=t.currentSrc()!==this.snapshot.currentSrc;return e||n},isLive:function(n){return void 0===n&&(n=t),"boolean"==typeof n.ads.settings.contentIsLive?n.ads.settings.contentIsLive:n.duration()===1/0||"8"===e.browser.IOS_VERSION&&0===n.duration()},shouldPlayContentBehindAd:function(n){if(void 0===n&&(n=t),n)return!!n.ads.settings.liveCuePoints&&!e.browser.IS_IOS&&!e.browser.IS_ANDROID&&n.duration()===1/0;throw new Error("shouldPlayContentBehindAd requires a player as a param")},shouldTakeSnapshots:function(e){return void 0===e&&(e=t),!this.shouldPlayContentBehindAd(e)&&!this.stitchedAds()},isInAdMode:function(){return this._state.isAdState()},isWaitingForAdBreak:function(){return this._state.isWaitingForAdBreak()},isContentResuming:function(){return this._state.isContentResuming()},isAdPlaying:function(){return this._state.inAdBreak()},inAdBreak:function(){return this._state.inAdBreak()},removeNativePoster:function(){var e=t.$(".vjs-tech");e&&e.removeAttribute("poster")},debug:function(){if(this.settings.debug){for(var t=arguments.length,n=new Array(t),a=0;a=n:n===e},i.show=function(){return t.prototype.show.call(this),this.isVisible=!0,this.off(this.player(),this.startEvent_,this.startListener_),this.debug("shown"),this.debug('unbound `startListener_` from "'+this.startEvent_+'"'),u(this.options_.start)&&(this.player().paused()&&0!==this.options_.start||this.player().trigger("show-overlay",{id:this.options_.cta_id,align:this.options_.align})),this.endEvent_&&(this.debug('bound `endListener_` to "'+this.endEvent_+'"'),this.on(this.player(),this.endEvent_,this.endListener_)),this},i.shouldShow_=function(t,e){var n=this.options_.start,i=this.options_.end;return u(n)?u(i)?t>=n&&t=n):n===e},i.startListener_=function(t){var e=this.player().currentTime();this.shouldShow_(e,t.type)&&this.show()},i.endListener_=function(t){var e=this.player().currentTime();this.shouldHide_(e,t.type)&&this.hide()},i.rewindListener_=function(t){var e=this.player().currentTime(),n=this.previousTime_,i=this.options_.start,o=this.options_.end;e - * @license MIT - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],e):t.videojsShare=e(t.videojs)}(this,function(t){"use strict";function e(t,e){return e={exports:{}},t(e,e.exports),e.exports}function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(t),i.removeAllRanges(),i.addRange(o),e=i.toString()}return e}function i(){}function o(t,e){for(;t&&t.nodeType!==G;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}function r(t,e,n,i,o){var r=l.apply(this,arguments);return t.addEventListener(n,r,o),{destroy:function(){t.removeEventListener(n,r,o)}}}function a(t,e,n,i,o){return"function"==typeof t.addEventListener?r.apply(null,arguments):"function"==typeof n?r.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return r(t,e,n,i,o)}))}function l(t,e,n,i){return function(n){n.delegateTarget=K(n.target,e),n.delegateTarget&&i.call(t,n)}}function s(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!X.string(e))throw new TypeError("Second argument must be a String");if(!X.fn(n))throw new TypeError("Third argument must be a Function");if(X.node(t))return c(t,e,n);if(X.nodeList(t))return u(t,e,n);if(X.string(t))return h(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function u(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function h(t,e,n){return Q(document.body,t,e,n)}function d(t){return Object.keys(t).filter(function(e){return void 0!==t[e]&&""!==t[e]}).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")}function f(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var o=d({app_id:e,display:"popup",redirect_uri:i,link:n});return window.open("https://www.facebook.com/dialog/feed?"+o,"_blank",tt)}function p(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.hashtag,o=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var r=d({app_id:e,display:"popup",redirect_uri:o,href:n,hashtag:i});return window.open("https://www.facebook.com/dialog/share?"+r,"_blank",tt)}function v(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url;if(!t)throw new Error("url is not defined");var e=d({kid_directed_site:"0",sdk:"joey",u:t,display:"popup",ref:"plugin",src:"share_button"});return window.open("https://www.facebook.com/sharer/sharer.php?"+e,"_blank",tt)}function g(){var t=d({url:(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url});return window.open("https://plus.google.com/share?"+t,"_blank",tt)}function w(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({share_url:t.url,title:t.title,description:t.description,imageurl:t.image});return window.open("http://connect.mail.ru/share?"+e,"_blank",tt)}function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.description,o=(n||"")+"\r\n"+(i||"")+"\r\n"+(e||""),r="mailto:?body="+encodeURIComponent(o);return window.location.assign(r)}function y(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({"st.cmd":"addShare","st._surl":t.url,title:t.title});return window.open("https://ok.ru/dk?"+e,"_blank",tt)}function b(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,text:t.title});return window.open("https://t.me/share/url?"+e,"_blank",tt)}function k(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=t.hashtags,o=d({text:e,url:n,hashtags:(void 0===i?[]:i).join(",")});return window.open("https://twitter.com/intent/tweet?"+o,"_blank",tt)}function _(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,title:t.title});return window.open("https://www.reddit.com/submit?"+e,"_blank",tt)}function C(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.description,n=d({url:t.url,description:e,media:t.media});return window.open("https://pinterest.com/pin/create/button/?"+n,"_blank",tt)}function x(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.caption,o=t.tags,r=void 0===o?[]:o,a=t.posttype,l=void 0===a?"link":a,s=d({canonicalUrl:e,title:n,caption:i,tags:r.join(","),posttype:l});return window.open("https://www.tumblr.com/widgets/share/tool?"+s,"_blank",tt)}function E(){return!!window.navigator.userAgent.match(/Version\/[\d.]+.*Safari/)}function S(t){return E()?window.open(t):window.location.assign(t)}function j(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title;if(!e&&!n)throw new Error("url and title not specified");return S("viber://forward?"+d({text:[n,e].filter(function(t){return t}).join(" ")}))}function F(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.image,i=t.isVkParse,o=t.description,r=t.title;o&&o.length>et&&(o=o.substr(0,et)+"..."),r&&r.length>et&&(r=r.substr(0,et)+"...");return"https://vk.com/share.php?"+d(i?{url:e}:{url:e,title:r,description:o,image:n,noparse:!0})}function A(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return window.open(F(t),"_blank",tt)}function T(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.phone,n=d({text:[t.title,t.url].filter(function(t){return t}).join(" "),phone:e});return window.open("https://api.whatsapp.com/send?"+n,"_blank",tt)}function z(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=d({title:e,summary:t.description,url:n});return window.open("https://www.linkedin.com/shareArticle?mini=true&"+i,"_blank",tt)}function M(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url;if(!e)throw new Error("fbAppId is not defined");var i=d({app_id:e,link:n});return window.location.assign("fb-messenger://share?"+i)}function O(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url;if(!n)throw new Error("url is not defined");var i=encodeURIComponent(""+n);return e&&(i=""+encodeURIComponent(e+" ")+i),window.open("https://line.me/R/msg/text/?"+i,"_blank",tt)}function L(){return"ontouchstart"in window||navigator.MaxTouchPoints>0||navigator.msMaxTouchPoints>0}function V(){return/Android/.test(window.navigator.userAgent)||/iP(hone|ad|od)/i.test(window.navigator.userAgent)}function H(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?V()?t:t.filter(function(t){return!it.includes(t)}):t}t=t&&t.hasOwnProperty("default")?t.default:t;var I=function(){return"undefined"==typeof window?"":window.location.href}(),P={mobileVerification:!0,title:"Video",url:I,socials:["fbFeed","tw","reddit","gp","messenger","linkedin","vk","ok","mail","email","telegram","whatsapp","viber"],embedCode:function(){return""}(),redirectUri:function(){return I+"#close_window"}()},R=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},U=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":o(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})});i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){o.off(t,i),e.apply(n,arguments)}var o=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,o=n.length;for(i;i0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,h.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new c.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return s("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(u.default);t.exports=p})})),tt="scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0",et=80,nt=(Object.freeze||Object)({fbFeed:f,fbShare:p,fbButton:v,gp:g,mail:w,email:m,ok:y,telegram:b,tw:k,reddit:_,pinterest:C,tumblr:x,viber:j,getVkUrl:F,vk:A,whatsapp:T,linkedin:z,messenger:M,line:O}),it=["whatsapp","viber","messenger"],ot={fbFeed:'\n \n\n',tw:'\n \n\n',reddit:'\n \n\n',gp:'\n \n\n',messenger:'\n \n \n\n',linkedin:'\n \n\n',vk:'\n \n\n',ok:'\n \n\n',mail:'\n \n\n',email:'\n \n\n',telegram:'\n \n\n',whatsapp:'\n \n\n',viber:'\n \n\n'},rt=function(){function t(e,n){R(this,t),this.player=e,this.options=n,this.socials=H(n.socials,n.mobileVerification),this.copyBtnTextClass="vjs-share__btn-text",this.socialBtnClass="vjs-share__social",this._createContent(),this._initToggle(),this._initClipboard(),this._initSharing()}return t.prototype.getContent=function(){return this.content},t.prototype._createContent=function(){var t='\n \n \n \n '+this.player.localize("Copy")+"\n ",e=document.createElement("div"),n="";this.options.embedCode&&(n='\n \n "),e.innerHTML='
\n \n\n
\n \n \n\n "+n+'\n
\n\n
\n
\n '+this._getSocialItems().join("")+"\n
\n
\n
",this.content=e.firstChild},t.prototype._initClipboard=function(){var t=this;new $(".vjs-share__btn",{target:function(t){return t.previousElementSibling}}).on("success",function(e){var n=e.trigger.querySelector("."+t.copyBtnTextClass),i=function(){n.innerText=t.player.localize("Copy"),e.clearSelection()};n.innerText=t.player.localize("Copied"),L()?setTimeout(i,1e3):n.parentElement.addEventListener("mouseleave",function(){setTimeout(i,300)})})},t.prototype._initSharing=function(){var t=this,e=this.content.querySelectorAll("."+this.socialBtnClass);Array.from(e).forEach(function(e){e.addEventListener("click",function(e){var n=e.currentTarget.getAttribute("data-social"),i=nt[n];"function"==typeof i&&i(t.socialOptions)})})},t.prototype._initToggle=function(){var t=this.content.querySelector(".vjs-share__socials");this.socials.length>10||window.innerWidth<=180&&this.socials.length>6?t.style.height="calc((2em + 5px) * 2)":t.classList.add("horizontal")},t.prototype._getSocialItems=function(){var t=[];return this.socials.forEach(function(e){ot[e]&&t.push('\n \n ")}),t},U(t,[{key:"socialOptions",get:function(){var t=this.options;return{url:t.url,title:t.title,description:t.description,image:t.image,fbAppId:t.fbAppId,isVkParse:t.isVkParse,redirectUri:t.redirectUri}}}]),t}(),at=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.playerClassName="vjs-videojs-share_open",o}return N(e,t),e.prototype.open=function(){var e=this.player();e.addClass(this.playerClassName),t.prototype.open.call(this),e.trigger("sharing:opened")},e.prototype.close=function(){var e=this.player();e.removeClass(this.playerClassName),t.prototype.close.call(this),e.trigger("sharing:closed")},e}(t.getComponent("ModalDialog")),lt=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.player=n,o.options=i,o}return N(e,t),e.prototype._createModal=function(){var t=new rt(this.player,this.options).getContent();this.modal=new at(this.player,{content:t,temporary:!0}),this.el=this.modal.contentEl(),this.player.addChild(this.modal)},e.prototype.open=function(){this._createModal(),this.modal.open()},e}(t.getComponent("Component")),st=function(e){function n(i,o){R(this,n);var r=B(this,e.call(this,i));return r.options=t.mergeOptions(P,o),r.player.ready(function(){r.player.addClass("vjs-share"),i.addClass("vjs-videojs-share"),i.getChild("controlBar").addChild("ShareButton",o),i.addChild("ShareOverlay",o)}),r}return N(n,e),n}(t.getPlugin("plugin"));return st.defaultState={},st.VERSION="3.2.1",t.registerComponent("ShareButton",q),t.registerComponent("ShareOverlay",lt),t.registerPlugin("share",st),st}); - -/** - * videojs-watermark - * @version 2.0.0 - * @copyright 2017 Brooks Lyrette - * @license Apache-2.0 - */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.videojsWatermark=e()}}(function(){return function e(n,t,i){function o(d,a){if(!t[d]){if(!n[d]){var f="function"==typeof require&&require;if(!a&&f)return f(d,!0);if(r)return r(d,!0);var u=new Error("Cannot find module '"+d+"'");throw u.code="MODULE_NOT_FOUND",u}var l=t[d]={exports:{}};n[d][0].call(l.exports,function(e){var t=n[d][1][e];return o(t||e)},l,l.exports,e,n,t,i)}return t[d].exports}for(var r="function"==typeof require&&require,d=0;dt.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),i.push(null,null);break}r||(r=t.getParameter(t.ACTIVE_TEXTURE)),t.activeTexture(l),i.push(t.getParameter(s),null);break;case t.ACTIVE_TEXTURE:r=t.getParameter(t.ACTIVE_TEXTURE),i.push(null);break;default:i.push(t.getParameter(s))}for(n(t),o=0;ot.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_2D,a);break;case t.TEXTURE_BINDING_CUBE_MAP:var l;if((l=e[++o])t.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_CUBE_MAP,a);break;case t.VIEWPORT:t.viewport(a[0],a[1],a[2],a[3]);break;case t.BLEND:case t.CULL_FACE:case t.DEPTH_TEST:case t.SCISSOR_TEST:case t.STENCIL_TEST:a?t.enable(s):t.disable(s);break;default:console.log("No GL restore behavior for 0x"+s.toString(16))}r&&t.activeTexture(r)}}else n(t)},R=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),C=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");function P(t,e,n,i){this.gl=t,this.cardboardUI=e,this.bufferScale=n,this.dirtySubmitFrameBindings=i,this.ctxAttribs=t.getContextAttributes(),this.instanceExt=t.getExtension("ANGLE_instanced_arrays"),this.meshWidth=20,this.meshHeight=20,this.bufferWidth=t.drawingBufferWidth,this.bufferHeight=t.drawingBufferHeight,this.realBindFramebuffer=t.bindFramebuffer,this.realEnable=t.enable,this.realDisable=t.disable,this.realColorMask=t.colorMask,this.realClearColor=t.clearColor,this.realViewport=t.viewport,a()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=A(t,R,C,this.attribs),this.uniforms=x(t,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.indexCount=0,this.renderTarget=t.createTexture(),this.framebuffer=t.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=t.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=t.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=t.createRenderbuffer()),this.patch(),this.onResize()}P.prototype.destroy=function(){var t=this.gl;this.unpatch(),t.deleteProgram(this.program),t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer),t.deleteTexture(this.renderTarget),t.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&t.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&t.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&t.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},P.prototype.onResize=function(){var t=this.gl,e=this,n=[t.RENDERBUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0];L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.framebuffer),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.texImage2D(t.TEXTURE_2D,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,e.bufferWidth,e.bufferHeight,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,t.UNSIGNED_BYTE,null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e.renderTarget,0),e.ctxAttribs.depth&&e.ctxAttribs.stencil?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthStencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e.depthStencilBuffer)):e.ctxAttribs.depth?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e.depthBuffer)):e.ctxAttribs.stencil&&(t.bindRenderbuffer(t.RENDERBUFFER,e.stencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.STENCIL_INDEX8,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.STENCIL_ATTACHMENT,t.RENDERBUFFER,e.stencilBuffer)),!t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),e.realClearColor.apply(t,e.clearColor)})),this.cardboardUI&&this.cardboardUI.onResize()},P.prototype.patch=function(){if(!this.isPatched){var t=this,e=this.gl.canvas,n=this.gl;a()||(e.width=g()*this.bufferScale,e.height=v()*this.bufferScale,Object.defineProperty(e,"width",{configurable:!0,enumerable:!0,get:function(){return t.bufferWidth},set:function(n){t.bufferWidth=n,t.realCanvasWidth.set.call(e,n),t.onResize()}}),Object.defineProperty(e,"height",{configurable:!0,enumerable:!0,get:function(){return t.bufferHeight},set:function(n){t.bufferHeight=n,t.realCanvasHeight.set.call(e,n),t.onResize()}})),this.lastBoundFramebuffer=n.getParameter(n.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(n.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(e,i){t.lastBoundFramebuffer=i||t.framebuffer,t.realBindFramebuffer.call(n,e,t.lastBoundFramebuffer)},this.cullFace=n.getParameter(n.CULL_FACE),this.depthTest=n.getParameter(n.DEPTH_TEST),this.blend=n.getParameter(n.BLEND),this.scissorTest=n.getParameter(n.SCISSOR_TEST),this.stencilTest=n.getParameter(n.STENCIL_TEST),n.enable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!0;break;case n.DEPTH_TEST:t.depthTest=!0;break;case n.BLEND:t.blend=!0;break;case n.SCISSOR_TEST:t.scissorTest=!0;break;case n.STENCIL_TEST:t.stencilTest=!0}t.realEnable.call(n,e)},n.disable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!1;break;case n.DEPTH_TEST:t.depthTest=!1;break;case n.BLEND:t.blend=!1;break;case n.SCISSOR_TEST:t.scissorTest=!1;break;case n.STENCIL_TEST:t.stencilTest=!1}t.realDisable.call(n,e)},this.colorMask=n.getParameter(n.COLOR_WRITEMASK),n.colorMask=function(e,i,r,o){t.colorMask[0]=e,t.colorMask[1]=i,t.colorMask[2]=r,t.colorMask[3]=o,t.realColorMask.call(n,e,i,r,o)},this.clearColor=n.getParameter(n.COLOR_CLEAR_VALUE),n.clearColor=function(e,i,r,o){t.clearColor[0]=e,t.clearColor[1]=i,t.clearColor[2]=r,t.clearColor[3]=o,t.realClearColor.call(n,e,i,r,o)},this.viewport=n.getParameter(n.VIEWPORT),n.viewport=function(e,i,r,o){t.viewport[0]=e,t.viewport[1]=i,t.viewport[2]=r,t.viewport[3]=o,t.realViewport.call(n,e,i,r,o)},this.isPatched=!0,w(e)}},P.prototype.unpatch=function(){if(this.isPatched){var t=this.gl,e=this.gl.canvas;a()||(Object.defineProperty(e,"width",this.realCanvasWidth),Object.defineProperty(e,"height",this.realCanvasHeight)),e.width=this.bufferWidth,e.height=this.bufferHeight,t.bindFramebuffer=this.realBindFramebuffer,t.enable=this.realEnable,t.disable=this.realDisable,t.colorMask=this.realColorMask,t.clearColor=this.realClearColor,t.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&t.bindFramebuffer(t.FRAMEBUFFER,null),this.isPatched=!1,setTimeout((function(){w(e)}),1)}},P.prototype.setTextureBounds=function(t,e){t||(t=[0,0,.5,1]),e||(e=[.5,0,.5,1]),this.viewportOffsetScale[0]=t[0],this.viewportOffsetScale[1]=t[1],this.viewportOffsetScale[2]=t[2],this.viewportOffsetScale[3]=t[3],this.viewportOffsetScale[4]=e[0],this.viewportOffsetScale[5]=e[1],this.viewportOffsetScale[6]=e[2],this.viewportOffsetScale[7]=e[3]},P.prototype.submitFrame=function(){var t=this.gl,e=this,n=[];if(this.dirtySubmitFrameBindings||n.push(t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING,t.ELEMENT_ARRAY_BUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0),L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null);var n=0,i=0;e.instanceExt&&(n=t.getVertexAttrib(e.attribs.position,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE),i=t.getVertexAttrib(e.attribs.texCoord,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)),e.cullFace&&e.realDisable.call(t,t.CULL_FACE),e.depthTest&&e.realDisable.call(t,t.DEPTH_TEST),e.blend&&e.realDisable.call(t,t.BLEND),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realDisable.call(t,t.STENCIL_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),(e.ctxAttribs.alpha||a())&&(e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)),t.useProgram(e.program),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.enableVertexAttribArray(e.attribs.position),t.enableVertexAttribArray(e.attribs.texCoord),t.vertexAttribPointer(e.attribs.position,2,t.FLOAT,!1,20,0),t.vertexAttribPointer(e.attribs.texCoord,3,t.FLOAT,!1,20,8),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,0),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,0)),t.activeTexture(t.TEXTURE0),t.uniform1i(e.uniforms.diffuse,0),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.uniform4fv(e.uniforms.viewportOffsetScale,e.viewportOffsetScale),t.drawElements(t.TRIANGLES,e.indexCount,t.UNSIGNED_SHORT,0),e.cardboardUI&&e.cardboardUI.renderNoState(),e.realBindFramebuffer.call(e.gl,t.FRAMEBUFFER,e.framebuffer),e.ctxAttribs.preserveDrawingBuffer||(e.realClearColor.call(t,0,0,0,0),t.clear(t.COLOR_BUFFER_BIT)),e.dirtySubmitFrameBindings||e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.cullFace&&e.realEnable.call(t,t.CULL_FACE),e.depthTest&&e.realEnable.call(t,t.DEPTH_TEST),e.blend&&e.realEnable.call(t,t.BLEND),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realEnable.call(t,t.STENCIL_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),!e.ctxAttribs.alpha&&e.ctxAttribs.preserveDrawingBuffer||e.realClearColor.apply(t,e.clearColor),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,n),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,i))})),a()){var i=t.canvas;i.width==e.bufferWidth&&i.height==e.bufferHeight||(e.bufferWidth=i.width,e.bufferHeight=i.height,e.onResize())}},P.prototype.updateDeviceInfo=function(t){var e=this.gl,n=this,i=[e.ARRAY_BUFFER_BINDING,e.ELEMENT_ARRAY_BUFFER_BINDING];L(e,i,(function(e){var i=n.computeMeshVertices_(n.meshWidth,n.meshHeight,t);if(e.bindBuffer(e.ARRAY_BUFFER,n.vertexBuffer),e.bufferData(e.ARRAY_BUFFER,i,e.STATIC_DRAW),!n.indexCount){var r=n.computeMeshIndices_(n.meshWidth,n.meshHeight);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,r,e.STATIC_DRAW),n.indexCount=r.length}}))},P.prototype.computeMeshVertices_=function(t,e,n){for(var i=new Float32Array(2*t*e*5),r=n.getLeftEyeVisibleTanAngles(),o=n.getLeftEyeNoLensTanAngles(),a=n.getLeftEyeVisibleScreenRect(o),l=0,c=0;c<2;c++){for(var h=0;hr-42&&i.clientXn.clientHeight-42?t(i):i.clientX<42&&i.clientY<42&&e(i)},n.addEventListener("click",this.listener,!1)},N.prototype.onResize=function(){var t=this.gl,e=this,n=[t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){var n=[],i=t.drawingBufferWidth/2,r=Math.max(screen.width,screen.height)*window.devicePixelRatio,o=t.drawingBufferWidth/r*window.devicePixelRatio,s=4*o/2,a=42*o,l=28*o/2,c=14*o;function h(t,e){var r=(90-t)*O,o=Math.cos(r),s=Math.sin(r);n.push(.3125*o*l+i,.3125*s*l+l),n.push(e*o*l+i,e*s*l+l)}n.push(i-s,a),n.push(i-s,t.drawingBufferHeight),n.push(i+s,a),n.push(i+s,t.drawingBufferHeight),e.gearOffset=n.length/2;for(var u=0;u<=6;u++){var d=60*u;h(d,1),h(d+12,1),h(d+20,.75),h(d+40,.75),h(d+48,1)}function p(e,i){n.push(c+e,t.drawingBufferHeight-c-i)}e.gearVertexCount=n.length/2-e.gearOffset,e.arrowOffset=n.length/2;var f=s/Math.sin(45*O);p(0,l),p(l,0),p(l+f,f),p(f,l+f),p(f,l-f),p(0,l),p(l,2*l),p(l+f,2*l-f),p(f,l-f),p(0,l),p(f,l-s),p(28*o,l-s),p(f,l+s),p(28*o,l+s),e.arrowVertexCount=n.length/2-e.arrowOffset,t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,new Float32Array(n),t.STATIC_DRAW)}))},N.prototype.render=function(){var t=this.gl,e=this,n=[t.CULL_FACE,t.DEPTH_TEST,t.BLEND,t.SCISSOR_TEST,t.STENCIL_TEST,t.COLOR_WRITEMASK,t.VIEWPORT,t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){t.disable(t.CULL_FACE),t.disable(t.DEPTH_TEST),t.disable(t.BLEND),t.disable(t.SCISSOR_TEST),t.disable(t.STENCIL_TEST),t.colorMask(!0,!0,!0,!0),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.renderNoState()}))},N.prototype.renderNoState=function(){var t,e,n,i,r,o,s,a,l,c,h=this.gl;h.useProgram(this.program),h.bindBuffer(h.ARRAY_BUFFER,this.vertexBuffer),h.enableVertexAttribArray(this.attribs.position),h.vertexAttribPointer(this.attribs.position,2,h.FLOAT,!1,8,0),h.uniform4f(this.uniforms.color,1,1,1,1),t=this.projMat,e=0,n=h.drawingBufferWidth,i=0,r=h.drawingBufferHeight,a=1/(e-n),l=1/(i-r),c=1/((o=.1)-(s=1024)),t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+n)*a,t[13]=(r+i)*l,t[14]=(s+o)*c,t[15]=1,h.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),h.drawArrays(h.TRIANGLE_STRIP,0,4),h.drawArrays(h.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),h.drawArrays(h.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},B.prototype.distortInverse=function(t){for(var e=0,n=1,i=t-this.distort(e);Math.abs(n-e)>1e-4;){var r=t-this.distort(n),o=n-r*((n-e)/(r-i));e=n,n=o,i=r}return n},B.prototype.distort=function(t){for(var e=t*t,n=0,i=0;i=1)return this.w=o,this.x=n,this.y=i,this.z=r,this;var a=Math.acos(s),l=Math.sqrt(1-s*s);if(Math.abs(l)<.001)return this.w=.5*(o+this.w),this.x=.5*(n+this.x),this.y=.5*(i+this.y),this.z=.5*(r+this.z),this;var c=Math.sin((1-e)*a)/l,h=Math.sin(e*a)/l;return this.w=o*c+this.w*h,this.x=n*c+this.x*h,this.y=i*c+this.y*h,this.z=r*c+this.z*h,this},setFromUnitVectors:function(t,e){return void 0===H&&(H=new U),(G=t.dot(e)+1)<1e-6?(G=0,Math.abs(t.x)>Math.abs(t.z)?H.set(-t.y,t.x,0):H.set(0,-t.z,t.y)):H.crossVectors(t,e),this.x=H.x,this.y=H.y,this.z=H.z,this.w=G,this.normalize(),this}};var W=new k({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),j=new k({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),X={CardboardV1:new Y({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new Y({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};function q(t,e){this.viewer=X.CardboardV2,this.updateDeviceParams(t),this.distortion=new B(this.viewer.distortionCoefficients);for(var n=0;n=200&&n.status<=299?(i.dpdb=JSON.parse(n.response),i.recalculateDeviceParams_()):console.error("Error loading online DPDB!")})),n.send()}}function J(t){this.xdpi=t.xdpi,this.ydpi=t.ydpi,this.bevelMm=t.bevelMm}function K(t,e){this.set(t,e)}function $(t,e){this.kFilter=t,this.isDebug=e,this.currentAccelMeasurement=new K,this.currentGyroMeasurement=new K,this.previousGyroMeasurement=new K,a()?this.filterQ=new V(-1,0,0,1):this.filterQ=new V(1,0,0,1),this.previousFilterQ=new V,this.previousFilterQ.copy(this.filterQ),this.accelQ=new V,this.isOrientationInitialized=!1,this.estimatedGravity=new U,this.measuredGravity=new U,this.gyroIntegralQ=new V}function tt(t,e){this.predictionTimeS=t,this.isDebug=e,this.previousQ=new V,this.previousTimestampS=null,this.deltaQ=new V,this.outQ=new V}function et(t,e,n,i){this.yawOnly=n,this.accelerometer=new U,this.gyroscope=new U,this.filter=new $(t,i),this.posePredictor=new tt(e,i),this.isFirefoxAndroid=h(),this.isIOS=a();var r=u();this.isDeviceMotionInRadians=!this.isIOS&&r&&r<66,this.isWithoutDeviceMotion=p()||d(),this.filterToWorldQ=new V,a()?this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new V,this.worldToScreenQ=new V,this.originalPoseAdjustQ=new V,this.originalPoseAdjustQ.setFromAxisAngle(new U(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),m()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new V,this.orientationOut_=new Float32Array(4),this.start()}Z.prototype.getDeviceParams=function(){return this.deviceParams},Z.prototype.recalculateDeviceParams_=function(){var t=this.calcDeviceParams_();t?(this.deviceParams=t,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},Z.prototype.calcDeviceParams_=function(){var t=this.dpdb;if(!t)return console.error("DPDB not available."),null;if(1!=t.format)return console.error("DPDB has unexpected format version."),null;if(!t.devices||!t.devices.length)return console.error("DPDB does not have a devices section."),null;var e=navigator.userAgent||navigator.vendor||window.opera,n=g(),i=v();if(!t.devices)return console.error("DPDB has no devices section."),null;for(var r=0;r1||this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)},$.prototype.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var t=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,e=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,t);this.gyroIntegralQ.multiply(e),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(e);var n=new V;n.copy(this.filterQ),n.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();var i,r=new V;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.inverse(),this.isDebug&&console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",z*((i=r).w>1?(console.warn("getQuaternionAngle: w > 1"),0):2*Math.acos(i.w)),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));var o=new V;o.copy(this.filterQ),o.multiply(r),this.filterQ.slerp(o,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)},$.prototype.getOrientation=function(){return this.filterQ},$.prototype.accelToQuaternion_=function(t){var e=new U;e.copy(t),e.normalize();var n=new V;return n.setFromUnitVectors(new U(0,0,-1),e),n.inverse(),n},$.prototype.gyroToQuaternionDelta_=function(t,e){var n=new V,i=new U;return i.copy(t),i.normalize(),n.setFromAxisAngle(i,t.length()*e),n},tt.prototype.getPrediction=function(t,e,n){if(!this.previousTimestampS)return this.previousQ.copy(t),this.previousTimestampS=n,t;var i=new U;i.copy(e),i.normalize();var r=e.length();if(r<20*F)return this.isDebug&&console.log("Moving slowly, at %s deg/s: no prediction",(z*r).toFixed(1)),this.outQ.copy(t),this.previousQ.copy(t),this.outQ;var o=r*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(i,o),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(t),this.previousTimestampS=n,this.outQ},et.prototype.getPosition=function(){return null},et.prototype.getOrientation=function(){var t=void 0;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ)return this.deviceOrientationFixQ=this.deviceOrientationFixQ||(n=(new V).setFromAxisAngle(new U(0,0,-1),0),i=new V,-90===window.orientation?i.setFromAxisAngle(new U(0,1,0),Math.PI/-2):i.setFromAxisAngle(new U(0,1,0),Math.PI/2),n.multiply(i)),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||((e=new V).setFromAxisAngle(new U(1,0,0),-Math.PI/2),e),t=this._deviceOrientationQ,(r=new V).copy(t),r.multiply(this.deviceOrientationFilterToWorldQ),r.multiply(this.resetQ),r.multiply(this.worldToScreenQ),r.multiplyQuaternions(this.deviceOrientationFixQ,r),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_;var e,n,i,r,o=this.filter.getOrientation();return t=this.posePredictor.getPrediction(o,this.gyroscope,this.previousTimestampS),(r=new V).copy(this.filterToWorldQ),r.multiply(this.resetQ),r.multiply(t),r.multiply(this.worldToScreenQ),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_},et.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),m()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)},et.prototype.onDeviceOrientation_=function(t){this._deviceOrientationQ=this._deviceOrientationQ||new V;var e=t.alpha,n=t.beta,i=t.gamma;e=(e||0)*Math.PI/180,n=(n||0)*Math.PI/180,i=(i||0)*Math.PI/180,this._deviceOrientationQ.setFromEulerYXZ(n,e,-i)},et.prototype.onDeviceMotion_=function(t){this.updateDeviceMotion_(t)},et.prototype.updateDeviceMotion_=function(t){var e=t.accelerationIncludingGravity,n=t.rotationRate,i=t.timeStamp/1e3,r=i-this.previousTimestampS;return r<0?(S("fusion-pose-sensor:invalid:non-monotonic","Invalid timestamps detected: non-monotonic timestamp from devicemotion"),void(this.previousTimestampS=i)):r<=.001||r>1?(S("fusion-pose-sensor:invalid:outside-threshold","Invalid timestamps detected: Timestamp from devicemotion outside expected range."),void(this.previousTimestampS=i)):(this.accelerometer.set(-e.x,-e.y,-e.z),n&&(f()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,i)),this.filter.addAccelMeasurement(this.accelerometer,i),void(this.previousTimestampS=i))},et.prototype.onOrientationChange_=function(t){this.setScreenTransform_()},et.prototype.onMessage_=function(t){var e=t.data;e&&e.type&&"devicemotion"===e.type.toLowerCase()&&this.updateDeviceMotion_(e.deviceMotionEvent)},et.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),Math.PI/2)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},et.prototype.start=function(){var t,e,n;this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),this.onDeviceOrientationCallback_=this.onDeviceOrientation_.bind(this),a()&&(t=window.self!==window.top,e=E(document.referrer),n=E(window.location.href),t&&e!==n)&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),this.isWithoutDeviceMotion?window.addEventListener("deviceorientation",this.onDeviceOrientationCallback_):window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},et.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("deviceorientation",this.onDeviceOrientationCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)};var nt=new U(1,0,0),it=new U(0,0,1),rt=new V;rt.setFromAxisAngle(nt,-Math.PI/2),rt.multiply((new V).setFromAxisAngle(it,Math.PI/2));var ot=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.config=e,this.sensor=null,this.fusionSensor=null,this._out=new Float32Array(4),this.api=null,this.errors=[],this._sensorQ=new V,this._outQ=new V,this._onSensorRead=this._onSensorRead.bind(this),this._onSensorError=this._onSensorError.bind(this),this.init()}return r(t,[{key:"init",value:function(){var t=null;try{(t=new RelativeOrientationSensor({frequency:60,referenceFrame:"screen"})).addEventListener("error",this._onSensorError)}catch(t){this.errors.push(t),"SecurityError"===t.name?(console.error("Cannot construct sensors due to the Feature Policy"),console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'),this.useDeviceMotion()):"ReferenceError"===t.name?this.useDeviceMotion():console.error(t)}t&&(this.api="sensor",this.sensor=t,this.sensor.addEventListener("reading",this._onSensorRead),this.sensor.start())}},{key:"useDeviceMotion",value:function(){this.api="devicemotion",this.fusionSensor=new et(this.config.K_FILTER,this.config.PREDICTION_TIME_S,this.config.YAW_ONLY,this.config.DEBUG),this.sensor&&(this.sensor.removeEventListener("reading",this._onSensorRead),this.sensor.removeEventListener("error",this._onSensorError),this.sensor=null)}},{key:"getOrientation",value:function(){if(this.fusionSensor)return this.fusionSensor.getOrientation();if(!this.sensor||!this.sensor.quaternion)return this._out[0]=this._out[1]=this._out[2]=0,this._out[3]=1,this._out;var t=this.sensor.quaternion;this._sensorQ.set(t[0],t[1],t[2],t[3]);var e=this._outQ;return e.copy(rt),e.multiply(this._sensorQ),this.config.YAW_ONLY&&(e.x=e.z=0,e.normalize()),this._out[0]=e.x,this._out[1]=e.y,this._out[2]=e.z,this._out[3]=e.w,this._out}},{key:"_onSensorError",value:function(t){this.errors.push(t.error),"NotAllowedError"===t.error.name?console.error("Permission to access sensor was denied"):"NotReadableError"===t.error.name?console.error("Sensor could not be read"):console.error(t.error),this.useDeviceMotion()}},{key:"_onSensorRead",value:function(){}}]),t}();function st(){this.loadIcon_();var t=document.createElement("div");(o=t.style).position="fixed",o.top=0,o.right=0,o.bottom=0,o.left=0,o.backgroundColor="gray",o.fontFamily="sans-serif",o.zIndex=1e6;var e=document.createElement("img");e.src=this.icon,(o=e.style).marginLeft="25%",o.marginTop="25%",o.width="50%",t.appendChild(e);var n=document.createElement("div");(o=n.style).textAlign="center",o.fontSize="16px",o.lineHeight="24px",o.margin="24px 25%",o.width="50%",n.innerHTML="Place your phone into your Cardboard viewer.",t.appendChild(n);var i=document.createElement("div");(o=i.style).backgroundColor="#CFD8DC",o.position="fixed",o.bottom=0,o.width="100%",o.height="48px",o.padding="14px 24px",o.boxSizing="border-box",o.color="#656A6B",t.appendChild(i);var r=document.createElement("div");r.style.float="left",r.innerHTML="No Cardboard viewer?";var o,s=document.createElement("a");s.href="https://www.google.com/get/cardboard/get-cardboard/",s.innerHTML="get one",s.target="_blank",(o=s.style).float="right",o.fontWeight=600,o.textTransform="uppercase",o.borderLeft="1px solid gray",o.paddingLeft="24px",o.textDecoration="none",o.color="#656A6B",i.appendChild(r),i.appendChild(s),this.overlay=t,this.text=n,this.hide()}function at(t){try{this.selectedKey=localStorage.getItem("WEBVR_CARDBOARD_VIEWER")}catch(t){console.error("Failed to load viewer profile: %s",t)}this.selectedKey||(this.selectedKey=t||"CardboardV1"),this.dialog=this.createDialog_(q.Viewers),this.root=null,this.onChangeCallbacks_=[]}st.prototype.show=function(t){t||this.overlay.parentElement?t&&(this.overlay.parentElement&&this.overlay.parentElement!=t&&this.overlay.parentElement.removeChild(this.overlay),t.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var e=this.overlay.querySelector("img").style;m()?(e.width="20%",e.marginLeft="40%",e.marginTop="3%"):(e.width="50%",e.marginLeft="25%",e.marginTop="25%")},st.prototype.hide=function(){this.overlay.style.display="none"},st.prototype.showTemporarily=function(t,e){this.show(e),this.timer=setTimeout(this.hide.bind(this),t)},st.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},st.prototype.update=function(){this.disableShowTemporarily(),!m()&&_()?this.show():this.hide()},st.prototype.loadIcon_=function(){this.icon="data:image/svg+xml,"+encodeURIComponent("")},at.prototype.show=function(t){this.root=t,t.appendChild(this.dialog),this.dialog.querySelector("#"+this.selectedKey).checked=!0,this.dialog.style.display="block"},at.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},at.prototype.getCurrentViewer=function(){return q.Viewers[this.selectedKey]},at.prototype.getSelectedKey_=function(){var t=this.dialog.querySelector("input[name=field]:checked");return t?t.id:null},at.prototype.onChange=function(t){this.onChangeCallbacks_.push(t)},at.prototype.fireOnChange_=function(t){for(var e=0;e.5&&(this.noSleepVideo.currentTime=Math.random())}.bind(this)))}return i(t,[{key:"enable",value:function(){o?(this.disable(),this.noSleepTimer=window.setInterval((function(){window.location.href="/",window.setTimeout(window.stop,0)}),15e3)):this.noSleepVideo.play()}},{key:"disable",value:function(){o?this.noSleepTimer&&(window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]),t}();t.exports=s},function(t,e,n){t.exports="data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="}])}))})))&<.__esModule&&Object.prototype.hasOwnProperty.call(lt,"default")?lt.default:lt,ht=1e3,ut=[0,0,.5,1],dt=[.5,0,.5,1],pt=window.requestAnimationFrame,ft=window.cancelAnimationFrame;function mt(t){Object.defineProperties(this,{hasPosition:{writable:!1,enumerable:!0,value:t.hasPosition},hasExternalDisplay:{writable:!1,enumerable:!0,value:t.hasExternalDisplay},canPresent:{writable:!1,enumerable:!0,value:t.canPresent},maxLayers:{writable:!1,enumerable:!0,value:t.maxLayers},hasOrientation:{enumerable:!0,get:function(){return T("VRDisplayCapabilities.prototype.hasOrientation","VRDisplay.prototype.getFrameData"),t.hasOrientation}}})}function gt(t){var e=!("wakelock"in(t=t||{}))||t.wakelock;this.isPolyfilled=!0,this.displayId=ht++,this.displayName="",this.depthNear=.01,this.depthFar=1e4,this.isPresenting=!1,Object.defineProperty(this,"isConnected",{get:function(){return T("VRDisplay.prototype.isConnected","VRDisplayCapabilities.prototype.hasExternalDisplay"),!1}}),this.capabilities=new mt({hasPosition:!1,hasOrientation:!1,hasExternalDisplay:!1,canPresent:!1,maxLayers:1}),this.stageParameters=null,this.waitingForPresent_=!1,this.layer_=null,this.originalParent_=null,this.fullscreenElement_=null,this.fullscreenWrapper_=null,this.fullscreenElementCachedStyle_=null,this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null,e&&_()&&(this.wakelock_=new ct)}gt.prototype.getFrameData=function(t){return M(t,this._getPose(),this)},gt.prototype.getPose=function(){return T("VRDisplay.prototype.getPose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.resetPose=function(){return T("VRDisplay.prototype.resetPose"),this._resetPose()},gt.prototype.getImmediatePose=function(){return T("VRDisplay.prototype.getImmediatePose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.requestAnimationFrame=function(t){return pt(t)},gt.prototype.cancelAnimationFrame=function(t){return ft(t)},gt.prototype.wrapForFullscreen=function(t){if(a())return t;if(!this.fullscreenWrapper_){this.fullscreenWrapper_=document.createElement("div");var e=["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important","left: 0 !important","right: 0 !important","border: 0","margin: 0","padding: 0","z-index: 999999 !important","position: fixed"];this.fullscreenWrapper_.setAttribute("style",e.join("; ")+";"),this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")}if(this.fullscreenElement_==t)return this.fullscreenWrapper_;if(this.fullscreenElement_&&(this.originalParent_?this.originalParent_.appendChild(this.fullscreenElement_):this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)),this.fullscreenElement_=t,this.originalParent_=t.parentElement,this.originalParent_||document.body.appendChild(t),!this.fullscreenWrapper_.parentElement){var n=this.fullscreenElement_.parentElement;n.insertBefore(this.fullscreenWrapper_,this.fullscreenElement_),n.removeChild(this.fullscreenElement_)}this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild),this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");var i=this;return function(){if(i.fullscreenElement_){var t=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0"];i.fullscreenElement_.setAttribute("style",t.join("; ")+";")}}(),this.fullscreenWrapper_},gt.prototype.removeFullscreenWrapper=function(){if(this.fullscreenElement_){var t=this.fullscreenElement_;this.fullscreenElementCachedStyle_?t.setAttribute("style",this.fullscreenElementCachedStyle_):t.removeAttribute("style"),this.fullscreenElement_=null,this.fullscreenElementCachedStyle_=null;var e=this.fullscreenWrapper_.parentElement;return this.fullscreenWrapper_.removeChild(t),this.originalParent_===e?e.insertBefore(t,this.fullscreenWrapper_):this.originalParent_&&this.originalParent_.appendChild(t),e.removeChild(this.fullscreenWrapper_),t}},gt.prototype.requestPresent=function(t){var e=this.isPresenting,n=this;return t instanceof Array||(T("VRDisplay.prototype.requestPresent with non-array argument","an array of VRLayers as the first argument"),t=[t]),new Promise((function(i,r){if(n.capabilities.canPresent)if(0==t.length||t.length>n.capabilities.maxLayers)r(new Error("Invalid number of layers."));else{var o=t[0];if(o.source){var s=o.leftBounds||ut,c=o.rightBounds||dt;if(e){var h=n.layer_;h.source!==o.source&&(h.source=o.source);for(var u=0;u<4;u++)h.leftBounds[u]=s[u],h.rightBounds[u]=c[u];return n.wrapForFullscreen(n.layer_.source),n.updatePresent_(),void i()}if(n.layer_={predistorted:o.predistorted,source:o.source,leftBounds:s.slice(0),rightBounds:c.slice(0)},n.waitingForPresent_=!1,n.layer_&&n.layer_.source){var d=n.wrapForFullscreen(n.layer_.source);n.addFullscreenListeners_(d,(function(){var t=document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;n.isPresenting=d===t,n.isPresenting?(screen.orientation&&screen.orientation.lock&&screen.orientation.lock("landscape-primary").catch((function(t){console.error("screen.orientation.lock() failed due to",t.message)})),n.waitingForPresent_=!1,n.beginPresent_(),i()):(screen.orientation&&screen.orientation.unlock&&screen.orientation.unlock(),n.removeFullscreenWrapper(),n.disableWakeLock(),n.endPresent_(),n.removeFullscreenListeners_()),n.fireVRDisplayPresentChange_()}),(function(){n.waitingForPresent_&&(n.removeFullscreenWrapper(),n.removeFullscreenListeners_(),n.disableWakeLock(),n.waitingForPresent_=!1,n.isPresenting=!1,r(new Error("Unable to present.")))})),function(t){if(l())return!1;if(t.requestFullscreen)t.requestFullscreen();else if(t.webkitRequestFullscreen)t.webkitRequestFullscreen();else if(t.mozRequestFullScreen)t.mozRequestFullScreen();else{if(!t.msRequestFullscreen)return!1;t.msRequestFullscreen()}return!0}(d)?(n.enableWakeLock(),n.waitingForPresent_=!0):(a()||l())&&(n.enableWakeLock(),n.isPresenting=!0,n.beginPresent_(),n.fireVRDisplayPresentChange_(),i())}n.waitingForPresent_||a()||(y(),r(new Error("Unable to present.")))}else i()}else r(new Error("VRDisplay is not capable of presenting."))}))},gt.prototype.exitPresent=function(){var t=this.isPresenting,e=this;return this.isPresenting=!1,this.layer_=null,this.disableWakeLock(),new Promise((function(n,i){t?(!y()&&a()&&(e.endPresent_(),e.fireVRDisplayPresentChange_()),l()&&(e.removeFullscreenWrapper(),e.removeFullscreenListeners_(),e.endPresent_(),e.fireVRDisplayPresentChange_()),n()):i(new Error("Was not presenting to VRDisplay."))}))},gt.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},gt.prototype.fireVRDisplayPresentChange_=function(){var t=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.fireVRDisplayConnect_=function(){var t=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.addFullscreenListeners_=function(t,e,n){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=t,this.fullscreenChangeHandler_=e,this.fullscreenErrorHandler_=n,e&&(document.fullscreenEnabled?t.addEventListener("fullscreenchange",e,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenchange",e,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",e,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenchange",e,!1)),n&&(document.fullscreenEnabled?t.addEventListener("fullscreenerror",n,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenerror",n,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",n,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenerror",n,!1))},gt.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var t=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var e=this.fullscreenChangeHandler_;t.removeEventListener("fullscreenchange",e,!1),t.removeEventListener("webkitfullscreenchange",e,!1),document.removeEventListener("mozfullscreenchange",e,!1),t.removeEventListener("msfullscreenchange",e,!1)}if(this.fullscreenErrorHandler_){var n=this.fullscreenErrorHandler_;t.removeEventListener("fullscreenerror",n,!1),t.removeEventListener("webkitfullscreenerror",n,!1),document.removeEventListener("mozfullscreenerror",n,!1),t.removeEventListener("msfullscreenerror",n,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},gt.prototype.enableWakeLock=function(){this.wakelock_&&this.wakelock_.enable()},gt.prototype.disableWakeLock=function(){this.wakelock_&&this.wakelock_.disable()},gt.prototype.beginPresent_=function(){},gt.prototype.endPresent_=function(){},gt.prototype.submitFrame=function(t){},gt.prototype.getEyeParameters=function(t){return null};var vt={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1},yt="left",At="right";function xt(t){var e=b({},vt);t=b(e,t||{}),gt.call(this,{wakelock:t.MOBILE_WAKE_LOCK}),this.config=t,this.displayName="Cardboard VRDisplay",this.capabilities=new mt({hasPosition:!1,hasOrientation:!0,hasExternalDisplay:!1,canPresent:!0,maxLayers:1}),this.stageParameters=null,this.bufferScale_=this.config.BUFFER_SCALE,this.poseSensor_=new ot(this.config),this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new Z(this.config.DPDB_URL,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new q(this.dpdb_.getDeviceParams(),t.ADDITIONAL_VIEWERS),this.viewerSelector_=new at(t.DEFAULT_VIEWER),this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),this.config.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new st),a()&&window.addEventListener("resize",this.onResize_.bind(this))}return xt.prototype=Object.create(gt.prototype),xt.prototype._getPose=function(){return{position:null,orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},xt.prototype._resetPose=function(){this.poseSensor_.resetPose&&this.poseSensor_.resetPose()},xt.prototype._getFieldOfView=function(t){var e;if(t==yt)e=this.deviceInfo_.getFieldOfViewLeftEye();else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=this.deviceInfo_.getFieldOfViewRightEye()}return e},xt.prototype._getEyeOffset=function(t){var e;if(t==yt)e=[.5*-this.deviceInfo_.viewer.interLensDistance,0,0];else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=[.5*this.deviceInfo_.viewer.interLensDistance,0,0]}return e},xt.prototype.getEyeParameters=function(t){var e=this._getEyeOffset(t),n=this._getFieldOfView(t),i={offset:e,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_};return Object.defineProperty(i,"fieldOfView",{enumerable:!0,get:function(){return T("VRFieldOfView","VRFrameData's projection matrices"),n}}),i},xt.prototype.onDeviceParamsUpdated_=function(t){this.config.DEBUG&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},xt.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},xt.prototype.beginPresent_=function(){var t=this.layer_.source.getContext("webgl");t||(t=this.layer_.source.getContext("experimental-webgl")),t||(t=this.layer_.source.getContext("webgl2")),t&&(this.layer_.predistorted?this.config.CARDBOARD_UI_DISABLED||(t.canvas.width=g()*this.bufferScale_,t.canvas.height=v()*this.bufferScale_,this.cardboardUI_=new N(t)):(this.config.CARDBOARD_UI_DISABLED||(this.cardboardUI_=new N(t)),this.distorter_=new P(t,this.cardboardUI_,this.config.BUFFER_SCALE,this.config.DIRTY_SUBMIT_FRAME_BINDINGS),this.distorter_.updateDeviceInfo(this.deviceInfo_)),this.cardboardUI_&&this.cardboardUI_.listen(function(t){this.viewerSelector_.show(this.layer_.source.parentElement),t.stopPropagation(),t.preventDefault()}.bind(this),function(t){this.exitPresent(),t.stopPropagation(),t.preventDefault()}.bind(this)),this.rotateInstructions_&&(m()&&_()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},xt.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},xt.prototype.updatePresent_=function(){this.endPresent_(),this.beginPresent_()},xt.prototype.submitFrame=function(t){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2"));var n=e.canvas;n.width==this.lastWidth&&n.height==this.lastHeight||this.cardboardUI_.onResize(),this.lastWidth=n.width,this.lastHeight=n.height,this.cardboardUI_.render()}},xt.prototype.onOrientationChange_=function(t){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},xt.prototype.onResize_=function(t){if(this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2")),e.canvas.setAttribute("style",["position: absolute","top: 0","left: 0","width: 100vw","height: 100vh","border: 0","margin: 0","padding: 0px","box-sizing: content-box"].join("; ")+";"),w(e.canvas)}},xt.prototype.onViewerChanged_=function(t){this.deviceInfo_.setViewer(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},xt.prototype.fireVRDisplayDeviceParamsChange_=function(){var t=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(t)},xt.VRFrameData=function(){this.leftProjectionMatrix=new Float32Array(16),this.leftViewMatrix=new Float32Array(16),this.rightProjectionMatrix=new Float32Array(16),this.rightViewMatrix=new Float32Array(16),this.pose=null},xt.VRDisplay=gt,xt}()})))&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,a={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",PROVIDE_MOBILE_VRDISPLAY:!0,MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1};function l(t){this.config=o(o({},a),t),this.polyfillDisplays=[],this.enabled=!1,this.hasNative="getVRDisplays"in navigator,this.native={},this.native.getVRDisplays=navigator.getVRDisplays,this.native.VRFrameData=window.VRFrameData,this.native.VRDisplay=window.VRDisplay,(!this.hasNative||this.config.PROVIDE_MOBILE_VRDISPLAY&&n())&&(this.enable(),this.getVRDisplays().then((function(t){t&&t[0]&&t[0].fireVRDisplayConnect_&&t[0].fireVRDisplayConnect_()})))}l.prototype.getPolyfillDisplays=function(){if(this._polyfillDisplaysPopulated)return this.polyfillDisplays;if(n()){var t=new s({ADDITIONAL_VIEWERS:this.config.ADDITIONAL_VIEWERS,DEFAULT_VIEWER:this.config.DEFAULT_VIEWER,MOBILE_WAKE_LOCK:this.config.MOBILE_WAKE_LOCK,DEBUG:this.config.DEBUG,DPDB_URL:this.config.DPDB_URL,CARDBOARD_UI_DISABLED:this.config.CARDBOARD_UI_DISABLED,K_FILTER:this.config.K_FILTER,PREDICTION_TIME_S:this.config.PREDICTION_TIME_S,ROTATE_INSTRUCTIONS_DISABLED:this.config.ROTATE_INSTRUCTIONS_DISABLED,YAW_ONLY:this.config.YAW_ONLY,BUFFER_SCALE:this.config.BUFFER_SCALE,DIRTY_SUBMIT_FRAME_BINDINGS:this.config.DIRTY_SUBMIT_FRAME_BINDINGS});this.polyfillDisplays.push(t)}return this._polyfillDisplaysPopulated=!0,this.polyfillDisplays},l.prototype.enable=function(){if(this.enabled=!0,this.hasNative&&this.native.VRFrameData){var t=this.native.VRFrameData,e=new this.native.VRFrameData,n=this.native.VRDisplay.prototype.getFrameData;window.VRDisplay.prototype.getFrameData=function(i){i instanceof t?n.call(this,i):(n.call(this,e),i.pose=e.pose,r(e.leftProjectionMatrix,i.leftProjectionMatrix),r(e.rightProjectionMatrix,i.rightProjectionMatrix),r(e.leftViewMatrix,i.leftViewMatrix),r(e.rightViewMatrix,i.rightViewMatrix))}}navigator.getVRDisplays=this.getVRDisplays.bind(this),window.VRDisplay=s.VRDisplay,window.VRFrameData=s.VRFrameData},l.prototype.getVRDisplays=function(){var t=this;return this.config,this.hasNative?this.native.getVRDisplays.call(navigator).then((function(e){return e.length>0?e:t.getPolyfillDisplays()})):Promise.resolve(this.getPolyfillDisplays())},l.version="0.10.12",l.VRFrameData=s.VRFrameData,l.VRDisplay=s.VRDisplay;var c=Object.freeze({default:l}),h=c&&l||c;return void 0!==e&&e.window&&(e.document||(e.document=e.window.document),e.navigator||(e.navigator=e.window.navigator)),h}()})));const h=0,u=1,d=2;function p(){}Object.assign(p.prototype,{addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)},hasEventListener:function(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)},removeEventListener:function(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}},dispatchEvent:function(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e>8&255]+f[t>>16&255]+f[t>>24&255]+"-"+f[255&e]+f[e>>8&255]+"-"+f[e>>16&15|64]+f[e>>24&255]+"-"+f[63&n|128]+f[n>>8&255]+"-"+f[n>>16&255]+f[n>>24&255]+f[255&i]+f[i>>8&255]+f[i>>16&255]+f[i>>24&255]).toUpperCase()},clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},damp:function(t,e,n,i){return g.lerp(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(g.euclideanModulo(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(m=t%2147483647),m=16807*m%2147483647,(m-1)/2147483646},degToRad:function(t){return t*g.DEG2RAD},radToDeg:function(t){return t*g.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,n,i,r){const o=Math.cos,s=Math.sin,a=o(n/2),l=s(n/2),c=o((e+i)/2),h=s((e+i)/2),u=o((e-i)/2),d=s((e-i)/2),p=o((i-e)/2),f=s((i-e)/2);switch(r){case"XYX":t.set(a*h,l*u,l*d,a*c);break;case"YZY":t.set(l*d,a*h,l*u,a*c);break;case"ZXZ":t.set(l*u,l*d,a*h,a*c);break;case"XZX":t.set(a*h,l*f,l*p,a*c);break;case"YXY":t.set(l*p,a*h,l*f,a*c);break;case"ZYZ":t.set(l*f,l*p,a*h,a*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}};class v{constructor(t=0,e=0){Object.defineProperty(this,"isVector2",{value:!0}),this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,o=this.y-t.y;return this.x=r*n-o*i+t.x,this.y=r*i+o*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}class y{constructor(){Object.defineProperty(this,"isMatrix3",{value:!0}),this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=s,c[3]=e,c[4]=r,c[5]=a,c[6]=n,c[7]=o,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}clone(){return(new this.constructor).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[3],a=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],A=i[7],x=i[2],_=i[5],b=i[8];return r[0]=o*f+s*v+a*x,r[3]=o*m+s*y+a*_,r[6]=o*g+s*A+a*b,r[1]=l*f+c*v+h*x,r[4]=l*m+c*y+h*_,r[7]=l*g+c*A+h*b,r[2]=u*f+d*v+p*x,r[5]=u*m+d*y+p*_,r[8]=u*g+d*A+p*b,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8];return e*o*c-e*s*l-n*r*c+n*s*a+i*r*l-i*o*a}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=c*o-s*l,u=s*a-c*r,d=l*r-o*a,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=h*f,t[1]=(i*l-c*n)*f,t[2]=(s*n-i*o)*f,t[3]=u*f,t[4]=(c*e-i*a)*f,t[5]=(i*r-s*e)*f,t[6]=d*f,t[7]=(n*a-l*e)*f,t[8]=(o*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).copy(this).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,o,s){const a=Math.cos(r),l=Math.sin(r);return this.set(n*a,n*l,-n*(a*o+l*s)+o+t,-i*l,i*a,-i*(-l*o+a*s)+s+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],o=i[3],s=i[6],a=i[1],l=i[4],c=i[7];return i[0]=e*r+n*a,i[3]=e*o+n*l,i[6]=e*s+n*c,i[1]=-n*r+e*a,i[4]=-n*o+e*l,i[7]=-n*s+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}}let A;const x={getDataURL:function(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===A&&(A=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),A.width=t.width,A.height=t.height;const n=A.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=A}return e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}};let _=0;function b(t=b.DEFAULT_IMAGE,e=b.DEFAULT_MAPPING,n=1001,i=1001,r=1006,o=1008,s=1023,a=1009,l=1,c=3e3){Object.defineProperty(this,"id",{value:_++}),this.uuid=g.generateUUID(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=a,this.offset=new v(0,0),this.repeat=new v(1,1),this.center=new v(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new y,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}function w(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?x.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}b.DEFAULT_IMAGE=void 0,b.DEFAULT_MAPPING=300,b.prototype=Object.assign(Object.create(p.prototype),{constructor:b,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=g.generateUUID()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case 1e3:t.x=t.x-Math.floor(t.x);break;case 1001:t.x=t.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case 1e3:t.y=t.y-Math.floor(t.y);break;case 1001:t.y=t.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(b.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}});class M{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isVector4",{value:!0}),this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*i+o[12]*r,this.y=o[1]*e+o[5]*n+o[9]*i+o[13]*r,this.z=o[2]*e+o[6]*n+o[10]*i+o[14]*r,this.w=o[3]*e+o[7]*n+o[11]*i+o[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const o=t.elements,s=o[0],a=o[4],l=o[8],c=o[1],h=o[5],u=o[9],d=o[2],p=o[6],f=o[10];if(Math.abs(a-c)<.01&&Math.abs(l-d)<.01&&Math.abs(u-p)<.01){if(Math.abs(a+c)<.1&&Math.abs(l+d)<.1&&Math.abs(u+p)<.1&&Math.abs(s+h+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const t=(s+1)/2,o=(h+1)/2,m=(f+1)/2,g=(a+c)/4,v=(l+d)/4,y=(u+p)/4;return t>o&&t>m?t<.01?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=g/n,r=v/n):o>m?o<.01?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(o),n=g/i,r=y/i):m<.01?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(m),n=v/r,i=y/r),this.set(n,i,r,e),this}let m=Math.sqrt((p-u)*(p-u)+(l-d)*(l-d)+(c-a)*(c-a));return Math.abs(m)<.001&&(m=1),this.x=(p-u)/m,this.y=(l-d)/m,this.z=(c-a)/m,this.w=Math.acos((s+h+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}}class E extends p{constructor(t,e,n){super(),Object.defineProperty(this,"isWebGLRenderTarget",{value:!0}),this.width=t,this.height=e,this.scissor=new M(0,0,t,e),this.scissorTest=!1,this.viewport=new M(0,0,t,e),n=n||{},this.texture=new b(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.image={},this.texture.image.width=t,this.texture.image.height=e,this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:1006,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setSize(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.texture.image.width=t,this.texture.image.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:"dispose"})}}class S{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isQuaternion",{value:!0}),this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return n.copy(t).slerp(e,i)}static slerpFlat(t,e,n,i,r,o,s){let a=n[i+0],l=n[i+1],c=n[i+2],h=n[i+3];const u=r[o+0],d=r[o+1],p=r[o+2],f=r[o+3];if(h!==f||a!==u||l!==d||c!==p){let t=1-s;const e=a*u+l*d+c*p+h*f,n=e>=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),o=Math.atan2(r,e*n);t=Math.sin(t*o)/r,s=Math.sin(s*o)/r}const r=s*n;if(a=a*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+f*r,t===1-s){const t=1/Math.sqrt(a*a+l*l+c*c+h*h);a*=t,l*=t,c*=t,h*=t}}t[e]=a,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,o){const s=n[i],a=n[i+1],l=n[i+2],c=n[i+3],h=r[o],u=r[o+1],d=r[o+2],p=r[o+3];return t[e]=s*p+c*h+a*d-l*u,t[e+1]=a*p+c*u+l*h-s*d,t[e+2]=l*p+c*d+s*u-a*h,t[e+3]=c*p-s*h-a*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,o=t._order,s=Math.cos,a=Math.sin,l=s(n/2),c=s(i/2),h=s(r/2),u=a(n/2),d=a(i/2),p=a(r/2);switch(o){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+o)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],o=e[1],s=e[5],a=e[9],l=e[2],c=e[6],h=e[10],u=n+s+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-a)*t,this._y=(r-l)*t,this._z=(o-i)*t}else if(n>s&&n>h){const t=2*Math.sqrt(1+n-s-h);this._w=(c-a)/t,this._x=.25*t,this._y=(i+o)/t,this._z=(r+l)/t}else if(s>h){const t=2*Math.sqrt(1+s-n-h);this._w=(r-l)/t,this._x=(i+o)/t,this._y=.25*t,this._z=(a+c)/t}else{const t=2*Math.sqrt(1+h-n-s);this._w=(o-i)/t,this._x=(r+l)/t,this._y=(a+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-6?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(g.clamp(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,o=t._w,s=e._x,a=e._y,l=e._z,c=e._w;return this._x=n*c+o*s+i*l-r*a,this._y=i*c+o*a+r*s-n*l,this._z=r*c+o*l+n*a-i*s,this._w=o*c-n*s-i*a-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,o=this._w;let s=o*t._w+n*t._x+i*t._y+r*t._z;if(s<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,s=-s):this.copy(t),s>=1)return this._w=o,this._x=n,this._y=i,this._z=r,this;const a=1-s*s;if(a<=Number.EPSILON){const t=1-e;return this._w=t*o+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(a),c=Math.atan2(l,s),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=o*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}class T{constructor(t=0,e=0,n=0){Object.defineProperty(this,"isVector3",{value:!0}),this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(R.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(R.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,o=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*o,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*o,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*o,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,o=t.y,s=t.z,a=t.w,l=a*e+o*i-s*n,c=a*n+s*e-r*i,h=a*i+r*n-o*e,u=-r*e-o*n-s*i;return this.x=l*a+u*-r+c*-s-h*-o,this.y=c*a+u*-o+h*-r-l*-s,this.z=h*a+u*-s+l*-o-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,o=e.x,s=e.y,a=e.z;return this.x=i*a-r*s,this.y=r*o-n*a,this.z=n*s-i*o,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return L.copy(this).projectOnVector(t),this.sub(L)}reflect(t){return this.sub(L.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(g.clamp(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}const L=new T,R=new S;class C{constructor(t,e){Object.defineProperty(this,"isBox3",{value:!0}),this.min=void 0!==t?t:new T(1/0,1/0,1/0),this.max=void 0!==e?e:new T(-1/0,-1/0,-1/0)}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.length;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.count;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new T),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,I),I.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(G),V.subVectors(this.max,G),N.subVectors(t.a,G),B.subVectors(t.b,G),F.subVectors(t.c,G),z.subVectors(B,N),U.subVectors(F,B),H.subVectors(N,F);let e=[0,-z.z,z.y,0,-U.z,U.y,0,-H.z,H.y,z.z,0,-z.x,U.z,0,-U.x,H.z,0,-H.x,-z.y,z.x,0,-U.y,U.x,0,-H.y,H.x,0];return!!P(e,N,B,F,V)&&(e=[1,0,0,0,1,0,0,0,1],!!P(e,N,B,F,V)&&(k.crossVectors(z,U),e=[k.x,k.y,k.z],P(e,N,B,F,V)))}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new T),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return I.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(I).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(D[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),D[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),D[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),D[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),D[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),D[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),D[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),D[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(D)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}function P(t,e,n,i,r){for(let o=0,s=t.length-3;o<=s;o+=3){W.fromArray(t,o);const s=r.x*Math.abs(W.x)+r.y*Math.abs(W.y)+r.z*Math.abs(W.z),a=e.dot(W),l=n.dot(W),c=i.dot(W);if(Math.max(-Math.max(a,l,c),Math.min(a,l,c))>s)return!1}return!0}const D=[new T,new T,new T,new T,new T,new T,new T,new T],I=new T,O=new C,N=new T,B=new T,F=new T,z=new T,U=new T,H=new T,G=new T,V=new T,k=new T,W=new T,j=new C;class X{constructor(t,e){this.center=void 0!==t?t:new T,this.radius=void 0!==e?e:-1}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):j.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new C),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}}const q=new T,Y=new T,Q=new T,Z=new T,J=new T,K=new T,$=new T;class tt{constructor(t,e){this.origin=void 0!==t?t:new T,this.direction=void 0!==e?e:new T(0,0,-1)}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new T),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,q)),this}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new T),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=q.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(q.copy(this.direction).multiplyScalar(e).add(this.origin),q.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Y.copy(t).add(e).multiplyScalar(.5),Q.copy(e).sub(t).normalize(),Z.copy(this.origin).sub(Y);const r=.5*t.distanceTo(e),o=-this.direction.dot(Q),s=Z.dot(this.direction),a=-Z.dot(Q),l=Z.lengthSq(),c=Math.abs(1-o*o);let h,u,d,p;if(c>0)if(h=o*a-s,u=o*s-a,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+o*u+2*s)+u*(o*h+u+2*a)+l}else u=r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u=-r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u<=-p?(h=Math.max(0,-(-o*r+s)),u=h>0?-r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-a),r),d=u*(u+2*a)+l):(h=Math.max(0,-(o*r+s)),u=h>0?r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l);else u=o>0?-r:r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(Q).multiplyScalar(u).add(Y),d}intersectSphere(t,e){q.subVectors(t.center,this.origin);const n=q.dot(this.direction),i=q.dot(q)-n*n,r=t.radius*t.radius;if(i>r)return null;const o=Math.sqrt(r-i),s=n-o,a=n+o;return s<0&&a<0?null:s<0?this.at(a,e):this.at(s,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,o,s,a;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,o=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,o=(t.min.y-u.y)*c),n>o||r>i?null:((r>n||n!=n)&&(n=r),(o=0?(s=(t.min.z-u.z)*h,a=(t.max.z-u.z)*h):(s=(t.max.z-u.z)*h,a=(t.min.z-u.z)*h),n>a||s>i?null:((s>n||n!=n)&&(n=s),(a=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,q)}intersectTriangle(t,e,n,i,r){J.subVectors(e,t),K.subVectors(n,t),$.crossVectors(J,K);let o,s=this.direction.dot($);if(s>0){if(i)return null;o=1}else{if(!(s<0))return null;o=-1,s=-s}Z.subVectors(this.origin,t);const a=o*this.direction.dot(K.crossVectors(Z,K));if(a<0)return null;const l=o*this.direction.dot(J.cross(Z));if(l<0)return null;if(a+l>s)return null;const c=-o*Z.dot($);return c<0?null:this.at(c/s,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}class et{constructor(){Object.defineProperty(this,"isMatrix4",{value:!0}),this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l,c,h,u,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=o,g[9]=s,g[13]=a,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new et).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/nt.setFromMatrixColumn(t,0).length(),r=1/nt.setFromMatrixColumn(t,1).length(),o=1/nt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*o,e[9]=n[9]*o,e[10]=n[10]*o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,o=Math.cos(n),s=Math.sin(n),a=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=-a*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-s*a,e[2]=r-t*l,e[6]=i+n*l,e[10]=o*a}else if("YXZ"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t+r*s,e[4]=i*s-n,e[8]=o*l,e[1]=o*h,e[5]=o*c,e[9]=-s,e[2]=n*s-i,e[6]=r+t*s,e[10]=o*a}else if("ZXY"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t-r*s,e[4]=-o*h,e[8]=i+n*s,e[1]=n+i*s,e[5]=o*c,e[9]=r-t*s,e[2]=-o*l,e[6]=s,e[10]=o*a}else if("ZYX"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=a*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=s*a,e[10]=o*a}else if("YZX"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=o*c,e[9]=-s*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=o*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=s*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(rt,t,ot)}lookAt(t,e,n){const i=this.elements;return lt.subVectors(t,e),0===lt.lengthSq()&&(lt.z=1),lt.normalize(),st.crossVectors(n,lt),0===st.lengthSq()&&(1===Math.abs(n.z)?lt.x+=1e-4:lt.z+=1e-4,lt.normalize(),st.crossVectors(n,lt)),st.normalize(),at.crossVectors(lt,st),i[0]=st.x,i[4]=at.x,i[8]=lt.x,i[1]=st.y,i[5]=at.y,i[9]=lt.y,i[2]=st.z,i[6]=at.z,i[10]=lt.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[4],a=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],A=n[11],x=n[15],_=i[0],b=i[4],w=i[8],M=i[12],E=i[1],S=i[5],T=i[9],L=i[13],R=i[2],C=i[6],P=i[10],D=i[14],I=i[3],O=i[7],N=i[11],B=i[15];return r[0]=o*_+s*E+a*R+l*I,r[4]=o*b+s*S+a*C+l*O,r[8]=o*w+s*T+a*P+l*N,r[12]=o*M+s*L+a*D+l*B,r[1]=c*_+h*E+u*R+d*I,r[5]=c*b+h*S+u*C+d*O,r[9]=c*w+h*T+u*P+d*N,r[13]=c*M+h*L+u*D+d*B,r[2]=p*_+f*E+m*R+g*I,r[6]=p*b+f*S+m*C+g*O,r[10]=p*w+f*T+m*P+g*N,r[14]=p*M+f*L+m*D+g*B,r[3]=v*_+y*E+A*R+x*I,r[7]=v*b+y*S+A*C+x*O,r[11]=v*w+y*T+A*P+x*N,r[15]=v*M+y*L+A*D+x*B,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],o=t[1],s=t[5],a=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*a*h-i*l*h-r*s*u+n*l*u+i*s*d-n*a*d)+t[7]*(+e*a*d-e*l*u+r*o*u-i*o*d+i*l*c-r*a*c)+t[11]*(+e*l*h-e*s*d-r*o*h+n*o*d+r*s*c-n*l*c)+t[15]*(-i*s*c-e*a*h+e*s*u+i*o*h-n*o*u+n*a*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=h*m*l-f*u*l+f*a*d-s*m*d-h*a*g+s*u*g,y=p*u*l-c*m*l-p*a*d+o*m*d+c*a*g-o*u*g,A=c*f*l-p*h*l+p*s*d-o*f*d-c*s*g+o*h*g,x=p*h*a-c*f*a-p*s*u+o*f*u+c*s*m-o*h*m,_=e*v+n*y+i*A+r*x;if(0===_)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const b=1/_;return t[0]=v*b,t[1]=(f*u*r-h*m*r-f*i*d+n*m*d+h*i*g-n*u*g)*b,t[2]=(s*m*r-f*a*r+f*i*l-n*m*l-s*i*g+n*a*g)*b,t[3]=(h*a*r-s*u*r-h*i*l+n*u*l+s*i*d-n*a*d)*b,t[4]=y*b,t[5]=(c*m*r-p*u*r+p*i*d-e*m*d-c*i*g+e*u*g)*b,t[6]=(p*a*r-o*m*r-p*i*l+e*m*l+o*i*g-e*a*g)*b,t[7]=(o*u*r-c*a*r+c*i*l-e*u*l-o*i*d+e*a*d)*b,t[8]=A*b,t[9]=(p*h*r-c*f*r-p*n*d+e*f*d+c*n*g-e*h*g)*b,t[10]=(o*f*r-p*s*r+p*n*l-e*f*l-o*n*g+e*s*g)*b,t[11]=(c*s*r-o*h*r-c*n*l+e*h*l+o*n*d-e*s*d)*b,t[12]=x*b,t[13]=(c*f*i-p*h*i+p*n*u-e*f*u-c*n*m+e*h*m)*b,t[14]=(p*s*i-o*f*i-p*n*a+e*f*a+o*n*m-e*s*m)*b,t[15]=(o*h*i-c*s*i+c*n*a-e*h*a-o*n*u+e*s*u)*b,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,o=t.x,s=t.y,a=t.z,l=r*o,c=r*s;return this.set(l*o+n,l*s-i*a,l*a+i*s,0,l*s+i*a,c*s+n,c*a-i*o,0,l*a-i*s,c*a+i*o,r*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n){return this.set(1,e,n,0,t,1,n,0,t,e,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,o=e._y,s=e._z,a=e._w,l=r+r,c=o+o,h=s+s,u=r*l,d=r*c,p=r*h,f=o*c,m=o*h,g=s*h,v=a*l,y=a*c,A=a*h,x=n.x,_=n.y,b=n.z;return i[0]=(1-(f+g))*x,i[1]=(d+A)*x,i[2]=(p-y)*x,i[3]=0,i[4]=(d-A)*_,i[5]=(1-(u+g))*_,i[6]=(m+v)*_,i[7]=0,i[8]=(p+y)*b,i[9]=(m-v)*b,i[10]=(1-(u+f))*b,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=nt.set(i[0],i[1],i[2]).length();const o=nt.set(i[4],i[5],i[6]).length(),s=nt.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],it.copy(this);const a=1/r,l=1/o,c=1/s;return it.elements[0]*=a,it.elements[1]*=a,it.elements[2]*=a,it.elements[4]*=l,it.elements[5]*=l,it.elements[6]*=l,it.elements[8]*=c,it.elements[9]*=c,it.elements[10]*=c,e.setFromRotationMatrix(it),n.x=r,n.y=o,n.z=s,this}makePerspective(t,e,n,i,r,o){void 0===o&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const s=this.elements,a=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(o+r)/(o-r),d=-2*o*r/(o-r);return s[0]=a,s[4]=0,s[8]=c,s[12]=0,s[1]=0,s[5]=l,s[9]=h,s[13]=0,s[2]=0,s[6]=0,s[10]=u,s[14]=d,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(t,e,n,i,r,o){const s=this.elements,a=1/(e-t),l=1/(n-i),c=1/(o-r),h=(e+t)*a,u=(n+i)*l,d=(o+r)*c;return s[0]=2*a,s[4]=0,s[8]=0,s[12]=-h,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-u,s[2]=0,s[6]=0,s[10]=-2*c,s[14]=-d,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const nt=new T,it=new et,rt=new T(0,0,0),ot=new T(1,1,1),st=new T,at=new T,lt=new T;class ct{constructor(t=0,e=0,n=0,i=ct.DefaultOrder){Object.defineProperty(this,"isEuler",{value:!0}),this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=g.clamp,r=t.elements,o=r[0],s=r[4],a=r[8],l=r[1],c=r[5],h=r[9],u=r[2],d=r[6],p=r[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(i(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-s,o)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-i(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(a,p),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-u,o),this._z=0);break;case"ZXY":this._x=Math.asin(i(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-s,c)):(this._y=0,this._z=Math.atan2(l,o));break;case"ZYX":this._y=Math.asin(-i(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(l,o)):(this._x=0,this._z=Math.atan2(-s,c));break;case"YZX":this._z=Math.asin(i(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-u,o)):(this._x=0,this._y=Math.atan2(a,p));break;case"XZY":this._z=Math.asin(-i(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,o)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return ht.makeRotationFromQuaternion(t),this.setFromRotationMatrix(ht,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return ut.setFromEuler(this),this.setFromQuaternion(ut,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new T(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}ct.DefaultOrder="XYZ",ct.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];const ht=new et,ut=new S;class dt{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),s.length>0&&(n.images=s),a.length>0&&(n.shapes=a),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function o(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e1?void 0:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new T),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Rt.getNormalMatrix(t),i=this.coplanarPoint(Tt).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}const Pt=new T,Dt=new T,It=new T,Ot=new T,Nt=new T,Bt=new T,Ft=new T,zt=new T,Ut=new T,Ht=new T;class Gt{constructor(t,e,n){this.a=void 0!==t?t:new T,this.b=void 0!==e?e:new T,this.c=void 0!==n?n:new T}static getNormal(t,e,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new T),i.subVectors(n,e),Pt.subVectors(t,e),i.cross(Pt);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){Pt.subVectors(i,e),Dt.subVectors(n,e),It.subVectors(t,e);const o=Pt.dot(Pt),s=Pt.dot(Dt),a=Pt.dot(It),l=Dt.dot(Dt),c=Dt.dot(It),h=o*l-s*s;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new T),0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*a-s*c)*u,p=(o*c-s*a)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Ot),Ot.x>=0&&Ot.y>=0&&Ot.x+Ot.y<=1}static getUV(t,e,n,i,r,o,s,a){return this.getBarycoord(t,e,n,i,Ot),a.set(0,0),a.addScaledVector(r,Ot.x),a.addScaledVector(o,Ot.y),a.addScaledVector(s,Ot.z),a}static isFrontFacing(t,e,n,i){return Pt.subVectors(n,e),Dt.subVectors(t,e),Pt.cross(Dt).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Pt.subVectors(this.c,this.b),Dt.subVectors(this.a,this.b),.5*Pt.cross(Dt).length()}getMidpoint(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new T),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Gt.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Ct),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Gt.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return Gt.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return Gt.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Gt.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new T);const n=this.a,i=this.b,r=this.c;let o,s;Nt.subVectors(i,n),Bt.subVectors(r,n),zt.subVectors(t,n);const a=Nt.dot(zt),l=Bt.dot(zt);if(a<=0&&l<=0)return e.copy(n);Ut.subVectors(t,i);const c=Nt.dot(Ut),h=Bt.dot(Ut);if(c>=0&&h<=c)return e.copy(i);const u=a*h-c*l;if(u<=0&&a>=0&&c<=0)return o=a/(a-c),e.copy(n).addScaledVector(Nt,o);Ht.subVectors(t,r);const d=Nt.dot(Ht),p=Bt.dot(Ht);if(p>=0&&d<=p)return e.copy(r);const f=d*l-a*p;if(f<=0&&l>=0&&p<=0)return s=l/(l-p),e.copy(n).addScaledVector(Bt,s);const m=c*p-d*h;if(m<=0&&h-c>=0&&d-p>=0)return Ft.subVectors(r,i),s=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(Ft,s);const g=1/(m+f+u);return o=f*g,s=u*g,e.copy(n).addScaledVector(Nt,o).addScaledVector(Bt,s)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const Vt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},kt={h:0,s:0,l:0},Wt={h:0,s:0,l:0};function jt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Xt(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function qt(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Yt{constructor(t,e,n){return Object.defineProperty(this,"isColor",{value:!0}),void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=g.euclideanModulo(t,1),e=g.clamp(e,0,1),n=g.clamp(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=jt(r,i,t+1/3),this.g=jt(r,i,t),this.b=jt(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=Vt[t];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Xt(t.r),this.g=Xt(t.g),this.b=Xt(t.b),this}copyLinearToSRGB(t){return this.r=qt(t.r),this.g=qt(t.g),this.b=qt(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),o=Math.min(e,n,i);let s,a;const l=(o+r)/2;if(o===r)s=0,a=0;else{const t=r-o;switch(a=l<=.5?t/(r+o):t/(2-r-o),r){case e:s=(n-i)/t+(n0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(Jt.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Kt.prototype=Object.create(Jt.prototype),Kt.prototype.constructor=Kt,Kt.prototype.isMeshBasicMaterial=!0,Kt.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this};const $t=new T,te=new v;function ee(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}function ne(t,e,n){ee.call(this,new Int8Array(t),e,n)}function ie(t,e,n){ee.call(this,new Uint8Array(t),e,n)}function re(t,e,n){ee.call(this,new Uint8ClampedArray(t),e,n)}function oe(t,e,n){ee.call(this,new Int16Array(t),e,n)}function se(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function ae(t,e,n){ee.call(this,new Int32Array(t),e,n)}function le(t,e,n){ee.call(this,new Uint32Array(t),e,n)}function ce(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function he(t,e,n){ee.call(this,new Float32Array(t),e,n)}function ue(t,e,n){ee.call(this,new Float64Array(t),e,n)}function de(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;ne&&(e=t[n]);return e}Object.defineProperty(ee.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(ee.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i65535?le:se)(t,1):this.index=t,this},getAttribute:function(t){return this.attributes[t]},setAttribute:function(t,e){return this.attributes[t]=e,this},deleteAttribute:function(t){return delete this.attributes[t],this},hasAttribute:function(t){return void 0!==this.attributes[t]},addGroup:function(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix4:function(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new y).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(t){return ge.makeRotationX(t),this.applyMatrix4(ge),this},rotateY:function(t){return ge.makeRotationY(t),this.applyMatrix4(ge),this},rotateZ:function(t){return ge.makeRotationZ(t),this.applyMatrix4(ge),this},translate:function(t,e,n){return ge.makeTranslation(t,e,n),this.applyMatrix4(ge),this},scale:function(t,e,n){return ge.makeScale(t,e,n),this.applyMatrix4(ge),this},lookAt:function(t){return ve.lookAt(t),ve.updateMatrix(),this.applyMatrix4(ve.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(ye).negate(),this.translate(ye.x,ye.y,ye.z),this},setFromPoints:function(t){const e=[];for(let n=0,i=t.length;n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e],r=i.toJSON(t.data);""!==i.name&&(r.name=i.name),t.data.attributes[e]=r}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],o=[];for(let e=0,i=n.length;e0&&(i[e]=o,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const o=this.groups;o.length>0&&(t.data.groups=JSON.parse(JSON.stringify(o)));const s=this.boundingSphere;return null!==s&&(t.data.boundingSphere={center:s.center.toArray(),radius:s.radius}),t},clone:function(){return(new be).copy(this)},copy:function(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;tn.far?null:{distance:c,point:Ue.clone(),object:t}}(t,e,n,i,Se,Te,Le,ze);if(p){a&&(Ne.fromBufferAttribute(a,c),Be.fromBufferAttribute(a,h),Fe.fromBufferAttribute(a,u),p.uv=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v)),l&&(Ne.fromBufferAttribute(l,c),Be.fromBufferAttribute(l,h),Fe.fromBufferAttribute(l,u),p.uv2=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v));const t=new Qt(c,h,u);Gt.getNormal(Se,Te,Le,t.normal),p.face=t}return p}He.prototype=Object.assign(Object.create(St.prototype),{constructor:He,isMesh:!0,copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),Ee.copy(n.boundingSphere),Ee.applyMatrix4(r),!1===t.ray.intersectsSphere(Ee))return;if(we.copy(r).invert(),Me.copy(t.ray).applyMatrix4(we),null!==n.boundingBox&&!1===Me.intersectsBox(n.boundingBox))return;let o;if(n.isBufferGeometry){const r=n.index,s=n.attributes.position,a=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;n0?1:-1,c.push(L.x,L.y,L.z),h.push(a/m),h.push(1-o/g),E+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e},qe.prototype=Object.assign(Object.create(St.prototype),{constructor:qe,isCamera:!0,copy:function(t,e){return St.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this},getWorldDirection:function(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new T),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(t){St.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()},updateWorldMatrix:function(t,e){St.prototype.updateWorldMatrix.call(this,t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()},clone:function(){return(new this.constructor).copy(this)}}),Ye.prototype=Object.assign(Object.create(qe.prototype),{constructor:Ye,isPerspectiveCamera:!0,copy:function(t,e){return qe.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){const e=.5*this.getFilmHeight()/t;this.fov=2*g.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){const t=Math.tan(.5*g.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*g.RAD2DEG*Math.atan(Math.tan(.5*g.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(t,e,n,i,r,o){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){const t=this.near;let e=t*Math.tan(.5*g.DEG2RAD*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const o=this.view;if(null!==this.view&&this.view.enabled){const t=o.fullWidth,s=o.fullHeight;r+=o.offsetX*i/t,e-=o.offsetY*n/s,i*=o.width/t,n*=o.height/s}const s=this.filmOffset;0!==s&&(r+=t*s/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()},toJSON:function(t){const e=St.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}});function Qe(t,e,n){if(St.call(this),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new Ye(90,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new T(1,0,0)),this.add(i);const r=new Ye(90,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new T(-1,0,0)),this.add(r);const o=new Ye(90,1,t,e);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(new T(0,1,0)),this.add(o);const s=new Ye(90,1,t,e);s.layers=this.layers,s.up.set(0,0,-1),s.lookAt(new T(0,-1,0)),this.add(s);const a=new Ye(90,1,t,e);a.layers=this.layers,a.up.set(0,-1,0),a.lookAt(new T(0,0,1)),this.add(a);const l=new Ye(90,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new T(0,0,-1)),this.add(l),this.update=function(t,e){null===this.parent&&this.updateMatrixWorld();const c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,o),t.setRenderTarget(n,3),t.render(e,s),t.setRenderTarget(n,4),t.render(e,a),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}function Ze(t,e,n,i,r,o,s,a,l,c){t=void 0!==t?t:[],e=void 0!==e?e:301,s=void 0!==s?s:1022,b.call(this,t,e,n,i,r,o,s,a,l,c),this.flipY=!1,this._needsFlipEnvMap=!0}Qe.prototype=Object.create(St.prototype),Qe.prototype.constructor=Qe,Ze.prototype=Object.create(b.prototype),Ze.prototype.constructor=Ze,Ze.prototype.isCubeTexture=!0,Object.defineProperty(Ze.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}});class Je extends E{constructor(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),super(t,t,e),Object.defineProperty(this,"isWebGLCubeRenderTarget",{value:!0}),e=e||{},this.texture=new Ze(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=1023,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new Ve(5,5,5),r=new Xe({name:"CubemapFromEquirect",uniforms:ke(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const o=new He(i,r),s=e.minFilter;1008===e.minFilter&&(e.minFilter=1006);return new Qe(1,10,this).update(t,o),e.minFilter=s,o.geometry.dispose(),o.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}function Ke(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==l?l:1003,this.minFilter=void 0!==c?c:1003,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}Ke.prototype=Object.create(b.prototype),Ke.prototype.constructor=Ke,Ke.prototype.isDataTexture=!0;const $e=new X,tn=new T;class en{constructor(t,e,n,i,r,o){this.planes=[void 0!==t?t:new Ct,void 0!==e?e:new Ct,void 0!==n?n:new Ct,void 0!==i?i:new Ct,void 0!==r?r:new Ct,void 0!==o?o:new Ct]}set(t,e,n,i,r,o){const s=this.planes;return s[0].copy(t),s[1].copy(e),s[2].copy(n),s[3].copy(i),s[4].copy(r),s[5].copy(o),this}clone(){return(new this.constructor).copy(this)}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],o=n[2],s=n[3],a=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(s-i,h-a,f-u,y-m).normalize(),e[1].setComponents(s+i,h+a,f+u,y+m).normalize(),e[2].setComponents(s+r,h+l,f+d,y+g).normalize(),e[3].setComponents(s-r,h-l,f-d,y-g).normalize(),e[4].setComponents(s-o,h-c,f-p,y-v).normalize(),e[5].setComponents(s+o,h+c,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),$e.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSprite(t){return $e.center.set(0,0,0),$e.radius=.7071067811865476,$e.applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,tn.y=i.normal.y>0?t.max.y:t.min.y,tn.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(tn)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}}function nn(){let t=null,e=!1,n=null,i=null;function r(e,o){n(e,o),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function rn(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},an={common:{diffuse:{value:new Yt(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new y},uv2Transform:{value:new y},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new v(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Yt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Yt(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}},sprite:{diffuse:{value:new Yt(15658734)},opacity:{value:1},center:{value:new v(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}}},ln={basic:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.fog]),vertexShader:sn.meshbasic_vert,fragmentShader:sn.meshbasic_frag},lambert:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshlambert_vert,fragmentShader:sn.meshlambert_frag},phong:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.fog,an.lights,{emissive:{value:new Yt(0)},specular:{value:new Yt(1118481)},shininess:{value:30}}]),vertexShader:sn.meshphong_vert,fragmentShader:sn.meshphong_frag},standard:{uniforms:We([an.common,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.roughnessmap,an.metalnessmap,an.fog,an.lights,{emissive:{value:new Yt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:sn.meshphysical_vert,fragmentShader:sn.meshphysical_frag},toon:{uniforms:We([an.common,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.gradientmap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshtoon_vert,fragmentShader:sn.meshtoon_frag},matcap:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,an.fog,{matcap:{value:null}}]),vertexShader:sn.meshmatcap_vert,fragmentShader:sn.meshmatcap_frag},points:{uniforms:We([an.points,an.fog]),vertexShader:sn.points_vert,fragmentShader:sn.points_frag},dashed:{uniforms:We([an.common,an.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:sn.linedashed_vert,fragmentShader:sn.linedashed_frag},depth:{uniforms:We([an.common,an.displacementmap]),vertexShader:sn.depth_vert,fragmentShader:sn.depth_frag},normal:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,{opacity:{value:1}}]),vertexShader:sn.normal_vert,fragmentShader:sn.normal_frag},sprite:{uniforms:We([an.sprite,an.fog]),vertexShader:sn.sprite_vert,fragmentShader:sn.sprite_frag},background:{uniforms:{uvTransform:{value:new y},t2D:{value:null}},vertexShader:sn.background_vert,fragmentShader:sn.background_frag},cube:{uniforms:We([an.envmap,{opacity:{value:1}}]),vertexShader:sn.cube_vert,fragmentShader:sn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:sn.equirect_vert,fragmentShader:sn.equirect_frag},distanceRGBA:{uniforms:We([an.common,an.displacementmap,{referencePosition:{value:new T},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:sn.distanceRGBA_vert,fragmentShader:sn.distanceRGBA_frag},shadow:{uniforms:We([an.lights,an.fog,{color:{value:new Yt(0)},opacity:{value:1}}]),vertexShader:sn.shadow_vert,fragmentShader:sn.shadow_frag}};function cn(t,e,n,i,r){const o=new Yt(0);let s,a,l=0,c=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return o},setClearColor:function(t,e=1){o.set(t),l=e,d(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(o,l)},render:function(n,r,p,f){let m=!0===r.isScene?r.background:null;m&&m.isTexture&&(m=e.get(m));const g=t.xr,v=g.getSession&&g.getSession();v&&"additive"===v.environmentBlendMode&&(m=null),null===m?d(o,l):m&&m.isColor&&(d(m,1),f=!0),(t.autoClear||f)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),m&&(m.isCubeTexture||m.isWebGLCubeRenderTarget||306===m.mapping)?(void 0===a&&(a=new He(new Ve(1,1,1),new Xe({name:"BackgroundCubeMaterial",uniforms:ke(ln.cube.uniforms),vertexShader:ln.cube.vertexShader,fragmentShader:ln.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),a.geometry.deleteAttribute("uv"),a.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(a.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(a)),m.isWebGLCubeRenderTarget&&(m=m.texture),a.material.uniforms.envMap.value=m,a.material.uniforms.flipEnvMap.value=m.isCubeTexture&&m._needsFlipEnvMap?-1:1,c===m&&h===m.version&&u===t.toneMapping||(a.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null)):m&&m.isTexture&&(void 0===s&&(s=new He(new on(2,2),new Xe({name:"BackgroundMaterial",uniforms:ke(ln.background.uniforms),vertexShader:ln.background.vertexShader,fragmentShader:ln.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),s.geometry.deleteAttribute("normal"),Object.defineProperty(s.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(s)),s.material.uniforms.t2D.value=m,!0===m.matrixAutoUpdate&&m.updateMatrix(),s.material.uniforms.uvTransform.value.copy(m.matrix),c===m&&h===m.version&&u===t.toneMapping||(s.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(s,s.geometry,s.material,0,0,null))}}}function hn(t,e,n,i){const r=t.getParameter(34921),o=i.isWebGL2?null:e.get("OES_vertex_array_object"),s=i.isWebGL2||null!==o,a={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):o.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):o.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){const o=l[e];if(void 0!==o){const e=o.normalized,r=o.itemSize,s=n.get(o);if(void 0===s)continue;const l=s.buffer,c=s.type,h=s.bytesPerElement;if(o.isInterleavedBufferAttribute){const n=o.data,s=n.stride,u=o.offset;n&&n.isInstancedInterleavedBuffer?(m(i,n.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=n.meshPerAttribute*n.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,s*h,u*h)}else o.isInstancedBufferAttribute?(m(i,o.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=o.meshPerAttribute*o.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if("instanceMatrix"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i+0,1),m(i+1,1),m(i+2,1),m(i+3,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i+0,4,s,!1,64,0),t.vertexAttribPointer(i+1,4,s,!1,64,16),t.vertexAttribPointer(i+2,4,s,!1,64,32),t.vertexAttribPointer(i+3,4,s,!1,64,48)}else if("instanceColor"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i,3,s,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,u,y),null!==A&&t.bindBuffer(34963,n.get(A).buffer))},reset:y,resetDefaultState:A,dispose:function(){y();for(const t in a){const e=a[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t]}},releaseStatesOfGeometry:function(t){if(void 0===a[t.id])return;const e=a[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t.id]},releaseStatesOfProgram:function(t){for(const e in a){const n=a[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:g}}function un(t,e,n,i){const r=i.isWebGL2;let o;this.setMode=function(t){o=t},this.render=function(e,i){t.drawArrays(o,e,i),n.update(i,o,1)},this.renderInstances=function(i,s,a){if(0===a)return;let l,c;if(r)l=t,c="drawArraysInstanced";else if(l=e.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===l)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");l[c](o,i,s,a),n.update(s,o,a)}}function dn(t,e,n){let i;function r(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const o="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let s=void 0!==n.precision?n.precision:"highp";const a=r(s);a!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",a,"instead."),s=a);const l=!0===n.logarithmicDepthBuffer,c=t.getParameter(34930),h=t.getParameter(35660),u=t.getParameter(3379),d=t.getParameter(34076),p=t.getParameter(34921),f=t.getParameter(36347),m=t.getParameter(36348),g=t.getParameter(36349),v=h>0,y=o||!!e.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:function(){if(void 0!==i)return i;const n=e.get("EXT_texture_filter_anisotropic");return i=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,i},getMaxPrecision:r,precision:s,logarithmicDepthBuffer:l,maxTextures:c,maxVertexTextures:h,maxTextureSize:u,maxCubemapSize:d,maxAttributes:p,maxVertexUniforms:f,maxVaryings:m,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:o?t.getParameter(36183):0}}function pn(t){const e=this;let n=null,i=0,r=!1,o=!1;const s=new Ct,a=new y,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const o=null!==t?t.length:0;let c=null;if(0!==o){if(c=l.value,!0!==r||null===c){const e=i+4*o,r=n.matrixWorldInverse;a.getNormalMatrix(r),(null===c||c.length0){const s=t.getRenderList(),a=t.getRenderTarget(),l=new Je(o.height/2);return l.fromEquirectangularTexture(t,r),e.set(r,l),t.setRenderTarget(a),t.setRenderList(s),r.addEventListener("dispose",i),n(l.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function mn(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case"WEBGL_depth_texture":i=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n("EXT_color_buffer_float"):(n("WEBGL_depth_texture"),n("OES_texture_float"),n("OES_texture_half_float"),n("OES_texture_half_float_linear"),n("OES_standard_derivatives"),n("OES_element_index_uint"),n("OES_vertex_array_object"),n("ANGLE_instanced_arrays")),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float")},get:function(t){const e=n(t);return null===e&&console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e}}}function gn(t,e,n,i){const r={},o=new WeakMap;function s(t){const a=t.target;null!==a.index&&e.remove(a.index);for(const t in a.attributes)e.remove(a.attributes[t]);a.removeEventListener("dispose",s),delete r[a.id];const l=o.get(a);l&&(e.remove(l),o.delete(a)),i.releaseStatesOfGeometry(a),!0===a.isInstancedBufferGeometry&&delete a._maxInstanceCount,n.memory.geometries--}function a(t){const n=[],i=t.index,r=t.attributes.position;let s=0;if(null!==i){const t=i.array;s=i.version;for(let e=0,i=t.length;e65535?le:se)(n,1);a.version=s;const l=o.get(t);l&&e.remove(l),o.set(t,a)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener("dispose",s),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t0)return t;const r=e*n;let o=Rn[r];if(void 0===o&&(o=new Float32Array(r),Rn[r]=o),0!==e){i.toArray(o,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(o,r)}return o}function Nn(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function Pi(t){return t.replace(Ci,Di)}function Di(t,e){const n=sn[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return Pi(n)}const Ii=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Oi=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Ni(t){return t.replace(Oi,Fi).replace(Ii,Bi)}function Bi(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Fi(t,e,n,i)}function Fi(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,p=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Ti).join("\n")}(n),f=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(o),m=r.createProgram();let g,v,y=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(g=[f].filter(Ti).join("\n"),g.length>0&&(g+="\n"),v=[p,f].filter(Ti).join("\n"),v.length>0&&(v+="\n")):(g=[zi(n),"#define SHADER_NAME "+n.shaderName,f,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+d,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#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;","\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(Ti).join("\n"),v=[p,zi(n),"#define SHADER_NAME "+n.shaderName,f,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+d,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.envMap?"#define "+h:"",n.envMap?"#define "+u:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?sn.tonemapping_pars_fragment:"",0!==n.toneMapping?Si("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",sn.encodings_pars_fragment,n.map?Mi("mapTexelToLinear",n.mapEncoding):"",n.matcap?Mi("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?Mi("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?Mi("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?Mi("lightMapTexelToLinear",n.lightMapEncoding):"",Ei("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Ti).join("\n")),s=Pi(s),s=Li(s,n),s=Ri(s,n),a=Pi(a),a=Li(a,n),a=Ri(a,n),s=Ni(s),a=Ni(a),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y="#version 300 es\n",g=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in","300 es"===n.glslVersion?"":"out highp vec4 pc_fragColor;","300 es"===n.glslVersion?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const A=y+v+a,x=xi(r,35633,y+g+s),_=xi(r,35632,A);if(r.attachShader(m,x),r.attachShader(m,_),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,"position"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(x).trim(),n=r.getShaderInfoLog(_).trim();let i=!0,o=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=wi(r,x,"vertex"),n=wi(r,_,"fragment");console.error("THREE.WebGLProgram: shader error: ",r.getError(),"35715",r.getProgramParameter(m,35715),"gl.getProgramInfoLog",t,e,n)}else""!==t?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",t):""!==e&&""!==n||(o=!1);o&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let b,w;return r.deleteShader(x),r.deleteShader(_),this.getUniforms=function(){return void 0===b&&(b=new Ai(r,m)),b},this.getAttributes=function(){return void 0===w&&(w=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,maxBones:b,useVertexTexture:c,morphTargets:r.morphTargets,morphNormals:r.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:s.directional.length,numPointLights:s.point.length,numSpotLights:s.spot.length,numRectAreaLights:s.rectArea.length,numHemiLights:s.hemi.length,numDirLightShadows:s.directionalShadowMap.length,numPointLightShadows:s.pointShadowMap.length,numSpotLightShadows:s.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&f.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:a||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:a||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:a||n.has("EXT_shader_texture_lod"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t1&&i.sort(t||Vi),r.length>1&&r.sort(e||ki)}}}function ji(t){let e=new WeakMap;return{get:function(n,i){const r=e.get(n);let o;return void 0===r?(o=new Wi(t),e.set(n,new WeakMap),e.get(n).set(i,o)):(o=r.get(i),void 0===o&&(o=new Wi(t),r.set(i,o))),o},dispose:function(){e=new WeakMap}}}function Xi(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new T,color:new Yt};break;case"SpotLight":n={position:new T,direction:new T,color:new Yt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new T,color:new Yt,distance:0,decay:0};break;case"HemisphereLight":n={direction:new T,skyColor:new Yt,groundColor:new Yt};break;case"RectAreaLight":n={color:new Yt,position:new T,halfWidth:new T,halfHeight:new T}}return t[e.id]=n,n}}}let qi=0;function Yi(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Qi(t,e){const n=new Xi,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new T);const o=new T,s=new et,a=new et;return{setup:function(o){let s=0,a=0,l=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let c=0,h=0,u=0,d=0,p=0,f=0,m=0,g=0;o.sort(Yi);for(let t=0,e=o.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=an.LTC_FLOAT_1,r.rectAreaLTC2=an.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=an.LTC_HALF_1,r.rectAreaLTC2=an.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=s,r.ambient[1]=a,r.ambient[2]=l;const v=r.hash;v.directionalLength===c&&v.pointLength===h&&v.spotLength===u&&v.rectAreaLength===d&&v.hemiLength===p&&v.numDirectionalShadows===f&&v.numPointShadows===m&&v.numSpotShadows===g||(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=h,r.hemi.length=p,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=m,r.pointShadowMap.length=m,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=m,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=h,v.spotLength=u,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=f,v.numPointShadows=m,v.numSpotShadows=g,r.version=qi++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(o=new Zi(t,e),n.get(i).push(o)):o=n.get(i)[r],o},dispose:function(){n=new WeakMap}}}function Ki(t){Jt.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}function $i(t){Jt.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new T,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}Ki.prototype=Object.create(Jt.prototype),Ki.prototype.constructor=Ki,Ki.prototype.isMeshDepthMaterial=!0,Ki.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},$i.prototype=Object.create(Jt.prototype),$i.prototype.constructor=$i,$i.prototype.isMeshDistanceMaterial=!0,$i.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this};function tr(t,e,n){let i=new en;const r=new v,o=new v,s=new M,a=[],l=[],c={},h={0:1,1:0,2:2},u=new Xe({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new v},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),d=u.clone();d.defines.HORIZONTAL_PASS=1;const p=new be;p.setAttribute("position",new ee(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const f=new He(p,u),m=this;function g(n,i){const r=e.update(f);u.uniforms.shadow_pass.value=n.map.texture,u.uniforms.resolution.value=n.mapSize,u.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,u,f,null),d.uniforms.shadow_pass.value=n.mapPass.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,d,f,null)}function y(t,e,n){const i=t<<0|e<<1|n<<2;let r=a[i];return void 0===r&&(r=new Ki({depthPacking:3201,morphTargets:t,skinning:e}),a[i]=r),r}function A(t,e,n){const i=t<<0|e<<1|n<<2;let r=l[i];return void 0===r&&(r=new $i({morphTargets:t,skinning:e}),l[i]=r),r}function x(e,n,i,r,o,s,a){let l=null,u=y,d=e.customDepthMaterial;if(!0===r.isPointLight&&(u=A,d=e.customDistanceMaterial),void 0===d){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0);let r=!1;!0===e.isSkinnedMesh&&(!0===i.skinning?r=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e));l=u(t,r,!0===e.isInstancedMesh)}else l=d;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=3===a?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:h[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=o,l.farDistance=s),l}function _(n,r,o,s,a){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===a)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;ln||r.y>n)&&(r.x>n&&(o.x=Math.floor(n/p.x),r.x=o.x*p.x,u.mapSize.x=o.x),r.y>n&&(o.y=Math.floor(n/p.y),r.y=o.y*p.y,u.mapSize.y=o.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:1006,magFilter:1006,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.mapPass=new E(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:1003,magFilter:1003,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t=1):-1!==T.indexOf("OpenGL ES")&&(S=parseFloat(/^OpenGL ES (\d)/.exec(T)[1]),E=S>=2);let L=null,R={};const C=new M,P=new M;function D(e,n,i){const r=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?g.floorPowerOfTwo:Math.floor,o=i(r*t.width),s=i(r*t.height);void 0===p&&(p=m(o,s));const a=n?m(o,s):p;a.width=o,a.height=s;return a.getContext("2d").drawImage(t,0,0,o,s),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+o+"x"+s+")."),a}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function y(t){return g.isPowerOfTwo(t.width)&&g.isPowerOfTwo(t.height)}function A(t,e){return t.generateMipmaps&&e&&1003!==t.minFilter&&1006!==t.minFilter}function x(e,n,r,o){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log(Math.max(r,o))*Math.LOG2E}function _(n,i,r){if(!1===a)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let o=i;return 6403===i&&(5126===r&&(o=33326),5131===r&&(o=33325),5121===r&&(o=33321)),6407===i&&(5126===r&&(o=34837),5131===r&&(o=34843),5121===r&&(o=32849)),6408===i&&(5126===r&&(o=34836),5131===r&&(o=34842),5121===r&&(o=32856)),33325!==o&&33326!==o&&34842!==o&&34836!==o||e.get("EXT_color_buffer_float"),o}function b(t){return 1003===t||1004===t||1005===t?9728:9729}function w(e){const n=e.target;n.removeEventListener("dispose",w),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&d.delete(n),s.memory.textures--}function M(e){const n=e.target;n.removeEventListener("dispose",M),function(e){const n=i.get(e),r=i.get(e.texture);if(!e)return;void 0!==r.__webglTexture&&t.deleteTexture(r.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(n.__webglFramebuffer[e]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[e]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer),n.__webglMultisampledFramebuffer&&t.deleteFramebuffer(n.__webglMultisampledFramebuffer),n.__webglColorRenderbuffer&&t.deleteRenderbuffer(n.__webglColorRenderbuffer),n.__webglDepthRenderbuffer&&t.deleteRenderbuffer(n.__webglDepthRenderbuffer);i.remove(e.texture),i.remove(e)}(n),s.memory.textures--}let E=0;function S(t,e){const r=i.get(t);if(t.isVideoTexture&&function(t){const e=s.render.frame;d.get(t)!==e&&(d.set(t,e),t.update())}(t),t.version>0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void D(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function T(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;P(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const s=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=s||l?l?i.image[t].image:i.image[t]:v(i.image[t],!1,!0,c);const u=h[0],d=y(u)||a,p=o.convert(i.format),f=o.convert(i.type),m=_(i.internalFormat,p,f);let g;if(C(34067,i,d),s){for(let t=0;t<6;t++){g=h[t].mipmaps;for(let e=0;e1||i.get(o).__currentAnisotropy)&&(t.texParameterf(n,l.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(o.anisotropy,r.getMaxAnisotropy())),i.get(o).__currentAnisotropy=o.anisotropy)}}function P(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",w),e.__webglTexture=t.createTexture(),s.memory.textures++)}function D(e,i,r){let s=3553;i.isDataTexture2DArray&&(s=35866),i.isDataTexture3D&&(s=32879),P(e,i),n.activeTexture(33984+r),n.bindTexture(s,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const l=function(t){return!a&&(1001!==t.wrapS||1001!==t.wrapT||1003!==t.minFilter&&1006!==t.minFilter)}(i)&&!1===y(i.image),c=v(i.image,l,!1,h),u=y(c)||a,d=o.convert(i.format);let p,f=o.convert(i.type),m=_(i.internalFormat,d,f);C(s,i,u);const g=i.mipmaps;if(i.isDepthTexture)m=6402,a?m=1015===i.type?36012:1014===i.type?33190:1020===i.type?35056:33189:1015===i.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),1026===i.format&&6402===m&&1012!==i.type&&1014!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=1012,f=o.convert(i.type)),1027===i.format&&6402===m&&(m=34041,1020!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=1020,f=o.convert(i.type))),n.texImage2D(3553,0,m,c.width,c.height,0,d,f,null);else if(i.isDataTexture)if(g.length>0&&u){for(let t=0,e=g.length;t0&&u){for(let t=0,e=g.length;t=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),E+=1,t},this.resetTextureUnits=function(){E=0},this.setTexture2D=S,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=T,this.setupRenderTarget=function(e){const r=i.get(e),l=i.get(e.texture);e.addEventListener("dispose",M),l.__webglTexture=t.createTexture(),s.memory.textures++;const c=!0===e.isWebGLCubeRenderTarget,h=!0===e.isWebGLMultisampleRenderTarget,u=y(e)||a;if(!a||1022!==e.texture.format||1015!==e.texture.type&&1016!==e.texture.type||(e.texture.format=1023,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),c){r.__webglFramebuffer=[];for(let e=0;e<6;e++)r.__webglFramebuffer[e]=t.createFramebuffer()}else if(r.__webglFramebuffer=t.createFramebuffer(),h)if(a){r.__webglMultisampledFramebuffer=t.createFramebuffer(),r.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,r.__webglColorRenderbuffer);const n=o.convert(e.texture.format),i=o.convert(e.texture.type),s=_(e.texture.internalFormat,n,i),a=B(e);t.renderbufferStorageMultisample(36161,a,s,e.width,e.height),t.bindFramebuffer(36160,r.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,r.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(r.__webglDepthRenderbuffer=t.createRenderbuffer(),O(r.__webglDepthRenderbuffer,e,!0)),t.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(c){n.bindTexture(34067,l.__webglTexture),C(34067,e.texture,u);for(let t=0;t<6;t++)I(r.__webglFramebuffer[t],e,36064,34069+t);A(e.texture,u)&&x(34067,e.texture,e.width,e.height),n.bindTexture(34067,null)}else n.bindTexture(3553,l.__webglTexture),C(3553,e.texture,u),I(r.__webglFramebuffer,e,36064,3553),A(e.texture,u)&&x(3553,e.texture,e.width,e.height),n.bindTexture(3553,null);e.depthBuffer&&N(e)},this.updateRenderTargetMipmap=function(t){const e=t.texture;if(A(e,y(t)||a)){const r=t.isWebGLCubeRenderTarget?34067:3553,o=i.get(e).__webglTexture;n.bindTexture(r,o),x(r,e,t.width,t.height),n.bindTexture(r,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(a){const n=i.get(e);t.bindFramebuffer(36008,n.__webglMultisampledFramebuffer),t.bindFramebuffer(36009,n.__webglFramebuffer);const r=e.width,o=e.height;let s=16384;e.depthBuffer&&(s|=256),e.stencilBuffer&&(s|=1024),t.blitFramebuffer(0,0,r,o,0,0,r,o,s,9728),t.bindFramebuffer(36160,n.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===F&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),F=!0),t=t.texture),S(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===z&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),z=!0),t=t.texture),T(t,e)}}function ir(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(1009===t)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(1012===t)return 5123;if(1013===t)return 5124;if(1014===t)return 5125;if(1015===t)return 5126;if(1016===t)return i?5131:(n=e.get("OES_texture_half_float"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(1022===t)return 6407;if(1023===t)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(1026===t)return 6402;if(1027===t)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(33776===t||33777===t||33778===t||33779===t){if(n=e.get("WEBGL_compressed_texture_s3tc"),null===n)return null;if(33776===t)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===t)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===t)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===t||35841===t||35842===t||35843===t){if(n=e.get("WEBGL_compressed_texture_pvrtc"),null===n)return null;if(35840===t)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===t)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===t)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===t)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get("WEBGL_compressed_texture_etc1"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===t||37496===t)&&(n=e.get("WEBGL_compressed_texture_etc"),null!==n)){if(37492===t)return n.COMPRESSED_RGB8_ETC2;if(37496===t)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get("WEBGL_compressed_texture_astc"),null!==n?t:null):36492===t?(n=e.get("EXT_texture_compression_bptc"),null!==n?t:null):1020===t?i?34042:(n=e.get("WEBGL_depth_texture"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}function rr(t=[]){Ye.call(this),this.cameras=t}function or(){St.call(this),this.type="Group"}function sr(){this._targetRay=null,this._grip=null,this._hand=null}function ar(t,e){const n=this;let i=null,r=1,o=null,s="local-floor",a=null;const l=[],c=new Map,h=new Ye;h.layers.enable(1),h.viewport=new M;const u=new Ye;u.layers.enable(2),u.viewport=new M;const d=[h,u],p=new rr;p.layers.enable(1),p.layers.enable(2);let f=null,m=null;function g(t){const e=c.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function v(){c.forEach((function(t,e){t.disconnect(e)})),c.clear(),f=null,m=null,t.setFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),w.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function y(t){const e=i.inputSources;for(let t=0;t0&&Et(o,t,e),s.length>0&&Et(s,t,e),!0===t.isScene&&t.onAfterRender(f,t,e),null!==_&&(Z.updateRenderTargetMipmap(_),Z.updateMultisampleRenderTarget(_)),q.buffers.depth.setTest(!0),q.buffers.depth.setMask(!0),q.buffers.color.setMask(!0),q.setPolygonOffset(!1),p.pop(),d=p.length>0?p[p.length-1]:null,u=null},this.setFramebuffer=function(t){y!==t&&null===_&&pt.bindFramebuffer(36160,t),y=t},this.getActiveCubeFace=function(){return A},this.getActiveMipmapLevel=function(){return x},this.getRenderList=function(){return u},this.setRenderList=function(t){u=t},this.getRenderTarget=function(){return _},this.setRenderTarget=function(t,e=0,n=0){_=t,A=e,x=n,t&&void 0===Q.get(t).__webglFramebuffer&&Z.setupRenderTarget(t);let i=y,r=!1;if(t){const n=Q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=n[e],r=!0):i=t.isWebGLMultisampleRenderTarget?Q.get(t).__webglMultisampledFramebuffer:n,S.copy(t.viewport),L.copy(t.scissor),R=t.scissorTest}else S.copy(N).multiplyScalar(D).floor(),L.copy(B).multiplyScalar(D).floor(),R=F;if(b!==i&&(pt.bindFramebuffer(36160,i),b=i),q.viewport(S),q.scissor(L),q.setScissorTest(R),r){const i=Q.get(t.texture);pt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}},this.readRenderTargetPixels=function(t,e,n,i,r,o,s){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let a=Q.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==s&&(a=a[s]),a){let s=!1;a!==b&&(pt.bindFramebuffer(36160,a),s=!0);try{const a=t.texture,l=a.format,c=a.type;if(1023!==l&&ut.convert(l)!==pt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const h=1016===c&&(j.has("EXT_color_buffer_half_float")||X.isWebGL2&&j.has("EXT_color_buffer_float"));if(!(1009===c||ut.convert(c)===pt.getParameter(35738)||1015===c&&(X.isWebGL2||j.has("OES_texture_float")||j.has("WEBGL_color_buffer_float"))||h))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===pt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&pt.readPixels(e,n,i,r,ut.convert(l),ut.convert(c),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&pt.bindFramebuffer(36160,b)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),o=Math.floor(e.image.height*i),s=ut.convert(e.format);Z.setTexture2D(e,0),pt.copyTexImage2D(3553,n,s,t.x,t.y,r,o,0),q.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,o=e.image.height,s=ut.convert(n.format),a=ut.convert(n.type);Z.setTexture2D(n,0),pt.pixelStorei(37440,n.flipY),pt.pixelStorei(37441,n.premultiplyAlpha),pt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?pt.texSubImage2D(3553,i,t.x,t.y,r,o,s,a,e.image.data):e.isCompressedTexture?pt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,s,e.mipmaps[0].data):pt.texSubImage2D(3553,i,t.x,t.y,s,a,e.image),0===i&&n.generateMipmaps&&pt.generateMipmap(3553),q.unbindTexture()},this.initTexture=function(t){Z.setTexture2D(t,0),q.unbindTexture()},this.resetState=function(){q.reset(),dt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function hr(t){cr.call(this,t)}rr.prototype=Object.assign(Object.create(Ye.prototype),{constructor:rr,isArrayCamera:!0}),or.prototype=Object.assign(Object.create(St.prototype),{constructor:or,isGroup:!0}),Object.assign(sr.prototype,{constructor:sr,getHandSpace:function(){return null===this._hand&&(this._hand=new or,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand},getTargetRaySpace:function(){return null===this._targetRay&&(this._targetRay=new or,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1),this._targetRay},getGripSpace:function(){return null===this._grip&&(this._grip=new or,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1),this._grip},dispatchEvent:function(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this},disconnect:function(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this},update:function(t,e,n){let i=null,r=null,o=null;const s=this._targetRay,a=this._grip,l=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(l&&t.hand){o=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new or;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints["index-finger-tip"],r=l.joints["thumb-tip"],s=i.position.distanceTo(r.position),a=.02,c=.005;l.inputState.pinching&&s>a+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&s<=a-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==s&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale))),null!==a&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(a.matrix.fromArray(r.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale)));return null!==s&&(s.visible=null!==i),null!==a&&(a.visible=null!==r),null!==l&&(l.visible=null!==o),this}}),Object.assign(ar.prototype,p.prototype),hr.prototype=Object.assign(Object.create(cr.prototype),{constructor:hr,isWebGL1Renderer:!0});class ur extends St{constructor(){super(),Object.defineProperty(this,"isScene",{value:!0}),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.environment&&(e.object.environment=this.environment.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}function dr(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=g.generateUUID()}Object.defineProperty(dr.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(dr.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:a,point:vr.clone(),uv:Gt.getUV(vr,wr,Mr,Er,Sr,Tr,Lr,new v),face:null,object:this})},copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}});const Pr=new T,Dr=new T;function Ir(){St.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}Ir.prototype=Object.assign(Object.create(St.prototype),{constructor:Ir,isLOD:!0,copy:function(t){St.prototype.copy.call(this,t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){Pr.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(Pr);this.getObjectForDistance(n).raycast(t,e)}},update:function(t){const e=this.levels;if(e.length>1){Pr.setFromMatrixPosition(t.matrixWorld),Dr.setFromMatrixPosition(this.matrixWorld);const n=Pr.distanceTo(Dr)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;is)continue;h.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(h);dt.far||e.push({distance:d,point:c.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else for(let n=0,i=r.count-1;ns)continue;h.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(h);it.far||e.push({distance:i,point:c.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}});const no=new T,io=new T;function ro(t,e){eo.call(this,t,e),this.type="LineSegments"}function oo(t,e){eo.call(this,t,e),this.type="LineLoop"}function so(t){Jt.call(this),this.type="PointsMaterial",this.color=new Yt(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}ro.prototype=Object.assign(Object.create(eo.prototype),{constructor:ro,isLineSegments:!0,computeLineDistances:function(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;tr.far)return;o.push({distance:l,distanceToRay:Math.sqrt(a),point:n,index:e,face:null,object:s})}}function fo(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.format=void 0!==s?s:1022,this.minFilter=void 0!==o?o:1006,this.magFilter=void 0!==r?r:1006,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}function mo(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function go(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.needsUpdate=!0}function vo(t,e,n,i,r,o,s,a,l,c){if(1026!==(c=void 0!==c?c:1026)&&1027!==c)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&1026===c&&(n=1012),void 0===n&&1027===c&&(n=1020),b.call(this,null,i,r,o,s,a,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==s?s:1003,this.minFilter=void 0!==a?a:1003,this.flipY=!1,this.generateMipmaps=!1}uo.prototype=Object.assign(Object.create(St.prototype),{constructor:uo,isPoints:!0,copy:function(t){return St.prototype.copy.call(this,t),this.material=t.material,this.geometry=t.geometry,this},raycast:function(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold;if(null===n.boundingSphere&&n.computeBoundingSphere(),co.copy(n.boundingSphere),co.applyMatrix4(i),co.radius+=r,!1===t.ray.intersectsSphere(co))return;ao.copy(i).invert(),lo.copy(t.ray).applyMatrix4(ao);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),s=o*o;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position;if(null!==r){const n=r.array;for(let r=0,a=n.length;r0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}),fo.prototype=Object.assign(Object.create(b.prototype),{constructor:fo,clone:function(){return new this.constructor(this.image).copy(this)},isVideoTexture:!0,update:function(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),mo.prototype=Object.create(b.prototype),mo.prototype.constructor=mo,mo.prototype.isCompressedTexture=!0,go.prototype=Object.create(b.prototype),go.prototype.constructor=go,go.prototype.isCanvasTexture=!0,vo.prototype=Object.create(b.prototype),vo.prototype.constructor=vo,vo.prototype.isDepthTexture=!0;new T,new T,new T,new Gt;const yo=function(t,e,n){n=n||2;const i=e&&e.length,r=i?e[0]*n:t.length;let o=Ao(t,0,r,n,!0);const s=[];if(!o||o.next===o.prev)return s;let a,l,c,h,u,d,p;if(i&&(o=function(t,e,n,i){const r=[];let o,s,a,l,c;for(o=0,s=e.length;o80*n){a=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-a,h-l),p=0!==p?1/p:0}return _o(o,s,n,a,l,p),s};function Ao(t,e,n,i,r){let o,s;if(r===function(t,e,n,i){let r=0;for(let o=e,s=n-i;o0)for(o=e;o=e;o-=i)s=Ho(o,t[o],t[o+1],s);return s&&Oo(s,s.next)&&(Go(s),s=s.next),s}function xo(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!Oo(i,i.next)&&0!==Io(i.prev,i,i.next))i=i.next;else{if(Go(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function _o(t,e,n,i,r,o,s){if(!t)return;!s&&o&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=Ro(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,o,s,a,l,c=1;do{for(n=t,t=null,o=null,s=0;n;){for(s++,i=n,a=0,e=0;e0||l>0&&i;)0!==a&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,a--):(r=i,i=i.nextZ,l--),o?o.nextZ=r:t=r,r.prevZ=o,o=r;n=i}o.nextZ=null,c*=2}while(s>1)}(r)}(t,i,r,o);let a,l,c=t;for(;t.prev!==t.next;)if(a=t.prev,l=t.next,o?wo(t,i,r,o):bo(t))e.push(a.i/n),e.push(t.i/n),e.push(l.i/n),Go(t),t=l.next,c=l.next;else if((t=l)===c){s?1===s?_o(t=Mo(xo(t),e,n),e,n,i,r,o,2):2===s&&Eo(t,e,n,i,r,o):_o(xo(t),e,n,i,r,o,1);break}}function bo(t){const e=t.prev,n=t,i=t.next;if(Io(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(Po(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&Io(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function wo(t,e,n,i){const r=t.prev,o=t,s=t.next;if(Io(r,o,s)>=0)return!1;const a=r.xo.x?r.x>s.x?r.x:s.x:o.x>s.x?o.x:s.x,h=r.y>o.y?r.y>s.y?r.y:s.y:o.y>s.y?o.y:s.y,u=Ro(a,l,e,n,i),d=Ro(c,h,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p&&p.z>=u&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function Mo(t,e,n){let i=t;do{const r=i.prev,o=i.next.next;!Oo(r,o)&&No(r,i,i.next,o)&&zo(r,o)&&zo(o,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(o.i/n),Go(i),Go(i.next),i=t=o),i=i.next}while(i!==t);return xo(i)}function Eo(t,e,n,i,r,o){let s=t;do{let t=s.next.next;for(;t!==s.prev;){if(s.i!==t.i&&Do(s,t)){let a=Uo(s,t);return s=xo(s,s.next),a=xo(a,a.next),_o(s,e,n,i,r,o),void _o(a,e,n,i,r,o)}t=t.next}s=s.next}while(s!==t)}function So(t,e){return t.x-e.x}function To(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let o,s=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>s){if(s=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}o=n.x=n.x&&n.x>=l&&i!==n.x&&Po(ro.x||n.x===o.x&&Lo(o,n)))&&(o=n,u=h)),n=n.next}while(n!==a);return o}(t,e)){const n=Uo(e,t);xo(e,e.next),xo(n,n.next)}}function Lo(t,e){return Io(t.prev,t,e.prev)<0&&Io(e.next,t,t.next)<0}function Ro(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Co(t){let e=t,n=t;do{(e.x=0&&(t-s)*(i-a)-(n-s)*(e-a)>=0&&(n-s)*(o-a)-(r-s)*(i-a)>=0}function Do(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&No(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(zo(t,e)&&zo(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&r<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(Io(t.prev,t,e.prev)||Io(t,e.prev,e))||Oo(t,e)&&Io(t.prev,t,t.next)>0&&Io(e.prev,e,e.next)>0)}function Io(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Oo(t,e){return t.x===e.x&&t.y===e.y}function No(t,e,n,i){const r=Fo(Io(t,e,n)),o=Fo(Io(t,e,i)),s=Fo(Io(n,i,t)),a=Fo(Io(n,i,e));return r!==o&&s!==a||(!(0!==r||!Bo(t,n,e))||(!(0!==o||!Bo(t,i,e))||(!(0!==s||!Bo(n,t,i))||!(0!==a||!Bo(n,e,i)))))}function Bo(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function Fo(t){return t>0?1:t<0?-1:0}function zo(t,e){return Io(t.prev,t,t.next)<0?Io(t,e,t.next)>=0&&Io(t,t.prev,e)>=0:Io(t,e,t.prev)<0||Io(t,t.next,e)<0}function Uo(t,e){const n=new Vo(t.i,t.x,t.y),i=new Vo(e.i,e.x,e.y),r=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,o.next=i,i.prev=o,i}function Ho(t,e,n,i){const r=new Vo(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Go(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Vo(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}const ko={area:function(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function jo(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-a/u,f=e.y+s/u,m=((n.x-c/d-p)*c-(n.y+l/d-f)*l)/(s*c-a*l);i=p+s*m-t.x,r=f+a*m-t.y;const g=i*i+r*r;if(g<=2)return new v(i,r);o=Math.sqrt(g/2)}else{let t=!1;s>Number.EPSILON?l>Number.EPSILON&&(t=!0):s<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(c)&&(t=!0),t?(i=-a,r=s,o=Math.sqrt(h)):(i=s,r=a,o=Math.sqrt(h/2))}return new v(i/o,r/o)}const I=[];for(let t=0,e=L.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=L.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=a+2*p;t=0?(t(i-a,p,h),u.subVectors(c,h)):(t(i+a,p,h),u.subVectors(h,c)),p-a>=0?(t(i,p-a,h),d.subVectors(c,h)):(t(i,p+a,h),d.subVectors(h,c)),l.crossVectors(u,d).normalize(),o.push(l.x,l.y,l.z),s.push(i,p)}}for(let t=0;t0)&&d.push(e,r,l),(t!==n-1||a=i)){l.push(e.times[t]);for(let n=0;no.tracks[t].times[0]&&(a=o.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+a,e=t+l-a;d=ls.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=a,n=l-a;t.evaluate(o),d=ls.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new S).fromArray(d).normalize().conjugate().toArray(d)}const p=s.times.length;for(let t=0;t=r)break t;{const s=e[1];t=r)break e}o=n,n=0}}for(;n>>1;te;)--o;if(++o,0!==r||o!==i){r>=o&&(o=Math.max(o,1),r=o-1);const t=this.getValueSize();this.times=ls.arraySlice(n,r,o),this.values=ls.arraySlice(this.values,r*t,o*t)}return this},validate:function(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let o=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==o&&o>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,o),t=!1;break}o=i}if(void 0!==i&&ls.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t},optimize:function(){const t=ls.arraySlice(this.times),e=ls.arraySlice(this.values),n=this.getValueSize(),i=2302===this.getInterpolation(),r=t.length-1;let o=1;for(let s=1;s0){t[o]=t[r];for(let t=r*n,i=o*n,s=0;s!==n;++s)e[i+s]=e[t+s];++o}return o!==t.length?(this.times=ls.arraySlice(t,0,o),this.values=ls.arraySlice(e,0,o*n)):(this.times=t,this.values=e),this},clone:function(){const t=ls.arraySlice(this.times,0),e=ls.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}),fs.prototype=Object.assign(Object.create(ps.prototype),{constructor:fs,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),ms.prototype=Object.assign(Object.create(ps.prototype),{constructor:ms,ValueTypeName:"color"}),gs.prototype=Object.assign(Object.create(ps.prototype),{constructor:gs,ValueTypeName:"number"}),vs.prototype=Object.assign(Object.create(cs.prototype),{constructor:vs,interpolate_:function(t,e,n,i){const r=this.resultBuffer,o=this.sampleValues,s=this.valueSize,a=(n-e)/(i-e);let l=t*s;for(let t=l+s;l!==t;l+=4)S.slerpFlat(r,0,o,l-s,o,l,a);return r}}),ys.prototype=Object.assign(Object.create(ps.prototype),{constructor:ys,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(t){return new vs(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),As.prototype=Object.assign(Object.create(ps.prototype),{constructor:As,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),xs.prototype=Object.assign(Object.create(ps.prototype),{constructor:xs,ValueTypeName:"vector"}),Object.assign(_s,{parse:function(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(bs(n[t]).scale(i));const r=new _s(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r},toJSON:function(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(ps.toJSON(n[t]));return i},CreateFromMorphTargetSequence:function(t,e,n,i){const r=e.length,o=[];for(let t=0;t1){const t=o[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const o=[];for(const t in i)o.push(_s.CreateFromMorphTargetSequence(t,i[t],e,n));return o},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const o=[],s=[];ls.flattenJSON(n,o,s,i),0!==o.length&&r.push(new t(e,o,s))}},i=[],r=t.name||"default",o=t.fps||30,s=t.blendMode;let a=t.length||-1;const l=t.hierarchy||[];for(let t=0;t0||0===t.search(/^data\:image\/jpeg/);r.format=i?1022:1023,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}),Object.assign(Os.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){const t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let o=1;o<=t;o++)n=this.getPoint(o/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){const n=this.getLengths();let i=0;const r=n.length;let o;o=e||t*n[r-1];let s,a=0,l=r-1;for(;a<=l;)if(i=Math.floor(a+(l-a)/2),s=n[i]-o,s<0)a=i+1;else{if(!(s>0)){l=i;break}l=i-1}if(i=l,n[i]===o)return i/(r-1);const c=n[i];return(i+(o-c)/(n[i+1]-c))/(r-1)},getTangent:function(t,e){let n=t-1e-4,i=t+1e-4;n<0&&(n=0),i>1&&(i=1);const r=this.getPoint(n),o=this.getPoint(i),s=e||(r.isVector2?new v:new T);return s.copy(o).sub(r).normalize(),s},getTangentAt:function(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)},computeFrenetFrames:function(t,e){const n=new T,i=[],r=[],o=[],s=new T,a=new et;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new T),i[e].normalize()}r[0]=new T,o[0]=new T;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),s.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],s),o[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),o[e]=o[e-1].clone(),s.crossVectors(i[e-1],i[e]),s.length()>Number.EPSILON){s.normalize();const t=Math.acos(g.clamp(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(a.makeRotationAxis(s,t))}o[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(g.clamp(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(s.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(a.makeRotationAxis(i[n],e*n)),o[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:o}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),Ns.prototype=Object.create(Os.prototype),Ns.prototype.constructor=Ns,Ns.prototype.isEllipseCurve=!0,Ns.prototype.getPoint=function(t,e){const n=e||new v,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const o=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?s=i[(l-1)%r]:(zs.subVectors(i[0],i[1]).add(i[0]),s=zs);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:o+1],h=i[o>i.length-3?i.length-1:o+2];return n.set(ks(s,a.x,l.x,c.x,h.x),ks(s,a.y,l.y,c.y,h.y)),n},Ks.prototype.copy=function(t){Os.prototype.copy.call(this,t),this.points=[];for(let e=0,n=t.points.length;e=e){const t=n[i]-e,r=this.curves[i],o=r.getLength(),s=0===o?0:1-t/o;return r.getPointAt(s)}i++}return null},getLength:function(){const t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e},copy:function(t){Os.prototype.copy.call(this,t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this},copy:function(t){return ta.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){const t=ta.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return ta.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),na.prototype=Object.assign(Object.create(ea.prototype),{constructor:na,getPointsHoles:function(t){const e=[];for(let n=0,i=this.holes.length;n0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new Yt).setHex(r.value);break;case"v2":i.uniforms[e].value=(new v).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new T).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new M).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new y).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new et).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new v).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new v).fromArray(t.clearcoatNormalScale)),void 0!==t.transmission&&(i.transmission=t.transmission),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),i},setTextures:function(t){return this.textures=t,this}});const ya=function(t){const e=t.lastIndexOf("/");return-1===e?"./":t.substr(0,e+1)};function Aa(){be.call(this),this.type="InstancedBufferGeometry",this.instanceCount=1/0}function xa(t,e,n,i){"number"==typeof n&&(i=n,n=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),ee.call(this,t,e,n),this.meshPerAttribute=i||1}function _a(t){Es.call(this,t)}function ba(t){"undefined"==typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),"undefined"==typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),Es.call(this,t),this.options={premultiplyAlpha:"none"}}function wa(){this.type="ShapePath",this.color=new Yt,this.subPaths=[],this.currentPath=null}Aa.prototype=Object.assign(Object.create(be.prototype),{constructor:Aa,isInstancedBufferGeometry:!0,copy:function(t){return be.prototype.copy.call(this,t),this.instanceCount=t.instanceCount,this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){const t=be.prototype.toJSON.call(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}),xa.prototype=Object.assign(Object.create(ee.prototype),{constructor:xa,isInstancedBufferAttribute:!0,copy:function(t){return ee.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this},toJSON:function(){const t=ee.prototype.toJSON.call(this);return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}),_a.prototype=Object.assign(Object.create(Es.prototype),{constructor:_a,load:function(t,e,n,i){const r=this,o=new Ts(r.manager);o.setPath(r.path),o.setRequestHeader(r.requestHeader),o.setWithCredentials(r.withCredentials),o.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)},parse:function(t){const e={},n={};function i(t,i){if(void 0!==e[i])return e[i];const r=t.interleavedBuffers[i],o=function(t,e){if(void 0!==n[e])return n[e];const i=t.arrayBuffers[e],r=new Uint32Array(i).buffer;return n[e]=r,r}(t,r.buffer),s=new dr(fe(r.type,o),r.stride);return s.uuid=r.uuid,e[i]=s,s}const r=t.isInstancedBufferGeometry?new Aa:new be,o=t.data.index;if(void 0!==o){const t=fe(o.type,o.array);r.setIndex(new ee(t,1))}const s=t.data.attributes;for(const e in s){const n=s[e];let o;if(n.isInterleavedBufferAttribute){o=new fr(i(t.data,n.data),n.itemSize,n.offset,n.normalized)}else{const t=fe(n.type,n.array);o=new(n.isInstancedBufferAttribute?xa:ee)(t,n.itemSize,n.normalized)}void 0!==n.name&&(o.name=n.name),r.setAttribute(e,o)}const a=t.data.morphAttributes;if(a)for(const e in a){const n=a[e],o=[];for(let e=0,r=n.length;eNumber.EPSILON){if(l<0&&(n=e[o],a=-a,s=e[r],l=-l),t.ys.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-a*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(s.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=s.x)return!0}}return i}const r=ko.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===e)return n(o);let s,a,l;const c=[];if(1===o.length)return a=o[0],l=new na,l.curves=a.curves,c.push(l),c;let h=!r(o[0].getPoints());h=t?!h:h;const u=[],d=[];let p,f,m=[],g=0;d[g]=void 0,m[g]=[];for(let e=0,n=o.length;e1){let t=!1;const e=[];for(let t=0,e=d.length;t0&&(t||(m=u))}for(let t=0,e=d.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){s.setValue(n,i);break}},saveOriginalState:function(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0},restoreOriginalState:function(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)},_setAdditiveIdentityNumeric:function(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]},_slerp:function(t,e,n,i){S.slerpFlat(t,e,t,e,t,n,i)},_slerpAdditive:function(t,e,n,i,r){const o=this._workIndex*r;S.multiplyQuaternionsFlat(t,o,t,e,t,n),S.slerpFlat(t,e,t,e,t,o,i)},_lerp:function(t,e,n,i,r){const o=1-i;for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]*o+t[n+s]*i}},_lerpAdditive:function(t,e,n,i,r){for(let o=0;o!==r;++o){const r=e+o;t[r]=t[r]+t[n+o]*i}}});const Na=new RegExp("[\\[\\]\\.:\\/]","g"),Ba="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",Fa=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]"),za=/(WCOD+)?/.source.replace("WCOD",Ba),Ua=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ha=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ga=new RegExp("^"+Fa+za+Ua+Ha+"$"),Va=["material","materials","bones"];function ka(t,e,n){const i=n||Wa.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}function Wa(t,e,n){this.path=e,this.parsedPath=n||Wa.parseTrackName(e),this.node=Wa.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}Object.assign(ka.prototype,{getValue:function(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)},setValue:function(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)},bind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()},unbind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}}),Object.assign(Wa,{Composite:ka,create:function(t,e,n){return t&&t.isAnimationObjectGroup?new Wa.Composite(t,e,n):new Wa(t,e,n)},sanitizeNodeName:function(t){return t.replace(/\s/g,"_").replace(Na,"")},parseTrackName:function(t){const e=Ga.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Va.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n},findNode:function(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const o=r++,c=t[o];e[c.uuid]=l,t[l]=c,e[a]=o,t[o]=s;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[o],r=e[l];e[l]=i,e[o]=r}}}this.nCachedObjects_=r},uncache:function(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,o=t.length;for(let s=0,a=arguments.length;s!==a;++s){const a=arguments[s].uuid,l=e[a];if(void 0!==l)if(delete e[a],l0&&(e[s.uuid]=l),t[l]=s,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r},subscribe_:function(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const o=this._paths,s=this._parsedPaths,a=this._objects,l=a.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,o.push(t),s.push(e),r.push(h);for(let n=c,i=a.length;n!==i;++n){const i=a[n];h[n]=new Wa(i,t,e)}return h},unsubscribe_:function(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,o=this._bindings,s=o.length-1,a=o[s];e[t[s]]=n,o[n]=a,o.pop(),r[n]=r[s],r.pop(),i[n]=i[s],i.pop()}}});class ja{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,o=r.length,s=new Array(o),a={endingStart:2400,endingEnd:2400};for(let t=0;t!==o;++t){const e=r[t].createInterpolant(null);s[t]=e,e.settings=a}this._interpolantSettings=a,this._interpolants=s,this._propertyBindings=new Array(o),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,o=n/i;t.warp(1,r,e),this.warp(o,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,o=this.timeScale;let s=this._timeScaleInterpolant;null===s&&(s=i._lendControlInterpolant(),this._timeScaleInterpolant=s);const a=s.parameterPositions,l=s.sampleValues;return a[0]=r,a[1]=r+n,l[0]=t/o,l[1]=e/o,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const o=this._updateTime(e),s=this._updateWeight(t);if(s>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(o),e[n].accumulateAdditive(s);break;case 2500:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(o),e[n].accumulate(i,s)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const o=2202===n;if(0===t)return-1===r?i:o&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const s=this.repetitions-r;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){const e=t<0;this._setEndings(e,!e,o)}else this._setEndings(!1,!1,o);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(o&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=2401,i.endingEnd=2401):(i.endingStart=t?this.zeroSlopeAtStart?2401:2400:2402,i.endingEnd=e?this.zeroSlopeAtEnd?2401:2400:2402)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let o=this._weightInterpolant;null===o&&(o=i._lendControlInterpolant(),this._weightInterpolant=o);const s=o.parameterPositions,a=o.sampleValues;return s[0]=r,a[0]=e,s[1]=r+t,a[1]=n,this}}function Xa(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}Xa.prototype=Object.assign(Object.create(p.prototype),{constructor:Xa,_bindAction:function(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,o=t._propertyBindings,s=t._interpolants,a=n.uuid,l=this._bindingsByRootAndName;let c=l[a];void 0===c&&(c={},l[a]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)o[t]=h;else{if(h=o[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,a,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new Oa(Wa.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,a,l),o[t]=h}s[t].resultBuffer=h.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this},update:function(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),o=this._accuIndex^=1;for(let s=0;s!==n;++s){e[s]._update(i,t,r,o)}const s=this._bindings,a=this._nActiveBindings;for(let t=0;t!==a;++t)s[t].apply(o);return this},setTime:function(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new v),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new v),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return tl.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}.prototype,{center:function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},size:function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(C.prototype,{center:function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionSphere:function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},size:function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(X.prototype,{empty:function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()}}),en.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},class{constructor(t,e){this.start=void 0!==t?t:new T,this.end=void 0!==e?e:new T}set(t,e){return this.start.copy(t),this.end.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new T),t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new T),t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new T),this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){el.subVectors(t,this.start),nl.subVectors(this.end,this.start);const n=nl.dot(nl);let i=nl.dot(el)/n;return e&&(i=g.clamp(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new T),this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}}.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},Object.assign(g,{random16:function(){return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."),Math.random()},nearestPowerOfTwo:function(t){return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."),g.floorPowerOfTwo(t)},nextPowerOfTwo:function(t){return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."),g.ceilPowerOfTwo(t)}}),Object.assign(y.prototype,{flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},getInverse:function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Object.assign(et.prototype,{extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},getPosition:function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new T).setFromMatrixColumn(this,3)},setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},crossVector:function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},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.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(t,e,n,i,r,o){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,o)},getInverse:function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Ct.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},Object.assign(S.prototype,{multiplyVector3:function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},inverse:function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()}}),Object.assign(tt.prototype,{isIntersectionBox:function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionPlane:function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},isIntersectionSphere:function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)}}),Object.assign(Gt.prototype,{area:function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},barycoordFromPoint:function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},midpoint:function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},normal:function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},plane:function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)}}),Object.assign(Gt,{barycoordFromPoint:function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),Gt.getBarycoord(t,e,n,i,r)},normal:function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),Gt.getNormal(t,e,n,i)}}),Object.assign(na.prototype,{extractAllPoints:function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},extrude:function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Xo(this,t)},makeGeometry:function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Qo(this,t)}}),Object.assign(v.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(T.prototype,{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(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},applyProjection:function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},fromAttribute:function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(M.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},lengthManhattan:function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(St.prototype,{getChildByName:function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},applyMatrix:function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(St.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.assign(He.prototype,{setDrawMode:function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}),Object.defineProperties(He.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),Object.defineProperties(Ir.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Object.defineProperty(kr.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}}),Ur.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Object.defineProperty(Os.prototype,"__arcLengthDivisions",{get:function(){return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions},set:function(t){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions=t}}),Ye.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(ia.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(ee.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),35048===this.usage},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(35048)}}}),Object.assign(ee.prototype,{setDynamic:function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},setArray:function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(be.prototype,{addIndex:function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},addAttribute:function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new ee(arguments[1],arguments[2])))},addDrawCall:function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},removeAttribute:function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},applyMatrix:function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(be.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.defineProperties(Aa.prototype,{maxInstancedCount:{get:function(){return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount},set:function(t){console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount=t}}}),Object.defineProperties(Za.prototype,{linePrecision:{get:function(){return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold},set:function(t){console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold=t}}}),Object.defineProperties(dr.prototype,{dynamic:{get:function(){return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),35048===this.usage},set:function(t){console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),this.setUsage(t)}}}),Object.assign(dr.prototype,{setDynamic:function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},setArray:function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(Xo.prototype,{getArrays:function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")}}),Object.assign(ur.prototype,{dispose:function(){console.error("THREE.Scene: .dispose() has been removed.")}}),Object.defineProperties(qa.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(Jt.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Yt}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}}}),Object.defineProperties(es.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(ts.prototype,{transparency:{get:function(){return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission},set:function(t){console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission=t}}}),Object.defineProperties(Xe.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),Object.assign(cr.prototype,{clearTarget:function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},animate:function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},getCurrentRenderTarget:function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},getMaxAnisotropy:function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},getPrecision:function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},resetGLState:function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},allocTextureUnit:function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},setTexture:function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},setTexture2D:function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},setTextureCube:function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},getActiveMipMapLevel:function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()}}),Object.defineProperties(cr.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?3001:3e3}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}}),Object.defineProperties(tr.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(E.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),Object.defineProperties(class extends St{constructor(t){super(),this.type="Audio",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn("THREE.Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void console.warn("THREE.Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0?n=t[0]:e&&e("VR input not available.")})).catch((function(){console.warn("THREE.VRControls: Unable to get VR Displays")})),this.scale=1,this.standing=!1,this.userHeight=1.6,this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VRControls: getVRDisplays() is being deprecated."),i},this.getStandingMatrix=function(){return o},this.update=function(){var e;n&&(n.getFrameData?(n.getFrameData(s),e=s.pose):n.getPose&&(e=n.getPose()),null!==e.orientation&&t.quaternion.fromArray(e.orientation),null!==e.position?t.position.fromArray(e.position):t.position.set(0,0,0),this.standing&&(n.stageParameters?(t.updateMatrix(),o.fromArray(n.stageParameters.sittingToStandingTransform),t.applyMatrix(o)):t.position.setY(t.position.y+this.userHeight)),t.position.multiplyScalar(r.scale))},this.dispose=function(){n=null}},hl=function(t,e){var n,i,r,o,s=new T,a=new T,l=new et,c=new et,h=new et,u=null;"VRFrameData"in window&&(u=new window.VRFrameData),navigator.getVRDisplays&&navigator.getVRDisplays().then((function(t){i=t,t.length>0?n=t[0]:e&&e("HMD not available")})).catch((function(){console.warn("THREE.VREffect: Unable to get VR Displays")})),this.isPresenting=!1;var d=this,p=t.getSize(),f=!1,m=t.getPixelRatio();this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VREffect: getVRDisplays() is being deprecated."),i},this.setSize=function(e,i,r){if(p={width:e,height:i},f=r,d.isPresenting){var o=n.getEyeParameters("left");t.setPixelRatio(1),t.setSize(2*o.renderWidth,o.renderHeight,!1)}else t.setPixelRatio(m),t.setSize(e,i,r)};var g=t.domElement,v=[0,0,.5,1],y=[.5,0,.5,1];function A(){var e=d.isPresenting;if(d.isPresenting=void 0!==n&&n.isPresenting,d.isPresenting){var i=n.getEyeParameters("left"),r=i.renderWidth,o=i.renderHeight;e||(m=t.getPixelRatio(),p=t.getSize(),t.setPixelRatio(1),t.setSize(2*r,o,!1))}else e&&(t.setPixelRatio(m),t.setSize(p.width,p.height,f))}window.addEventListener("vrdisplaypresentchange",A,!1),this.setFullScreen=function(t){return new Promise((function(e,i){void 0!==n?d.isPresenting!==t?e(t?n.requestPresent([{source:g}]):n.exitPresent()):e():i(new Error("No VR hardware found."))}))},this.requestPresent=function(){return this.setFullScreen(!0)},this.exitPresent=function(){return this.setFullScreen(!1)},this.requestAnimationFrame=function(t){return void 0!==n?n.requestAnimationFrame(t):window.requestAnimationFrame(t)},this.cancelAnimationFrame=function(t){void 0!==n?n.cancelAnimationFrame(t):window.cancelAnimationFrame(t)},this.submitFrame=function(){void 0!==n&&d.isPresenting&&n.submitFrame()},this.autoSubmitFrame=!0;var x=new Ye;x.layers.enable(1);var _=new Ye;_.layers.enable(2),this.render=function(e,i,p,f){if(n&&d.isPresenting){var m=e.autoUpdate;m&&(e.updateMatrixWorld(),e.autoUpdate=!1),Array.isArray(e)&&(console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead."),e=e[0]);var g,A,E=t.getSize(),S=n.getLayers();if(S.length){var T=S[0];g=null!==T.leftBounds&&4===T.leftBounds.length?T.leftBounds:v,A=null!==T.rightBounds&&4===T.rightBounds.length?T.rightBounds:y}else g=v,A=y;if(r={x:Math.round(E.width*g[0]),y:Math.round(E.height*g[1]),width:Math.round(E.width*g[2]),height:Math.round(E.height*g[3])},o={x:Math.round(E.width*A[0]),y:Math.round(E.height*A[1]),width:Math.round(E.width*A[2]),height:Math.round(E.height*A[3])},p?(t.setRenderTarget(p),p.scissorTest=!0):(t.setRenderTarget(null),t.setScissorTest(!0)),(t.autoClear||f)&&t.clear(),null===i.parent&&i.updateMatrixWorld(),i.matrixWorld.decompose(x.position,x.quaternion,x.scale),_.position.copy(x.position),_.quaternion.copy(x.quaternion),_.scale.copy(x.scale),n.getFrameData)n.depthNear=i.near,n.depthFar=i.far,n.getFrameData(u),x.projectionMatrix.elements=u.leftProjectionMatrix,_.projectionMatrix.elements=u.rightProjectionMatrix,function(t){t.pose.orientation?(b.fromArray(t.pose.orientation),l.makeRotationFromQuaternion(b)):l.identity();t.pose.position&&(w.fromArray(t.pose.position),l.setPosition(w));c.fromArray(t.leftViewMatrix),c.multiply(l),h.fromArray(t.rightViewMatrix),h.multiply(l),c.getInverse(c),h.getInverse(h)}(u),x.updateMatrix(),x.matrix.multiply(c),x.matrix.decompose(x.position,x.quaternion,x.scale),_.updateMatrix(),_.matrix.multiply(h),_.matrix.decompose(_.position,_.quaternion,_.scale);else{var L=n.getEyeParameters("left"),R=n.getEyeParameters("right");x.projectionMatrix=M(L.fieldOfView,!0,i.near,i.far),_.projectionMatrix=M(R.fieldOfView,!0,i.near,i.far),s.fromArray(L.offset),a.fromArray(R.offset),x.translateOnAxis(s,x.scale.x),_.translateOnAxis(a,_.scale.x)}return p?(p.viewport.set(r.x,r.y,r.width,r.height),p.scissor.set(r.x,r.y,r.width,r.height)):(t.setViewport(r.x,r.y,r.width,r.height),t.setScissor(r.x,r.y,r.width,r.height)),t.render(e,x,p,f),p?(p.viewport.set(o.x,o.y,o.width,o.height),p.scissor.set(o.x,o.y,o.width,o.height)):(t.setViewport(o.x,o.y,o.width,o.height),t.setScissor(o.x,o.y,o.width,o.height)),t.render(e,_,p,f),p?(p.viewport.set(0,0,E.width,E.height),p.scissor.set(0,0,E.width,E.height),p.scissorTest=!1,t.setRenderTarget(null)):(t.setViewport(0,0,E.width,E.height),t.setScissorTest(!1)),m&&(e.autoUpdate=!0),void(d.autoSubmitFrame&&d.submitFrame())}t.render(e,i,p,f)},this.dispose=function(){window.removeEventListener("vrdisplaypresentchange",A,!1)};var b=new S,w=new T;function M(t,e,n,i){var r=Math.PI/180;return function(t,e,n,i){n=void 0===n?.01:n,i=void 0===i?1e4:i;var r=(e=void 0===e||e)?-1:1,o=new et,s=o.elements,a=function(t){var e=2/(t.leftTan+t.rightTan),n=(t.leftTan-t.rightTan)*e*.5,i=2/(t.upTan+t.downTan);return{scale:[e,i],offset:[n,(t.upTan-t.downTan)*i*.5]}}(t);return s[0]=a.scale[0],s[1]=0,s[2]=a.offset[0]*r,s[3]=0,s[4]=0,s[5]=a.scale[1],s[6]=-a.offset[1]*r,s[7]=0,s[8]=0,s[9]=0,s[10]=i/(n-i)*-r,s[11]=i*n/(n-i),s[12]=0,s[13]=0,s[14]=r,s[15]=0,o.transpose(),o}({upTan:Math.tan(t.upDegrees*r),downTan:Math.tan(t.downDegrees*r),leftTan:Math.tan(t.leftDegrees*r),rightTan:Math.tan(t.rightDegrees*r)},e,n,i)}},ul=function(t,e){var n,i,r,o,s;this.object=t,this.domElement=void 0!==e?e:document,this.enabled=!0,this.target=new T,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.25,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!1,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={ORBIT:h,ZOOM:u,PAN:d},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return y.phi},this.getAzimuthalAngle=function(){return y.theta},this.saveState=function(){a.target0.copy(a.target),a.position0.copy(a.object.position),a.zoom0=a.object.zoom},this.reset=function(){a.target.copy(a.target0),a.object.position.copy(a.position0),a.object.zoom=a.zoom0,a.object.updateProjectionMatrix(),a.dispatchEvent(l),a.update(),m=f.NONE},this.update=(n=new T,i=(new S).setFromUnitVectors(t.up,new T(0,1,0)),r=i.clone().inverse(),o=new T,s=new S,function(){var t=a.object.position;return n.copy(t).sub(a.target),n.applyQuaternion(i),y.setFromVector3(n),a.autoRotate&&m===f.NONE&&a.rotateLeft(2*Math.PI/60/60*a.autoRotateSpeed),y.theta+=A.theta,y.phi+=A.phi,y.theta=Math.max(a.minAzimuthAngle,Math.min(a.maxAzimuthAngle,y.theta)),y.phi=Math.max(a.minPolarAngle,Math.min(a.maxPolarAngle,y.phi)),y.makeSafe(),y.radius*=x,y.radius=Math.max(a.minDistance,Math.min(a.maxDistance,y.radius)),a.target.add(_),n.setFromSpherical(y),n.applyQuaternion(r),t.copy(a.target).add(n),a.object.lookAt(a.target),!0===a.enableDamping?(A.theta*=1-a.dampingFactor,A.phi*=1-a.dampingFactor,_.multiplyScalar(1-a.dampingFactor)):(A.set(0,0,0),_.set(0,0,0)),x=1,!!(b||o.distanceToSquared(a.object.position)>g||8*(1-s.dot(a.object.quaternion))>g)&&(a.dispatchEvent(l),o.copy(a.object.position),s.copy(a.object.quaternion),b=!1,!0)}),this.dispose=function(){a.domElement.removeEventListener("contextmenu",Q,!1),a.domElement.removeEventListener("mousedown",G,!1),a.domElement.removeEventListener("wheel",W,!1),a.domElement.removeEventListener("touchstart",X,!1),a.domElement.removeEventListener("touchend",Y,!1),a.domElement.removeEventListener("touchmove",q,!1),document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),window.removeEventListener("keydown",j,!1)};var a=this,l={type:"change"},c={type:"start"},p={type:"end"},f={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY_PAN:4},m=f.NONE,g=1e-6,y=new $a,A=new $a,x=1,_=new T,b=!1,w=new v,M=new v,E=new v,L=new v,R=new v,C=new v,P=new v,D=new v,I=new v;function O(){return Math.pow(.95,a.zoomSpeed)}a.rotateLeft=function(t){A.theta-=t},a.rotateUp=function(t){A.phi-=t};var N,B=(N=new T,function(t,e){N.setFromMatrixColumn(e,0),N.multiplyScalar(-t),_.add(N)}),F=function(){var t=new T;return function(e,n){!0===a.screenSpacePanning?t.setFromMatrixColumn(n,1):(t.setFromMatrixColumn(n,0),t.crossVectors(a.object.up,t)),t.multiplyScalar(e),_.add(t)}}(),z=function(){var t=new T;return function(e,n){var i=a.domElement===document?a.domElement.body:a.domElement;if(a.object.isPerspectiveCamera){var r=a.object.position;t.copy(r).sub(a.target);var o=t.length();o*=Math.tan(a.object.fov/2*Math.PI/180),B(2*e*o/i.clientHeight,a.object.matrix),F(2*n*o/i.clientHeight,a.object.matrix)}else a.object.isOrthographicCamera?(B(e*(a.object.right-a.object.left)/a.object.zoom/i.clientWidth,a.object.matrix),F(n*(a.object.top-a.object.bottom)/a.object.zoom/i.clientHeight,a.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),a.enablePan=!1)}}();function U(t){a.object.isPerspectiveCamera?x/=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom*t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function H(t){a.object.isPerspectiveCamera?x*=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom/t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function G(t){if(!1!==a.enabled){switch(t.preventDefault(),t.button){case a.mouseButtons.ORBIT:if(!1===a.enableRotate)return;!function(t){w.set(t.clientX,t.clientY)}(t),m=f.ROTATE;break;case a.mouseButtons.ZOOM:if(!1===a.enableZoom)return;!function(t){P.set(t.clientX,t.clientY)}(t),m=f.DOLLY;break;case a.mouseButtons.PAN:if(!1===a.enablePan)return;!function(t){L.set(t.clientX,t.clientY)}(t),m=f.PAN}m!==f.NONE&&(document.addEventListener("mousemove",V,!1),document.addEventListener("mouseup",k,!1),a.dispatchEvent(c))}}function V(t){if(!1!==a.enabled)switch(t.preventDefault(),m){case f.ROTATE:if(!1===a.enableRotate)return;!function(t){M.set(t.clientX,t.clientY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case f.DOLLY:if(!1===a.enableZoom)return;!function(t){D.set(t.clientX,t.clientY),I.subVectors(D,P),I.y>0?U(O()):I.y<0&&H(O()),P.copy(D),a.update()}(t);break;case f.PAN:if(!1===a.enablePan)return;!function(t){R.set(t.clientX,t.clientY),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R),a.update()}(t)}}function k(t){!1!==a.enabled&&(document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),a.dispatchEvent(p),m=f.NONE)}function W(t){!1===a.enabled||!1===a.enableZoom||m!==f.NONE&&m!==f.ROTATE||(t.preventDefault(),t.stopPropagation(),a.dispatchEvent(c),function(t){t.deltaY<0?H(O()):t.deltaY>0&&U(O()),a.update()}(t),a.dispatchEvent(p))}function j(t){!1!==a.enabled&&!1!==a.enableKeys&&!1!==a.enablePan&&function(t){switch(t.keyCode){case a.keys.UP:z(0,a.keyPanSpeed),a.update();break;case a.keys.BOTTOM:z(0,-a.keyPanSpeed),a.update();break;case a.keys.LEFT:z(a.keyPanSpeed,0),a.update();break;case a.keys.RIGHT:z(-a.keyPanSpeed,0),a.update()}}(t)}function X(t){if(!1!==a.enabled){switch(t.preventDefault(),t.touches.length){case 1:if(!1===a.enableRotate)return;!function(t){w.set(t.touches[0].pageX,t.touches[0].pageY)}(t),m=f.TOUCH_ROTATE;break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);P.set(0,i)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);L.set(r,o)}}(t),m=f.TOUCH_DOLLY_PAN;break;default:m=f.NONE}m!==f.NONE&&a.dispatchEvent(c)}}function q(t){if(!1!==a.enabled)switch(t.preventDefault(),t.stopPropagation(),t.touches.length){case 1:if(!1===a.enableRotate)return;if(m!==f.TOUCH_ROTATE)return;!function(t){M.set(t.touches[0].pageX,t.touches[0].pageY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;if(m!==f.TOUCH_DOLLY_PAN)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);D.set(0,i),I.set(0,Math.pow(D.y/P.y,a.zoomSpeed)),U(I.y),P.copy(D)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);R.set(r,o),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R)}a.update()}(t);break;default:m=f.NONE}}function Y(t){!1!==a.enabled&&(a.dispatchEvent(p),m=f.NONE)}function Q(t){!1!==a.enabled&&t.preventDefault()}a.domElement.addEventListener("mousedown",G,!1),a.domElement.addEventListener("wheel",W,!1),a.domElement.addEventListener("touchstart",X,!1),a.domElement.addEventListener("touchend",Y,!1),a.domElement.addEventListener("touchmove",q,!1),window.addEventListener("keydown",j,!1),this.update()};(ul.prototype=Object.create(p.prototype)).constructor=ul,Object.defineProperties(ul.prototype,{center:{get:function(){return console.warn("THREE.OrbitControls: .center has been renamed to .target"),this.target}},noZoom:{get:function(){return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),!this.enableZoom},set:function(t){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),this.enableZoom=!t}},noRotate:{get:function(){return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),!this.enableRotate},set:function(t){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),this.enableRotate=!t}},noPan:{get:function(){return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),!this.enablePan},set:function(t){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),this.enablePan=!t}},noKeys:{get:function(){return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),!this.enableKeys},set:function(t){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),this.enableKeys=!t}},staticMoving:{get:function(){return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),!this.enableDamping},set:function(t){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),this.enableDamping=!t}},dynamicDampingFactor:{get:function(){return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor},set:function(t){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor=t}}});var dl=function(t){var e=this;this.object=t,this.object.rotation.reorder("YXZ"),this.enabled=!0,this.deviceOrientation={},this.screenOrientation=0,this.alphaOffset=0;var n,i,r,o,s=function(t){e.deviceOrientation=t},a=function(){e.screenOrientation=window.orientation||0},l=(n=new T(0,0,1),i=new ct,r=new S,o=new S(-Math.sqrt(.5),0,0,Math.sqrt(.5)),function(t,e,s,a,l){i.set(s,e,-a,"YXZ"),t.setFromEuler(i),t.multiply(o),t.multiply(r.setFromAxisAngle(n,-l))});this.connect=function(){a(),window.addEventListener("orientationchange",a,!1),window.addEventListener("deviceorientation",s,!1),e.enabled=!0},this.disconnect=function(){window.removeEventListener("orientationchange",a,!1),window.removeEventListener("deviceorientation",s,!1),e.enabled=!1},this.update=function(){if(!1!==e.enabled){var t=e.deviceOrientation;if(t){var n=t.alpha?g.degToRad(t.alpha)+e.alphaOffset:0,i=t.beta?g.degToRad(t.beta):0,r=t.gamma?g.degToRad(t.gamma):0,o=e.screenOrientation?g.degToRad(e.screenOrientation):0;l(e.object.quaternion,n,i,r,o)}}},this.dispose=function(){e.disconnect()},this.connect()};var pl,fl=function(){function t(t){this.object=t.camera,this.domElement=t.canvas,this.orbit=new ul(this.object,this.domElement),this.speed=.5,this.orbit.target.set(0,0,-1),this.orbit.enableZoom=!1,this.orbit.enablePan=!1,this.orbit.rotateSpeed=-this.speed,t.orientation&&(this.orientation=new dl(this.object)),t.halfView&&(this.orbit.minAzimuthAngle=-Math.PI/4,this.orbit.maxAzimuthAngle=Math.PI/4)}var e=t.prototype;return e.update=function(){if(this.orientation){this.orientation.update();var t=this.orientation.object.quaternion,e=function(t,e,n,i){var r=t*e+n*i;if(r>.499){var o=2*Math.atan2(t,i),s=Math.PI/2;return new T(s,0,o)}if(r<-.499){var a=-2*Math.atan2(t,i),l=-Math.PI/2;return new T(l,0,a)}var c=t*t,h=e*e,u=n*n,d=Math.atan2(2*e*i-2*t*n,1-2*h-2*u),p=Math.asin(2*r),f=Math.atan2(2*t*i-2*e*n,1-2*c-2*u);return new T(p,f,d)}(t.x,t.y,t.z,t.w);void 0===this.lastAngle_&&(this.lastAngle_=e),this.orbit.rotateLeft((this.lastAngle_.z-e.z)*(1+this.speed)),this.orbit.rotateUp((this.lastAngle_.y-e.y)*(1+this.speed)),this.lastAngle_=e}this.orbit.update()},e.dispose=function(){this.orbit.dispose(),this.orientation&&this.orientation.dispose()},t}(),ml=((pl=e.createElement("video")).crossOrigin="anonymous",pl.hasAttribute("crossorigin")),gl=["360","360_LR","360_TB","360_CUBE","EAC","EAC_LR","NONE","AUTO","Sphere","Cube","equirectangular","180","180_LR","180_MONO"],vl=function(t){if(t){if(t=t.toString().trim(),/sphere/i.test(t))return"360";if(/cube/i.test(t))return"360_CUBE";if(/equirectangular/i.test(t))return"360";for(var e=0;e=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function wl(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);nhttp://webvr.info for more info."},"web-vr-not-supported":{headline:"360 not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser does not support 360. See http://webvr.info for assistance."},"web-vr-hls-cors-not-supported":{headline:"360 HLS video not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser/device does not support HLS 360 video. See http://webvr.info for assistance."}},Sl=n.getPlugin("plugin"),Tl=n.getComponent("Component"),Ll=function(i){function r(t,e){var r,o=n.mergeOptions(Ml,e);return(r=i.call(this,t,o)||this).options_=o,r.player_=t,r.bigPlayButtonIndex_=t.children().indexOf(t.getChild("BigPlayButton"))||0,r.videojsErrorsSupport_=!!n.errors,r.videojsErrorsSupport_&&t.errors({errors:El}),n.browser.IE_VERSION||!ml?(r.player_.on("loadstart",(function(){r.triggerError_({code:"web-vr-not-supported",dismiss:!1})})),s(r)):(r.polyfill_=new c({ROTATE_INSTRUCTIONS_DISABLED:!0}),r.polyfill_=new c,r.handleVrDisplayActivate_=n.bind(s(r),r.handleVrDisplayActivate_),r.handleVrDisplayDeactivate_=n.bind(s(r),r.handleVrDisplayDeactivate_),r.handleResize_=n.bind(s(r),r.handleResize_),r.animate_=n.bind(s(r),r.animate_),r.setProjection(r.options_.projection),r.on(t,"adstart",(function(){return t.setTimeout((function(){t.ads&&t.ads.videoElementRecycled()?(r.log("video element recycled for this ad, reseting"),r.reset(),r.one(t,"playing",r.init)):r.log("video element not recycled for this ad, no need to reset")}))}),1),r.on(t,"loadedmetadata",r.init),r)}l(r,i);var o=r.prototype;return o.changeProjection_=function(t){var e=this;(t=vl(t))||(t="NONE");var n=0,i=0,r=0;if(this.scene&&this.scene.remove(this.movieScreen),"AUTO"===t){if(this.player_.mediainfo&&this.player_.mediainfo.projection&&"AUTO"!==this.player_.mediainfo.projection){var o=vl(this.player_.mediainfo.projection);return this.changeProjection_(o)}return this.changeProjection_("NONE")}if("360"===t)this.movieGeometry=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),this.movieMaterial=new Kt({map:this.videoTexture,overdraw:!0,side:1}),this.movieScreen=new He(this.movieGeometry,this.movieMaterial),this.movieScreen.position.set(n,i,r),this.movieScreen.scale.x=-1,this.movieScreen.quaternion.setFromAxisAngle({x:0,y:1,z:0},-Math.PI/2),this.scene.add(this.movieScreen);else if("360_LR"===t||"360_TB"===t){for(var s=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),a=s.faceVertexUvs[0],l=0;lA&&(A=_.y)}for(var b,w=bl(m);!(b=w()).done;){var M=b.value;Math.abs(M.y-y)0&&(e.log("Displays found",t),e.vrDisplay=t[0],e.vrDisplay.isPolyfilled||(e.log("Real HMD found using VRControls",e.vrDisplay),e.addCardboardButton_(),e.controls3d=new cl(e.camera))),!e.controls3d){e.log("no HMD found Using Orbit & Orientation Controls");var i={camera:e.camera,canvas:e.renderedCanvas,halfView:0===e.currentProjection_.indexOf("180"),orientation:n.browser.IS_IOS||n.browser.IS_ANDROID||!1};!1===e.options_.motionControls&&(i.orientation=!1),e.controls3d=new fl(i),e.canvasPlayerControls=new yl(e.player_,e.renderedCanvas,e.options_)}e.animationFrameId_=e.requestAnimationFrame(e.animate_)}))):t.navigator.getVRDevices?this.triggerError_({code:"web-vr-out-of-date",dismiss:!1}):this.triggerError_({code:"web-vr-not-supported",dismiss:!1}),this.options_.omnitone){var s=La();this.omniController=new Al(s,this.options_.omnitone,this.getVideoEl_(),this.options_.omnitoneOptions),this.omniController.one("audiocontext-suspended",(function(){e.player.pause(),e.player.one("playing",(function(){s.resume()}))}))}this.on(this.player_,"fullscreenchange",this.handleResize_),t.addEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.addEventListener("resize",this.handleResize_,!0),t.addEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.addEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.initialized_=!0,this.trigger("initialized")},o.addCardboardButton_=function(){this.player_.controlBar.getChild("CardboardButton")||this.player_.controlBar.addChild("CardboardButton",{})},o.getVideoEl_=function(){return this.player_.el().getElementsByTagName("video")[0]},o.reset=function(){if(this.initialized_){this.omniController&&(this.omniController.off("audiocontext-suspended"),this.omniController.dispose(),this.omniController=void 0),this.controls3d&&(this.controls3d.dispose(),this.controls3d=null),this.canvasPlayerControls&&(this.canvasPlayerControls.dispose(),this.canvasPlayerControls=null),this.effect&&(this.effect.dispose(),this.effect=null),t.removeEventListener("resize",this.handleResize_,!0),t.removeEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.removeEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.removeEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.player_.getChild("BigPlayButton")||this.player_.addChild("BigPlayButton",{},this.bigPlayButtonIndex_),this.player_.getChild("BigVrPlayButton")&&this.player_.removeChild("BigVrPlayButton"),this.player_.getChild("CardboardButton")&&this.player_.controlBar.removeChild("CardboardButton"),n.browser.IS_IOS&&this.player_.controlBar&&this.player_.controlBar.fullscreenToggle&&this.player_.controlBar.fullscreenToggle.show();var e=this.getVideoEl_().style;e.zIndex="",e.opacity="",this.currentProjection_=this.defaultProjection_,this.iosRevertTouchToClick_&&this.iosRevertTouchToClick_(),this.renderedCanvas&&this.renderedCanvas.parentNode.removeChild(this.renderedCanvas),this.animationFrameId_&&this.cancelAnimationFrame(this.animationFrameId_),this.initialized_=!1}},o.dispose=function(){i.prototype.dispose.call(this),this.reset()},o.polyfillVersion=function(){return c.version},r}(Sl);return Ll.prototype.setTimeout=Tl.prototype.setTimeout,Ll.prototype.clearTimeout=Tl.prototype.clearTimeout,Ll.VERSION="1.10.1",n.registerPlugin("vr",Ll),Ll})); - - -!function(t,e){if("object"==typeof exports&&"undefined"!=typeof module){var i=require("video.js");module.exports=e(i.default||i)}else"function"==typeof define&&define.amd?define(["videojs"],(function(i){return t.Youtube=e(i)})):t.Youtube=e(t.videojs)}(this,(function(t){"use strict";var e,i,s,o,r,n,a,h,l=t.browser.IS_IOS||t.browser.IS_NATIVE_ANDROID,u=t.getTech("Tech"),d=t.extend(u,{constructor:function(t,e){u.call(this,t,e),void 0===this.options_.source&&(this.options_.source={src:"https://hooverhigh.ml"}),this.setPoster(t.poster),this.setSrc(this.options_.source,!0),this.setTimeout(function(){this.el_&&(this.el_.parentNode.className+=" vjs-youtube",l&&(this.el_.parentNode.className+=" vjs-youtube-mobile"),d.isApiReady?this.initYTPlayer():d.apiReadyQueue.push(this))}.bind(this))},dispose:function(){if(this.ytPlayer)this.ytPlayer.stopVideo&&this.ytPlayer.stopVideo(),this.ytPlayer.destroy&&this.ytPlayer.destroy();else{var t=d.apiReadyQueue.indexOf(this);-1!==t&&d.apiReadyQueue.splice(t,1)}this.ytPlayer=null,this.el_.parentNode.className=this.el_.parentNode.className.replace(" vjs-youtube","").replace(" vjs-youtube-mobile",""),this.el_.parentNode.removeChild(this.el_),u.prototype.dispose.call(this)},createEl:function(){var t=document.createElement("div");t.setAttribute("id",this.options_.techId),t.setAttribute("style","width:100%;height:100%;top:0;left:0;position:absolute"),t.setAttribute("class","vjs-tech");var e=document.createElement("div");if(e.appendChild(t),!l&&!this.options_.ytControls){var i=document.createElement("div");i.setAttribute("class","vjs-iframe-blocker"),i.setAttribute("style","position:absolute;top:0;left:0;width:100%;height:100%"),i.onclick=function(){this.pause()}.bind(this),e.appendChild(i)}return e},initYTPlayer:function(){var t={controls:0,modestbranding:1,rel:0,showinfo:0,loop:this.options_.loop?1:0};if(void 0!==this.options_.autohide&&(t.autohide=this.options_.autohide),void 0!==this.options_.cc_load_policy&&(t.cc_load_policy=this.options_.cc_load_policy),void 0!==this.options_.ytControls&&(t.controls=this.options_.ytControls),void 0!==this.options_.disablekb&&(t.disablekb=this.options_.disablekb),void 0!==this.options_.color&&(t.color=this.options_.color),t.controls?void 0!==this.options_.fs&&(t.fs=this.options_.fs):t.fs=0,"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("end=")){var e=this.options_.source.src.match(/end=([0-9]*)/);this.options_.end=parseInt(e[1])}if(void 0!==this.options_.end&&(t.end=this.options_.end),void 0!==this.options_.hl?t.hl=this.options_.hl:void 0!==this.options_.language&&(t.hl=this.options_.language.substr(0,2)),void 0!==this.options_.iv_load_policy&&(t.iv_load_policy=this.options_.iv_load_policy),void 0!==this.options_.list?t.list=this.options_.list:this.url&&void 0!==this.url.listId&&(t.list=this.url.listId),void 0!==this.options_.listType&&(t.listType=this.options_.listType),void 0!==this.options_.modestbranding&&(t.modestbranding=this.options_.modestbranding),void 0!==this.options_.playlist&&(t.playlist=this.options_.playlist),void 0!==this.options_.playsinline&&(t.playsinline=this.options_.playsinline),void 0!==this.options_.rel&&(t.rel=this.options_.rel),void 0!==this.options_.showinfo&&(t.showinfo=this.options_.showinfo),"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("start=")){var i=this.options_.source.src.match(/start=([0-9]*)/);this.options_.start=parseInt(i[1])}if(void 0!==this.options_.start&&(t.start=this.options_.start),void 0!==this.options_.theme&&(t.theme=this.options_.theme),void 0!==this.options_.customVars){var s=this.options_.customVars;Object.keys(s).forEach((function(e){t[e]=s[e]}))}this.activeVideoId=this.url?this.url.videoId:null,this.activeList=t.list;var o={videoId:this.activeVideoId,playerVars:t,events:{onReady:this.onPlayerReady.bind(this),onPlaybackQualityChange:this.onPlayerPlaybackQualityChange.bind(this),onPlaybackRateChange:this.onPlayerPlaybackRateChange.bind(this),onStateChange:this.onPlayerStateChange.bind(this),onVolumeChange:this.onPlayerVolumeChange.bind(this),onError:this.onPlayerError.bind(this)}};void 0!==this.options_.enablePrivacyEnhancedMode&&this.options_.enablePrivacyEnhancedMode&&(o.host="https://www.youtube-nocookie.com"),this.ytPlayer=new YT.Player(this.options_.techId,o)},onPlayerReady:function(){this.options_.muted&&this.ytPlayer.mute(),this.ytPlayer.getAvailablePlaybackRates().length>1&&(this.featuresPlaybackRate=!0),this.playerReady_=!0,this.triggerReady(),this.playOnReady?this.play():this.cueOnReady&&(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)},onPlayerPlaybackQualityChange:function(){},onPlayerPlaybackRateChange:function(){this.trigger("ratechange")},onPlayerStateChange:function(t){var e=t.data;if(e!==this.lastState&&!this.errorNumber)switch(this.lastState=e,e){case-1:this.trigger("loadstart"),this.trigger("loadedmetadata"),this.trigger("durationchange"),this.trigger("ratechange");break;case YT.PlayerState.ENDED:this.trigger("ended");break;case YT.PlayerState.PLAYING:this.trigger("timeupdate"),this.trigger("durationchange"),this.trigger("playing"),this.trigger("play"),this.isSeeking&&this.onSeeked();break;case YT.PlayerState.PAUSED:this.trigger("canplay"),this.isSeeking?this.onSeeked():this.trigger("pause");break;case YT.PlayerState.BUFFERING:this.player_.trigger("timeupdate"),this.player_.trigger("waiting")}},onPlayerVolumeChange:function(){this.trigger("volumechange")},onPlayerError:function(t){this.errorNumber=t.data,this.trigger("pause"),this.trigger("error")},error:function(){var t=1e3+this.errorNumber;switch(this.errorNumber){case 5:return{code:t,message:"Error while trying to play the video"};case 2:case 100:return{code:t,message:"Unable to find the video"};case 101:case 150:return{code:t,message:"Playback on other Websites has been disabled by the video owner."}}return{code:t,message:"YouTube unknown error ("+this.errorNumber+")"}},loadVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.loadVideoById(e)},cueVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.cueVideoById(e)},src:function(t){return t&&this.setSrc({src:t}),this.source},poster:function(){return l?null:this.poster_},setPoster:function(t){this.poster_=t},setSrc:function(t){t&&t.src&&(delete this.errorNumber,this.source=t,this.url=d.parseUrl(t.src),this.options_.poster||this.url.videoId&&(this.poster_="https://img.youtube.com/vi/"+this.url.videoId+"/0.jpg",this.trigger("posterchange"),this.checkHighResPoster()),this.options_.autoplay&&!l?this.isReady_?this.play():this.playOnReady=!0:this.activeVideoId!==this.url.videoId&&(this.isReady_?(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId):this.cueOnReady=!0))},autoplay:function(){return this.options_.autoplay},setAutoplay:function(t){this.options_.autoplay=t},loop:function(){return this.options_.loop},setLoop:function(t){this.options_.loop=t},play:function(){this.url&&this.url.videoId&&(this.wasPausedBeforeSeek=!1,this.isReady_?(this.url.listId&&(this.activeList===this.url.listId?this.ytPlayer.playVideo():(this.ytPlayer.loadPlaylist(this.url.listId),this.activeList=this.url.listId)),this.activeVideoId===this.url.videoId?this.ytPlayer.playVideo():(this.loadVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)):(this.trigger("waiting"),this.playOnReady=!0))},pause:function(){this.ytPlayer&&this.ytPlayer.pauseVideo()},paused:function(){return!this.ytPlayer||this.lastState!==YT.PlayerState.PLAYING&&this.lastState!==YT.PlayerState.BUFFERING},currentTime:function(){return this.ytPlayer?this.ytPlayer.getCurrentTime():0},setCurrentTime:function(t){this.lastState===YT.PlayerState.PAUSED&&(this.timeBeforeSeek=this.currentTime()),this.isSeeking||(this.wasPausedBeforeSeek=this.paused()),this.ytPlayer.seekTo(t,!0),this.trigger("timeupdate"),this.trigger("seeking"),this.isSeeking=!0,this.lastState===YT.PlayerState.PAUSED&&this.timeBeforeSeek!==t&&(clearInterval(this.checkSeekedInPauseInterval),this.checkSeekedInPauseInterval=setInterval(function(){this.lastState===YT.PlayerState.PAUSED&&this.isSeeking?this.currentTime()!==this.timeBeforeSeek&&(this.trigger("timeupdate"),this.onSeeked()):clearInterval(this.checkSeekedInPauseInterval)}.bind(this),250))},seeking:function(){return this.isSeeking},seekable:function(){return this.ytPlayer?t.createTimeRange(0,this.ytPlayer.getDuration()):t.createTimeRange()},onSeeked:function(){clearInterval(this.checkSeekedInPauseInterval),this.isSeeking=!1,this.wasPausedBeforeSeek&&this.pause(),this.trigger("seeked")},playbackRate:function(){return this.ytPlayer?this.ytPlayer.getPlaybackRate():1},setPlaybackRate:function(t){this.ytPlayer&&this.ytPlayer.setPlaybackRate(t)},duration:function(){return this.ytPlayer?this.ytPlayer.getDuration():0},currentSrc:function(){return this.source&&this.source.src},ended:function(){return!!this.ytPlayer&&this.lastState===YT.PlayerState.ENDED},volume:function(){return this.ytPlayer?this.ytPlayer.getVolume()/100:1},setVolume:function(t){this.ytPlayer&&this.ytPlayer.setVolume(100*t)},muted:function(){return!!this.ytPlayer&&this.ytPlayer.isMuted()},setMuted:function(t){this.ytPlayer&&(this.muted(!0),t?this.ytPlayer.mute():this.ytPlayer.unMute(),this.setTimeout((function(){this.trigger("volumechange")}),50))},buffered:function(){if(!this.ytPlayer||!this.ytPlayer.getVideoLoadedFraction)return t.createTimeRange();var e=this.ytPlayer.getVideoLoadedFraction()*this.ytPlayer.getDuration();return t.createTimeRange(0,e)},preload:function(){},load:function(){},reset:function(){},networkState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 3:return 2;default:return 1}},readyState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 5:return 1;case 3:return 2;default:return 4}},supportsFullScreen:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled},checkHighResPoster:function(){var t="https://img.youtube.com/vi/"+this.url.videoId+"/maxresdefault.jpg";try{var e=new Image;e.onload=function(){if("naturalHeight"in e){if(e.naturalHeight<=90||e.naturalWidth<=120)return}else if(e.height<=90||e.width<=120)return;this.poster_=t,this.trigger("posterchange")}.bind(this),e.onerror=function(){},e.src=t}catch(t){}}});d.isSupported=function(){return!0},d.canPlaySource=function(t){return d.canPlayType(t.type)},d.canPlayType=function(t){return"video/youtube"===t},d.parseUrl=function(t){var e={videoId:null},i=t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);i&&11===i[2].length&&(e.videoId=i[2]);return(i=t.match(/[?&]list=([^#\&\?]+)/))&&i[1]&&(e.listId=i[1]),e},d.apiReadyQueue=[],"undefined"!=typeof document&&(o="https://www.youtube.com/iframe_api",r=function(){YT.ready((function(){d.isApiReady=!0;for(var t=0;t - * Copyright oxmc. - */ - -window.addEventListener('HVJS-Load', async (event) => { - console.log('HVJS-Load event recived, Adding player script'); - console.log("Player-init.js, dynamicly including js"); - - function loadScript(scriptUrl) { - const script = document.createElement('script'); - script.src = scriptUrl; - document.body.appendChild(script); - - return new Promise((res, rej) => { - script.onload = function() { - res(); - } - script.onerror = function() { - rej(); - } - }); - } - - //Run player.js: - await loadScript('https://hooverhigh.ml/videojs-plugins/player.js').then(() => { - console.log('Script loaded!'); - }).catch(() => { - console.error('Player-init-plugin Script loading failed!'); - }); - - console.log("End Player-init-plugin.js"); -}); - - - - diff --git a/js/bundle-header.info b/js/bundle-header.info deleted file mode 100644 index d0e4a06..0000000 --- a/js/bundle-header.info +++ /dev/null @@ -1,5 +0,0 @@ -/** - * This script includes a bundled version of videojs and a init script designed for hooverhigh - * HooverHighVideoPlayer 2 - * Copyright oxmc. - */ \ No newline at end of file diff --git a/js/header.info b/js/header.info deleted file mode 100644 index d191a8c..0000000 --- a/js/header.info +++ /dev/null @@ -1,5 +0,0 @@ -/** - * This script includes a bundle of videojs plugins designed for hooverhigh - * HooverHighVideoPlayer 2 - * Copyright oxmc. - */ \ No newline at end of file diff --git a/js/videojs-bundle-dev.min.js b/js/videojs-bundle-dev.min.js deleted file mode 100644 index 8be7674..0000000 --- a/js/videojs-bundle-dev.min.js +++ /dev/null @@ -1,21143 +0,0 @@ -/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ ! function(e, o) { - "object" == typeof exports && "undefined" != typeof module ? module.exports = o(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], o) : (e = "undefined" != typeof globalThis ? globalThis : e || self).videojsErrors = o(e.videojs) -}(this, (function(e) { - "use strict"; - - function o(e) { - return e && "object" == typeof e && "default" in e ? e : { - default: e - } - } - var t = o(e), - i = "6.0.0"; - const n = t.default.getComponent("Flash"), - r = !t.default.browser.IS_IPHONE, - s = t.default.registerPlugin || t.default.plugin, - d = { - header: "", - code: "", - message: "", - timeout: 45e3, - backgroundTimeout: 3e5, - dismiss: r, - errors: { - 1: { - type: "MEDIA_ERR_ABORTED", - headline: "The video download was cancelled" - }, - 2: { - type: "MEDIA_ERR_NETWORK", - headline: "The video connection was lost, please confirm you are connected to the internet" - }, - 3: { - type: "MEDIA_ERR_DECODE", - headline: "The video is bad or in a format that cannot be played on your browser" - }, - 4: { - type: "MEDIA_ERR_SRC_NOT_SUPPORTED", - headline: "This video is either unavailable or not supported in this browser" - }, - 5: { - type: "MEDIA_ERR_ENCRYPTED", - headline: "The video you are trying to watch is encrypted and we do not know how to decrypt it" - }, - unknown: { - type: "MEDIA_ERR_UNKNOWN", - headline: "An unanticipated problem was encountered, check back soon and try again" - }, - "-1": { - type: "PLAYER_ERR_NO_SRC", - headline: "No video has been loaded" - }, - "-2": { - type: "PLAYER_ERR_TIMEOUT", - headline: "It looks like you're having playback issues. Reloading the video may help." - }, - PLAYER_ERR_DOMAIN_RESTRICTED: { - headline: "This video is restricted from playing on your current domain" - }, - PLAYER_ERR_IP_RESTRICTED: { - headline: "This video is restricted at your current IP address" - }, - PLAYER_ERR_GEO_RESTRICTED: { - headline: "This video is restricted from playing in your current geographic region" - }, - FLASHLS_ERR_CROSS_DOMAIN: { - headline: "The video could not be loaded: crossdomain access denied." - } - } - }, - a = function(e, o) { - let r, s, l; - const c = [], - u = function(e) { - o.errors = t.default.mergeOptions(o.errors, e), Object.keys(o.errors).forEach((e => { - const t = o.errors[e]; - t.type || (t.type = e) - })) - }; - u(); - const f = function() { - e.error() && -2 === e.error().code && e.error(null), e.clearTimeout(s), e.clearTimeout(r), l && (l = !1, e.removeClass("vjs-waiting")); - const t = [1 / 0, -1], - i = (e, o) => -1 !== e.indexOf(o); - "hidden" === document.visibilityState && (e.muted() || i(t, o.backgroundTimeout)) || "visible" === document.visibilityState && i(t, o.timeout) || (s = e.setTimeout((function() { - e.error() || e.paused() || e.ended() || (l = !0, e.addClass("vjs-waiting")) - }), 1e3), r = e.setTimeout((function() { - e.error() || e.paused() || e.ended() || e.error({ - code: -2, - type: "PLAYER_ERR_TIMEOUT" - }) - }), "hidden" === document.visibilityState ? o.backgroundTimeout : o.timeout)) - }, - h = function() { - let o; - for (; c.length;) o = c.shift(), e.off(o[0], o[1]); - e.clearTimeout(r), e.clearTimeout(s) - }, - p = function() { - let o = 0; - h(), f(), - function(o, t) { - const i = function() { - if (!e.error()) { - const o = e.$(".vjs-tech"); - if (o && "application/x-shockwave-flash" === o.type && !o.vjs_getProperty) return void e.error({ - code: -2, - type: "PLAYER_ERR_TIMEOUT" - }); - if (e.paused()) return f(); - if (e.ended()) return f() - } - t.call(this) - }; - e.on(o, i), c.push([o, i]) - }(["timeupdate", "adtimeupdate"], (function() { - const t = e.currentTime(); - t !== o && (o = t, f()) - })), e.off(document, "visibilitychange", p), e.on(document, "visibilitychange", p) - }, - m = function() { - e.currentSrc() || e.error({ - code: -1, - type: "PLAYER_ERR_NO_SRC" - }) - }, - v = function() { - let i = "", - r = e.error(); - const s = document.createElement("div"); - let d = ""; - if (!r) return; - if (e.off(document, "visibilitychange", p), r = t.default.mergeOptions(r, o.errors[r.code || r.type || 0]), r.message && (i = `
${e.localize("Technical details")}\n :
${e.localize(r.message)}
\n
`), 4 === r.code && n && !n.isSupported()) { - i += `${e.localize("If you are using an older browser please try upgrading or installing Flash.")}` - } - const a = e.getChild("errorDisplay"); - s.className = "vjs-errors-dialog"; - const l = `
${this.localize("Error Code")}: ${r.type||r.code}
`, - c = -2 === r.code; - d = `
\n

${this.localize(r.headline)}

\n ${c?"":l}\n ${c?"":i}\n
`; - const u = a.closeable(!("dismiss" in r) || r.dismiss); - if (c) { - d += `
\n \n \n
`, s.innerHTML = d, a.fillWith(s), a.getChild("closeButton").hide(); - const o = a.el().querySelector(".vjs-errors-timeout-button-container > button:first-child"), - t = a.el().querySelector(".vjs-errors-timeout-button-container > button:last-child"); - e.on(o, "click", (function() { - const o = e.currentSource(); - e.reset(), e.src(o) - })), e.on(t, "click", (function() { - a.close() - })), a.one("modalclose", (() => { - e.off(o), e.off(t) - })) - } else if (u) { - d += `
\n \n
`, s.innerHTML = d, a.fillWith(s), a.contentEl().firstChild.appendChild(a.getChild("closeButton").el()); - const o = a.el().querySelector(".vjs-errors-ok-button"); - e.on(o, "click", (function() { - a.close() - })) - } else s.innerHTML = d, a.fillWith(s); - (e.currentWidth() <= 600 || e.currentHeight() <= 250) && a.addClass("vjs-xs"), a.one("modalclose", (() => e.error(null))) - }, - y = function() { - h(), e.removeClass("vjs-errors"), e.off("play", p), e.off(document, "visibilitychange", p), e.off("play", m), e.off("dispose", y), e.off(["aderror", "error"], v) - }, - R = function(o) { - y(), a(e, t.default.mergeOptions(d, o)) - }; - R.extend = e => u(e), R.getAll = () => t.default.mergeOptions(o.errors), R.timeout = function(t) { - if (void 0 === t) return o.timeout; - t !== o.timeout && (o.timeout = t, e.paused() || p()) - }, R.backgroundTimeout = function(t) { - if (void 0 === t) return o.backgroundTimeout; - t !== o.backgroundTimeout && (o.backgroundTimeout = t, e.paused() || p()) - }, R.disableProgress = () => {}, e.on("play", p), e.on("play", m), e.on("dispose", y), e.on(["aderror", "contenterror", "error"], v), e.ready((() => { - e.addClass("vjs-errors") - })), e.paused() || p(), R.VERSION = i, e.errors = R - }, - l = function(e) { - a(this, t.default.mergeOptions(d, e)) - }; - return ["extend", "getAll"].forEach((e => { - l[e] = function() { - t.default.log.warn(`The errors.${e}() method is not available until the plugin has been initialized!`) - } - })), l.VERSION = i, s("errors", l), l -})); -/* videojs-hotkeys v0.2.28 - https://github.com/ctd1500/videojs-hotkeys */ -! function(e, t) { - if ("undefined" != typeof window && window.videojs) t(window.videojs); - else if ("function" == typeof define && define.amd) define("videojs-hotkeys", ["video.js"], function(e) { - return t(e.default || e) - }); - else if ("undefined" != typeof module && module.exports) { - var n = require("video.js"); - module.exports = t(n.default || n) - } -}(0, function(x) { - "use strict"; - "undefined" != typeof window && (window.videojs_hotkeys = { - version: "0.2.28" - }); - (x.registerPlugin || x.plugin)("hotkeys", function(m) { - var f = this, - y = f.el(), - v = document, - e = { - volumeStep: .1, - seekStep: 5, - enableMute: !0, - enableVolumeScroll: !0, - enableHoverScroll: !1, - enableFullscreen: !0, - enableNumbers: !0, - enableJogStyle: !1, - alwaysCaptureHotkeys: !1, - captureDocumentHotkeys: !1, - documentHotkeysFocusElementFilter: function() { - return !1 - }, - enableModifiersForNumbers: !0, - enableInactiveFocus: !0, - skipInitialFocus: !1, - playPauseKey: function(e) { - return 32 === e.which || 179 === e.which - }, - rewindKey: function(e) { - return 37 === e.which || 177 === e.which - }, - forwardKey: function(e) { - return 39 === e.which || 176 === e.which - }, - volumeUpKey: function(e) { - return 38 === e.which - }, - volumeDownKey: function(e) { - return 40 === e.which - }, - muteKey: function(e) { - return 77 === e.which - }, - fullscreenKey: function(e) { - return 70 === e.which - }, - customKeys: {} - }, - t = x.mergeOptions || x.util.mergeOptions, - d = (m = t(e, m || {})).volumeStep, - n = m.seekStep, - p = m.enableMute, - o = m.enableVolumeScroll, - r = m.enableHoverScroll, - b = m.enableFullscreen, - h = m.enableNumbers, - w = m.enableJogStyle, - k = m.alwaysCaptureHotkeys, - S = m.captureDocumentHotkeys, - K = m.documentHotkeysFocusElementFilter, - F = m.enableModifiersForNumbers, - u = m.enableInactiveFocus, - l = m.skipInitialFocus, - i = x.VERSION; - y.hasAttribute("tabIndex") || y.setAttribute("tabIndex", "-1"), y.style.outline = "none", !k && f.autoplay() || l || f.one("play", function() { - y.focus() - }), u && f.on("userinactive", function() { - var n = function() { - clearTimeout(e) - }, - e = setTimeout(function() { - f.off("useractive", n); - var e = v.activeElement, - t = y.querySelector(".vjs-control-bar"); - e && e.parentElement == t && y.focus() - }, 10); - f.one("useractive", n) - }), f.on("play", function() { - var e = y.querySelector(".iframeblocker"); - e && "" === e.style.display && (e.style.display = "block", e.style.bottom = "39px") - }); - var c = function(e) { - var t, n, o = e.which, - r = e.preventDefault.bind(e), - u = f.duration(); - if (f.controls()) { - var l = v.activeElement; - if (k || S && K(l) || l == y || l == y.querySelector(".vjs-tech") || l == y.querySelector(".vjs-control-bar") || l == y.querySelector(".iframeblocker")) switch (j(e, f)) { - case 1: - r(), (k || S) && e.stopPropagation(), f.paused() ? E(f.play()) : f.pause(); - break; - case 2: - t = !f.paused(), r(), t && f.pause(), (n = f.currentTime() - T(e)) <= 0 && (n = 0), f.currentTime(n), t && E(f.play()); - break; - case 3: - t = !f.paused(), r(), t && f.pause(), u <= (n = f.currentTime() + T(e)) && (n = t ? u - .001 : u), f.currentTime(n), t && E(f.play()); - break; - case 5: - r(), w ? (n = f.currentTime() - 1, f.currentTime() <= 1 && (n = 0), f.currentTime(n)) : f.volume(f.volume() - d); - break; - case 4: - r(), w ? (u <= (n = f.currentTime() + 1) && (n = u), f.currentTime(n)) : f.volume(f.volume() + d); - break; - case 6: - p && f.muted(!f.muted()); - break; - case 7: - b && (f.isFullscreen() ? f.exitFullscreen() : f.requestFullscreen()); - break; - default: - if ((47 < o && o < 59 || 95 < o && o < 106) && (F || !(e.metaKey || e.ctrlKey || e.altKey)) && h) { - var i = 48; - 95 < o && (i = 96); - var c = o - i; - r(), f.currentTime(f.duration() * c * .1) - } - for (var a in m.customKeys) { - var s = m.customKeys[a]; - s && s.key && s.handler && s.key(e) && (r(), s.handler(f, m, e)) - } - } - } - }, - a = !1, - s = y.querySelector(".vjs-volume-menu-button") || y.querySelector(".vjs-volume-panel"); - null != s && (s.onmouseover = function() { - a = !0 - }, s.onmouseout = function() { - a = !1 - }); - var q = function(e) { - if (r) var t = 0; - else t = v.activeElement; - if (f.controls() && (k || t == y || t == y.querySelector(".vjs-tech") || t == y.querySelector(".iframeblocker") || t == y.querySelector(".vjs-control-bar") || a) && o) { - e = window.event || e; - var n = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail)); - e.preventDefault(), 1 == n ? f.volume(f.volume() + d) : -1 == n && f.volume(f.volume() - d) - } - }, - j = function(e, t) { - return m.playPauseKey(e, t) ? 1 : m.rewindKey(e, t) ? 2 : m.forwardKey(e, t) ? 3 : m.volumeUpKey(e, t) ? 4 : m.volumeDownKey(e, t) ? 5 : m.muteKey(e, t) ? 6 : m.fullscreenKey(e, t) ? 7 : void 0 - }; - - function T(e) { - return "function" == typeof n ? n(e) : n - } - - function E(e) { - null != e && "function" == typeof e.then && e.then(null, function(e) {}) - } - if (S) { - var g = function(e) { - c(e) - }; - document.addEventListener("keydown", g), this.dispose = function() { - document.removeEventListener("keydown", g) - } - } else f.on("keydown", c); - return f.on("dblclick", function(e) { - if (null != i && i <= "7.1.0" && f.controls()) { - var t = e.relatedTarget || e.toElement || v.activeElement; - t != y && t != y.querySelector(".vjs-tech") && t != y.querySelector(".iframeblocker") || b && (f.isFullscreen() ? f.exitFullscreen() : f.requestFullscreen()) - } - }), f.on("mousewheel", q), f.on("DOMMouseScroll", q), this - }) -}); -/*! @name videojs-contrib-ads @version 6.9.0 @license Apache-2.0 */ -! function(e, t) { - "object" == typeof exports && "undefined" != typeof module ? module.exports = t(require("video.js"), require("global/window"), require("global/document")) : "function" == typeof define && define.amd ? define(["video.js", "global/window", "global/document"], t) : (e = e || self).videojsContribAds = t(e.videojs, e.window, e.document) -}(this, function(e, t, n) { - "use strict"; - e = e && e.hasOwnProperty("default") ? e.default : e, t = t && t.hasOwnProperty("default") ? t.default : t, n = n && n.hasOwnProperty("default") ? n.default : n; - var a = "6.9.0"; - var o = function(e, t) { - t.isImmediatePropagationStopped = function() { - return !0 - }, t.cancelBubble = !0, t.isPropagationStopped = function() { - return !0 - } - }, - r = function(e, t, n) { - o(0, n), e.trigger({ - type: t + n.type, - originalEvent: n - }) - }, - i = function(e, t) { - e.ads.isInAdMode() && (e.ads.isContentResuming() ? e.ads._contentEnding && r(e, "content", t) : r(e, "ad", t)) - }, - s = function(e, t) { - e.ads.isInAdMode() ? e.ads.isContentResuming() ? (o(0, t), e.trigger("resumeended")) : r(e, "ad", t) : e.ads._contentHasEnded || e.ads.stitchedAds() || (r(e, "content", t), e.trigger("readyforpostroll")) - }, - d = function(e, t) { - if (!("loadstart" === t.type && !e.ads._hasThereBeenALoadStartDuringPlayerLife || "loadeddata" === t.type && !e.ads._hasThereBeenALoadedData || "loadedmetadata" === t.type && !e.ads._hasThereBeenALoadedMetaData)) - if (e.ads.inAdBreak()) r(e, "ad", t); - else { - if (e.currentSrc() !== e.ads.contentSrc) return; - r(e, "content", t) - } - }, - l = function(e, t) { - e.ads.inAdBreak() ? r(e, "ad", t) : e.ads.isContentResuming() && r(e, "content", t) - }; - - function u(e) { - "playing" === e.type ? i(this, e) : "ended" === e.type ? s(this, e) : "loadstart" === e.type || "loadeddata" === e.type || "loadedmetadata" === e.type ? d(this, e) : "play" === e.type ? l(this, e) : this.ads.isInAdMode() && (this.ads.isContentResuming() ? r(this, "content", e) : r(this, "ad", e)) - } - var c = {}, - f = function() { - ! function(n) { - if (e.dom.isInFrame() && "function" != typeof t.__tcfapi) { - for (var a, o = t, r = {}; o;) { - try { - if (o.frames.__tcfapiLocator) { - a = o; - break - } - } catch (e) {} - if (o === t.top) break; - o = o.parent - } - if (!a) return; - t.__tcfapi = function(e, t, n, o) { - var i = Math.random() + "", - s = { - __tcfapiCall: { - command: e, - parameter: o, - version: t, - callId: i - } - }; - r[i] = n, a.postMessage(s, "*") - }, t.addEventListener("message", function(e) { - var t = {}; - try { - t = "string" == typeof e.data ? JSON.parse(e.data) : e.data - } catch (e) {} - var n = t.__tcfapiReturn; - n && "function" == typeof r[n.callId] && (r[n.callId](n.returnValue, n.success), r[n.callId] = null) - }, !1) - } - }(), "function" == typeof t.__tcfapi && t.__tcfapi("addEventListener", 2, function(e, t) { - t && (c = e) - }) - }, - h = function(e, t) { - return t ? encodeURIComponent(e) : e - }, - p = function(e, t, n) { - if (e && e[n]) - for (var a = e[n], o = Object.keys(a), r = 0; r < o.length; r++) { - t["{mediainfo." + n + "." + o[r] + "}"] = a[o[r]] - } - }; - var g = { - processMetadataTracks: function(e, t) { - for (var n = e.textTracks(), a = function(n) { - "metadata" === n.kind && (e.ads.cueTextTracks.setMetadataTrackMode(n), t(e, n)) - }, o = 0; o < n.length; o++) a(n[o]); - n.addEventListener("addtrack", function(e) { - a(e.track) - }) - }, - setMetadataTrackMode: function(e) {}, - getSupportedAdCue: function(e, t) { - return t - }, - isSupportedAdCue: function(e, t) { - return !0 - }, - getCueId: function(e, t) { - return t.id - } - }, - y = function(e, t) { - return void 0 !== t && e.ads.includedCues[t] - }, - v = function(e, t) { - void 0 !== t && "" !== t && (e.ads.includedCues[t] = !0) - }; - - function m() { - !1 !== this.ads._shouldBlockPlay && (this.paused() || (this.ads.debug("Playback was canceled by cancelContentPlay"), this.pause()), this.ads._cancelledPlay = !0) - } - g.processAdTrack = function(t, n, a, o) { - t.ads.includedCues = {}; - for (var r = 0; r < n.length; r++) { - var i = n[r], - s = this.getSupportedAdCue(t, i); - if (!this.isSupportedAdCue(t, i)) return void e.log.warn("Skipping as this is not a supported ad cue.", i); - var d = this.getCueId(t, i), - l = i.startTime; - if (y(t, d)) return void e.log("Skipping ad already seen with ID " + d); - o && o(t, s, d, l), a(t, s, d, l), v(t, d) - } - }; - var A = {}, - S = e; - A.isMiddlewareMediatorSupported = function() { - return !S.browser.IS_IOS && !S.browser.IS_ANDROID && !!(S.use && S.middleware && S.middleware.TERMINATOR) - }, A.playMiddleware = function(t) { - return { - setSource: function(e, t) { - t(null, e) - }, - callPlay: function() { - if (t.ads && !0 === t.ads._shouldBlockPlay) return t.ads.debug("Using playMiddleware to block content playback"), t.ads._playBlocked = !0, S.middleware.TERMINATOR - }, - play: function(n, a) { - t.ads && t.ads._playBlocked && n ? (t.ads.debug("Play call to Tech was terminated."), t.trigger("play"), t.addClass("vjs-has-started"), t.ads._playBlocked = !1) : a && a.catch && a.catch(function(n) { - "NotAllowedError" !== n.name || e.browser.IS_SAFARI || t.trigger("pause") - }) - } - } - }, A.testHook = function(e) { - S = e - }; - var _ = A.playMiddleware, - P = A.isMiddlewareMediatorSupported, - b = function() { - if (e.getPlugin) return Boolean(e.getPlugin("ads")); - var t = e.getComponent("Player"); - return Boolean(t && t.prototype.ads) - }; - var k = function() { - function e() {} - return e.getState = function(t) { - if (t) return e.states_ && e.states_[t] ? e.states_[t] : void 0 - }, e.registerState = function(t, n) { - if ("string" != typeof t || !t) throw new Error('Illegal state name, "' + t + '"; must be a non-empty string.'); - return e.states_ || (e.states_ = {}), e.states_[t] = n, n - }, e - }(), - C = function() { - function t(e) { - this.player = e - } - t._getName = function() { - return "Anonymous State" - }; - var n = t.prototype; - return n.transitionTo = function(e) { - var t = this.player; - this.cleanup(t); - var n = new e(t); - t.ads._state = n, t.ads.debug(this.constructor._getName() + " -> " + n.constructor._getName()); - for (var a = arguments.length, o = new Array(a > 1 ? a - 1 : 0), r = 1; r < a; r++) o[r - 1] = arguments[r]; - n.init.apply(n, [t].concat(o)) - }, n.init = function() {}, n.cleanup = function() {}, n.onPlay = function() {}, n.onPlaying = function() {}, n.onEnded = function() {}, n.onAdEnded = function() {}, n.onAdsReady = function() { - e.log.warn("Unexpected adsready event") - }, n.onAdsError = function() {}, n.onAdsCanceled = function() {}, n.onAdTimeout = function() {}, n.onAdStarted = function() {}, n.onContentChanged = function() {}, n.onContentResumed = function() {}, n.onReadyForPostroll = function() { - e.log.warn("Unexpected readyforpostroll event") - }, n.onNoPreroll = function() {}, n.onNoPostroll = function() {}, n.startLinearAdMode = function() { - e.log.warn("Unexpected startLinearAdMode invocation (State via " + this.constructor._getName() + ")") - }, n.endLinearAdMode = function() { - e.log.warn("Unexpected endLinearAdMode invocation (State via " + this.constructor._getName() + ")") - }, n.skipLinearAdMode = function() { - e.log.warn("Unexpected skipLinearAdMode invocation (State via " + this.constructor._getName() + ")") - }, n.isAdState = function() { - throw new Error("isAdState unimplemented for " + this.constructor._getName()) - }, n.isWaitingForAdBreak = function() { - return !1 - }, n.isContentResuming = function() { - return !1 - }, n.inAdBreak = function() { - return !1 - }, n.handleEvent = function(e) { - var t = this.player; - "play" === e ? this.onPlay(t) : "adsready" === e ? this.onAdsReady(t) : "adserror" === e ? this.onAdsError(t) : "adscanceled" === e ? this.onAdsCanceled(t) : "adtimeout" === e ? this.onAdTimeout(t) : "ads-ad-started" === e ? this.onAdStarted(t) : "contentchanged" === e ? this.onContentChanged(t) : "contentresumed" === e ? this.onContentResumed(t) : "readyforpostroll" === e ? this.onReadyForPostroll(t) : "playing" === e ? this.onPlaying(t) : "ended" === e ? this.onEnded(t) : "nopreroll" === e ? this.onNoPreroll(t) : "nopostroll" === e ? this.onNoPostroll(t) : "adended" === e && this.onAdEnded(t) - }, t - }(); - - function T(e, t) { - e.prototype = Object.create(t.prototype), e.prototype.constructor = e, e.__proto__ = t - } - k.registerState("State", C); - var w = function(e) { - function t(t) { - var n; - return (n = e.call(this, t) || this).contentResuming = !1, n.waitingForAdBreak = !1, n - } - T(t, e); - var n = t.prototype; - return n.isAdState = function() { - return !0 - }, n.onPlaying = function() { - var e = k.getState("ContentPlayback"); - this.contentResuming && this.transitionTo(e) - }, n.onContentResumed = function() { - var e = k.getState("ContentPlayback"); - this.contentResuming && this.transitionTo(e) - }, n.isWaitingForAdBreak = function() { - return this.waitingForAdBreak - }, n.isContentResuming = function() { - return this.contentResuming - }, n.inAdBreak = function() { - return !0 === this.player.ads._inLinearAdMode - }, t - }(C); - k.registerState("AdState", w); - var R = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e); - var n = t.prototype; - return n.isAdState = function() { - return !1 - }, n.onContentChanged = function(e) { - var t = k.getState("BeforePreroll"), - n = k.getState("Preroll"); - e.ads.debug("Received contentchanged event (ContentState)"), e.paused() ? this.transitionTo(t) : (this.transitionTo(n, !1), e.pause(), e.ads._pausedOnContentupdate = !0) - }, t - }(C); - k.registerState("ContentState", R); - var L, B = function(t) { - function n() { - return t.apply(this, arguments) || this - } - T(n, t), n._getName = function() { - return "AdsDone" - }; - var a = n.prototype; - return a.init = function(e) { - e.ads._contentHasEnded = !0, e.trigger("ended") - }, a.startLinearAdMode = function() { - e.log.warn("Unexpected startLinearAdMode invocation (AdsDone)") - }, n - }(k.getState("ContentState")); - k.registerState("AdsDone", B); - var M = { - start: function(t) { - t.ads.debug("Starting ad break"), t.ads._inLinearAdMode = !0, t.trigger("adstart"), t.ads.shouldTakeSnapshots() && (t.ads.snapshot = function(t) { - var n; - n = e.browser.IS_IOS && t.ads.isLive(t) && t.seekable().length > 0 ? t.currentTime() - t.seekable().end(0) : t.currentTime(); - var a = t.$(".vjs-tech"), - o = t.textTracks ? t.textTracks() : [], - r = [], - i = { - ended: t.ended(), - currentSrc: t.currentSrc(), - sources: t.currentSources(), - src: t.tech_.src(), - currentTime: n, - type: t.currentType() - }; - a && (i.style = a.getAttribute("style")); - for (var s = 0; s < o.length; s++) { - var d = o[s]; - r.push({ - track: d, - mode: d.mode - }), d.mode = "disabled" - } - return i.suppressedTracks = r, i - }(t)), t.ads.shouldPlayContentBehindAd(t) && (t.ads.preAdVolume_ = t.volume(), t.volume(0)), t.addClass("vjs-ad-playing"), t.hasClass("vjs-live") && t.removeClass("vjs-live"), t.ads.removeNativePoster() - }, - end: function(t, n) { - t.ads.debug("Ending ad break"), void 0 === n && (n = function() {}), t.ads.adType = null, t.ads._inLinearAdMode = !1, t.trigger("adend"), t.removeClass("vjs-ad-playing"), t.ads.isLive(t) && t.addClass("vjs-live"), t.ads.shouldTakeSnapshots() ? function(t, n) { - var a = t.ads.snapshot; - if (void 0 === n && (n = function() {}), !0 === t.ads.disableNextSnapshotRestore) return t.ads.disableNextSnapshotRestore = !1, delete t.ads.snapshot, void n(); - var o, r = t.$(".vjs-tech"), - i = 20, - s = a.suppressedTracks, - d = function() { - for (var e = 0; e < s.length; e++)(o = s[e]).track.mode = o.mode - }, - l = function() { - var n; - if (e.browser.IS_IOS && t.ads.isLive(t)) { - if (a.currentTime < 0 && (n = t.seekable().length > 0 ? t.seekable().end(0) + a.currentTime : t.currentTime(), t.currentTime(n)), t.paused()) { - var o = t.play(); - o && o.catch && o.catch(function(t) { - e.log.warn("Play promise rejected in IOS snapshot resume", t) - }) - } - } else if (a.ended) t.currentTime(t.duration()); - else { - t.currentTime(a.currentTime); - var r = t.play(); - r && r.catch && r.catch(function(t) { - e.log.warn("Play promise rejected in snapshot resume", t) - }) - } - t.ads.shouldRemoveAutoplay_ && (t.autoplay(!1), t.ads.shouldRemoveAutoplay_ = !1) - }, - u = function n() { - if (t.off("contentcanplay", n), L && t.clearTimeout(L), (r = t.el().querySelector(".vjs-tech")).readyState > 1) return l(); - if (void 0 === r.seekable) return l(); - if (r.seekable.length > 0) return l(); - if (i--) t.setTimeout(n, 50); - else try { - l() - } catch (t) { - e.log.warn("Failed to resume the content after an advertisement", t) - } - }; - if ("style" in a && r.setAttribute("style", a.style || ""), t.ads.videoElementRecycled()) t.one("resumeended", function() { - delete t.ads.snapshot, n() - }), t.one("contentloadedmetadata", d), e.browser.IS_IOS && !t.autoplay() && (t.autoplay(!0), t.ads.shouldRemoveAutoplay_ = !0), t.src(a.sources), t.one("contentcanplay", u), L = t.setTimeout(u, 2e3); - else { - if (d(), !t.ended()) { - var c = t.play(); - c && c.catch && c.catch(function(t) { - e.log.warn("Play promise rejected in snapshot restore", t) - }) - } - delete t.ads.snapshot, n() - } - }(t, n) : (t.volume(t.ads.preAdVolume_), n()) - } - }, - j = function(t) { - function n() { - return t.apply(this, arguments) || this - } - T(n, t), n._getName = function() { - return "Preroll" - }; - var a = n.prototype; - return a.init = function(e, t, n) { - if (this.waitingForAdBreak = !0, e.addClass("vjs-ad-loading"), n || e.ads.nopreroll_) return this.resumeAfterNoPreroll(e); - var a = e.ads.settings.timeout; - "number" == typeof e.ads.settings.prerollTimeout && (a = e.ads.settings.prerollTimeout), this._timeout = e.setTimeout(function() { - e.trigger("adtimeout") - }, a), t ? this.handleAdsReady() : this.adsReady = !1 - }, a.onAdsReady = function(t) { - t.ads.inAdBreak() ? e.log.warn("Unexpected adsready event (Preroll)") : (t.ads.debug("Received adsready event (Preroll)"), this.handleAdsReady()) - }, a.handleAdsReady = function() { - this.adsReady = !0, this.readyForPreroll() - }, a.afterLoadStart = function(e) { - var t = this.player; - t.ads._hasThereBeenALoadStartDuringPlayerLife ? e() : (t.ads.debug("Waiting for loadstart..."), t.one("loadstart", function() { - t.ads.debug("Received loadstart event"), e() - })) - }, a.noPreroll = function() { - var e = this; - this.afterLoadStart(function() { - e.player.ads.debug("Skipping prerolls due to nopreroll event (Preroll)"), e.resumeAfterNoPreroll(e.player) - }) - }, a.readyForPreroll = function() { - var e = this.player; - this.afterLoadStart(function() { - e.ads.debug("Triggered readyforpreroll event (Preroll)"), e.trigger("readyforpreroll") - }) - }, a.onAdsCanceled = function(e) { - var t = this; - e.ads.debug("adscanceled (Preroll)"), this.afterLoadStart(function() { - t.resumeAfterNoPreroll(e) - }) - }, a.onAdsError = function(t) { - var n = this; - e.log("adserror (Preroll)"), this.inAdBreak() ? t.ads.endLinearAdMode() : this.afterLoadStart(function() { - n.resumeAfterNoPreroll(t) - }) - }, a.startLinearAdMode = function() { - var t = this.player; - !this.adsReady || t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected startLinearAdMode invocation (Preroll)") : (this.clearTimeout(t), t.ads.adType = "preroll", this.waitingForAdBreak = !1, M.start(t), t.ads._shouldBlockPlay = !1) - }, a.onAdStarted = function(e) { - e.removeClass("vjs-ad-loading") - }, a.endLinearAdMode = function() { - var e = this.player; - this.inAdBreak() && (e.removeClass("vjs-ad-loading"), e.addClass("vjs-ad-content-resuming"), this.contentResuming = !0, M.end(e)) - }, a.skipLinearAdMode = function() { - var t = this, - n = this.player; - n.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected skipLinearAdMode invocation") : this.afterLoadStart(function() { - n.trigger("adskip"), n.ads.debug("skipLinearAdMode (Preroll)"), t.resumeAfterNoPreroll(n) - }) - }, a.onAdTimeout = function(e) { - var t = this; - this.afterLoadStart(function() { - e.ads.debug("adtimeout (Preroll)"), t.resumeAfterNoPreroll(e) - }) - }, a.onNoPreroll = function(t) { - t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected nopreroll event (Preroll)") : this.noPreroll() - }, a.resumeAfterNoPreroll = function(e) { - if (this.contentResuming = !0, e.ads._shouldBlockPlay = !1, this.cleanupPartial(e), e.ads._playRequested || e.ads._pausedOnContentupdate) - if (e.paused()) { - e.ads.debug("resumeAfterNoPreroll: attempting to resume playback (Preroll)"); - var t = e.play(); - t && t.then && t.then(null, function(e) {}) - } else e.ads.debug("resumeAfterNoPreroll: already playing (Preroll)"), e.trigger("play"), e.trigger("playing") - }, a.cleanup = function(t) { - t.ads._hasThereBeenALoadStartDuringPlayerLife || e.log.warn("Leaving Preroll state before loadstart event can cause issues."), this.cleanupPartial(t) - }, a.cleanupPartial = function(e) { - e.removeClass("vjs-ad-loading"), e.removeClass("vjs-ad-content-resuming"), this.clearTimeout(e) - }, a.clearTimeout = function(e) { - e.clearTimeout(this._timeout), this._timeout = null - }, n - }(k.getState("AdState")); - k.registerState("Preroll", j); - var I = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e), t._getName = function() { - return "BeforePreroll" - }; - var n = t.prototype; - return n.init = function(e) { - this.adsReady = !1, this.shouldResumeToContent = !1, e.ads._shouldBlockPlay = !e.ads.settings.allowVjsAutoplay || !e.autoplay() - }, n.onAdsReady = function(e) { - e.ads.debug("Received adsready event (BeforePreroll)"), this.adsReady = !0 - }, n.onPlay = function(e) { - var t = k.getState("Preroll"); - e.ads.debug("Received play event (BeforePreroll)"), this.transitionTo(t, this.adsReady, this.shouldResumeToContent) - }, n.onAdsCanceled = function(e) { - e.ads.debug("adscanceled (BeforePreroll)"), this.shouldResumeToContent = !0 - }, n.onAdsError = function() { - this.player.ads.debug("adserror (BeforePreroll)"), this.shouldResumeToContent = !0 - }, n.onNoPreroll = function() { - this.player.ads.debug("Skipping prerolls due to nopreroll event (BeforePreroll)"), this.shouldResumeToContent = !0 - }, n.skipLinearAdMode = function() { - var e = this.player; - e.trigger("adskip"), e.ads.debug("skipLinearAdMode (BeforePreroll)"), this.shouldResumeToContent = !0 - }, n.onContentChanged = function() { - this.init(this.player) - }, t - }(k.getState("ContentState")); - k.registerState("BeforePreroll", I); - var N = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e), t._getName = function() { - return "Midroll" - }; - var n = t.prototype; - return n.init = function(e) { - e.ads.adType = "midroll", M.start(e), e.addClass("vjs-ad-loading") - }, n.onAdStarted = function(e) { - e.removeClass("vjs-ad-loading") - }, n.endLinearAdMode = function() { - var e = this.player; - this.inAdBreak() && (this.contentResuming = !0, e.addClass("vjs-ad-content-resuming"), e.removeClass("vjs-ad-loading"), M.end(e)) - }, n.onAdsError = function(e) { - this.inAdBreak() && e.ads.endLinearAdMode() - }, n.cleanup = function(e) { - e.removeClass("vjs-ad-loading"), e.removeClass("vjs-ad-content-resuming") - }, t - }(k.getState("AdState")); - k.registerState("Midroll", N); - var E = function(t) { - function n() { - return t.apply(this, arguments) || this - } - T(n, t), n._getName = function() { - return "Postroll" - }; - var a = n.prototype; - return a.init = function(e) { - if (this.waitingForAdBreak = !0, e.ads._contentEnding = !0, e.ads.nopostroll_) { - this.resumeContent(e); - var t = k.getState("AdsDone"); - this.transitionTo(t) - } else { - e.addClass("vjs-ad-loading"); - var n = e.ads.settings.timeout; - "number" == typeof e.ads.settings.postrollTimeout && (n = e.ads.settings.postrollTimeout), this._postrollTimeout = e.setTimeout(function() { - e.trigger("adtimeout") - }, n) - } - }, a.startLinearAdMode = function() { - var t = this.player; - t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected startLinearAdMode invocation (Postroll)") : (t.ads.adType = "postroll", t.clearTimeout(this._postrollTimeout), this.waitingForAdBreak = !1, M.start(t)) - }, a.onAdStarted = function(e) { - e.removeClass("vjs-ad-loading") - }, a.endLinearAdMode = function() { - var e = this, - t = this.player, - n = k.getState("AdsDone"); - this.inAdBreak() && (t.removeClass("vjs-ad-loading"), this.resumeContent(t), M.end(t, function() { - e.transitionTo(n) - })) - }, a.skipLinearAdMode = function() { - var t = this.player; - t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected skipLinearAdMode invocation") : (t.ads.debug("Postroll abort (skipLinearAdMode)"), t.trigger("adskip"), this.abort(t)) - }, a.onAdTimeout = function(e) { - e.ads.debug("Postroll abort (adtimeout)"), this.abort(e) - }, a.onAdsError = function(e) { - e.ads.debug("Postroll abort (adserror)"), e.ads.inAdBreak() ? e.ads.endLinearAdMode() : this.abort(e) - }, a.onContentChanged = function(e) { - if (this.isContentResuming()) { - var t = k.getState("BeforePreroll"); - this.transitionTo(t) - } else if (!this.inAdBreak()) { - var n = k.getState("Preroll"); - this.transitionTo(n) - } - }, a.onNoPostroll = function(t) { - this.isContentResuming() || this.inAdBreak() ? e.log.warn("Unexpected nopostroll event (Postroll)") : this.abort(t) - }, a.resumeContent = function(e) { - this.contentResuming = !0, e.addClass("vjs-ad-content-resuming") - }, a.abort = function(e) { - var t = k.getState("AdsDone"); - this.resumeContent(e), e.removeClass("vjs-ad-loading"), this.transitionTo(t) - }, a.cleanup = function(e) { - e.removeClass("vjs-ad-content-resuming"), e.clearTimeout(this._postrollTimeout), e.ads._contentEnding = !1 - }, n - }(k.getState("AdState")); - k.registerState("Postroll", E); - var x = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e), t._getName = function() { - return "ContentPlayback" - }; - var n = t.prototype; - return n.init = function(e) { - e.ads._shouldBlockPlay = !1 - }, n.onAdsReady = function(e) { - e.ads.debug("Received adsready event (ContentPlayback)"), e.ads.nopreroll_ || (e.ads.debug("Triggered readyforpreroll event (ContentPlayback)"), e.trigger("readyforpreroll")) - }, n.onReadyForPostroll = function(e) { - var t = k.getState("Postroll"); - e.ads.debug("Received readyforpostroll event"), this.transitionTo(t) - }, n.startLinearAdMode = function() { - var e = k.getState("Midroll"); - this.transitionTo(e) - }, t - }(k.getState("ContentState")); - k.registerState("ContentPlayback", x); - var D = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e), t._getName = function() { - return "StitchedContentPlayback" - }; - var n = t.prototype; - return n.init = function() { - this.player.ads._shouldBlockPlay = !1 - }, n.onContentChanged = function() { - this.player.ads.debug("Received contentchanged event (" + this.constructor._getName() + ")") - }, n.startLinearAdMode = function() { - var e = k.getState("StitchedAdRoll"); - this.transitionTo(e) - }, t - }(k.getState("ContentState")); - k.registerState("StitchedContentPlayback", D); - var O = function(e) { - function t() { - return e.apply(this, arguments) || this - } - T(t, e), t._getName = function() { - return "StitchedAdRoll" - }; - var n = t.prototype; - return n.init = function() { - this.waitingForAdBreak = !1, this.contentResuming = !1, this.player.ads.adType = "stitched", M.start(this.player) - }, n.onPlaying = function() {}, n.onContentResumed = function() {}, n.onAdEnded = function() { - this.endLinearAdMode(), this.player.trigger("ended") - }, n.endLinearAdMode = function() { - var e = k.getState("StitchedContentPlayback"); - M.end(this.player), this.transitionTo(e) - }, t - }(k.getState("AdState")); - k.registerState("StitchedAdRoll", O); - var F = A.isMiddlewareMediatorSupported, - U = e.getTech("Html5").Events, - V = { - timeout: 5e3, - prerollTimeout: void 0, - postrollTimeout: void 0, - debug: !1, - stitchedAds: !1, - contentIsLive: void 0, - liveCuePoints: !0, - allowVjsAutoplay: e.options.normalizeAutoplay || !1 - }, - q = function(o) { - var r = this, - i = e.mergeOptions(V, o), - s = []; - U.concat(["firstplay", "loadedalldata"]).forEach(function(e) { - -1 === s.indexOf(e) && s.push(e) - }), r.on(s, u), F() || function(t, n) { - n && e.log("Using cancelContentPlay to block content playback"), t.on("play", m) - }(r, i.debug), r.setTimeout(function() { - r.ads._hasThereBeenALoadStartDuringPlayerLife || "" === r.src() || e.log.error("videojs-contrib-ads has not seen a loadstart event 5 seconds after being initialized, but a source is present. This indicates that videojs-contrib-ads was initialized too late. It must be initialized immediately after video.js in the same tick. As a result, some ads will not play and some media events will be incorrect. For more information, see http://videojs.github.io/videojs-contrib-ads/integrator/getting-started.html") - }, 5e3), r.on("ended", function() { - r.hasClass("vjs-has-started") || r.addClass("vjs-has-started") - }), r.on("contenttimeupdate", function() { - r.removeClass("vjs-waiting") - }), r.on(["addurationchange", "adcanplay"], function() { - if (!r.ads.settings.stitchedAds && !r.hasStarted() && (!r.ads.snapshot || r.currentSrc() !== r.ads.snapshot.currentSrc) && r.ads.inAdBreak()) { - var t = r.play(); - t && t.catch && t.catch(function(t) { - e.log.warn("Play promise rejected when playing ad", t) - }) - } - }), r.on("nopreroll", function() { - r.ads.debug("Received nopreroll event"), r.ads.nopreroll_ = !0 - }), r.on("nopostroll", function() { - r.ads.debug("Received nopostroll event"), r.ads.nopostroll_ = !0 - }), r.on("playing", function() { - r.ads._cancelledPlay = !1, r.ads._pausedOnContentupdate = !1 - }), r.on("play", function() { - r.ads._playRequested = !0 - }), r.one("loadstart", function() { - r.ads._hasThereBeenALoadStartDuringPlayerLife = !0 - }), r.on("loadeddata", function() { - r.ads._hasThereBeenALoadedData = !0 - }), r.on("loadedmetadata", function() { - r.ads._hasThereBeenALoadedMetaData = !0 - }), r.ads = function(t) { - return { - disableNextSnapshotRestore: !1, - _contentEnding: !1, - _contentHasEnded: !1, - _hasThereBeenALoadStartDuringPlayerLife: !1, - _hasThereBeenALoadedData: !1, - _hasThereBeenALoadedMetaData: !1, - _inLinearAdMode: !1, - _shouldBlockPlay: !1, - _playBlocked: !1, - _playRequested: !1, - adType: null, - VERSION: a, - reset: function() { - t.ads.disableNextSnapshotRestore = !1, t.ads._contentEnding = !1, t.ads._contentHasEnded = !1, t.ads.snapshot = null, t.ads.adType = null, t.ads._hasThereBeenALoadedData = !1, t.ads._hasThereBeenALoadedMetaData = !1, t.ads._cancelledPlay = !1, t.ads._shouldBlockPlay = !1, t.ads._playBlocked = !1, t.ads.nopreroll_ = !1, t.ads.nopostroll_ = !1, t.ads._playRequested = !1 - }, - startLinearAdMode: function() { - t.ads._state.startLinearAdMode() - }, - endLinearAdMode: function() { - t.ads._state.endLinearAdMode() - }, - skipLinearAdMode: function() { - t.ads._state.skipLinearAdMode() - }, - stitchedAds: function(t) { - return void 0 !== t && (e.log.warn("Using player.ads.stitchedAds() as a setter is deprecated, it should be set as an option upon initialization of contrib-ads."), this.settings.stitchedAds = !!t), this.settings.stitchedAds - }, - videoElementRecycled: function() { - if (t.ads.shouldPlayContentBehindAd(t)) return !1; - if (!this.snapshot) throw new Error("You cannot use videoElementRecycled while there is no snapshot."); - var e = t.tech_.src() !== this.snapshot.src, - n = t.currentSrc() !== this.snapshot.currentSrc; - return e || n - }, - isLive: function(n) { - return void 0 === n && (n = t), "boolean" == typeof n.ads.settings.contentIsLive ? n.ads.settings.contentIsLive : n.duration() === 1 / 0 || "8" === e.browser.IOS_VERSION && 0 === n.duration() - }, - shouldPlayContentBehindAd: function(n) { - if (void 0 === n && (n = t), n) return !!n.ads.settings.liveCuePoints && !e.browser.IS_IOS && !e.browser.IS_ANDROID && n.duration() === 1 / 0; - throw new Error("shouldPlayContentBehindAd requires a player as a param") - }, - shouldTakeSnapshots: function(e) { - return void 0 === e && (e = t), !this.shouldPlayContentBehindAd(e) && !this.stitchedAds() - }, - isInAdMode: function() { - return this._state.isAdState() - }, - isWaitingForAdBreak: function() { - return this._state.isWaitingForAdBreak() - }, - isContentResuming: function() { - return this._state.isContentResuming() - }, - isAdPlaying: function() { - return this._state.inAdBreak() - }, - inAdBreak: function() { - return this._state.inAdBreak() - }, - removeNativePoster: function() { - var e = t.$(".vjs-tech"); - e && e.removeAttribute("poster") - }, - debug: function() { - if (this.settings.debug) { - for (var t = arguments.length, n = new Array(t), a = 0; a < t; a++) n[a] = arguments[a]; - 1 === n.length && "string" == typeof n[0] ? e.log("ADS: " + n[0]) : e.log.apply(e, ["ADS:"].concat(n)) - } - } - } - }(r), r.ads.settings = i, i.stitchedAds = !!i.stitchedAds, i.stitchedAds ? r.ads._state = new(k.getState("StitchedContentPlayback"))(r) : r.ads._state = new(k.getState("BeforePreroll"))(r), r.ads._state.init(r), r.ads.cueTextTracks = g, r.ads.adMacroReplacement = function(a, o, r) { - var i = this, - s = {}; - a = a.replace(/{([^}=]+)=([^}]+)}/g, function(e, t, n) { - return s["{" + t + "}"] = n, "{" + t + "}" - }), void 0 === o && (o = !1); - var d = {}; - for (var l in void 0 !== r && (d = r), d["{player.id}"] = this.options_["data-player"] || this.id_, d["{player.height}"] = this.currentHeight(), d["{player.width}"] = this.currentWidth(), d["{mediainfo.id}"] = this.mediainfo ? this.mediainfo.id : "", d["{mediainfo.name}"] = this.mediainfo ? this.mediainfo.name : "", d["{mediainfo.duration}"] = this.mediainfo ? this.mediainfo.duration : "", d["{player.duration}"] = this.duration(), d["{player.pageUrl}"] = e.dom.isInFrame() ? n.referrer : t.location.href, d["{playlistinfo.id}"] = this.playlistinfo ? this.playlistinfo.id : "", d["{playlistinfo.name}"] = this.playlistinfo ? this.playlistinfo.name : "", d["{timestamp}"] = (new Date).getTime(), d["{document.referrer}"] = n.referrer, d["{window.location.href}"] = t.location.href, d["{random}"] = Math.floor(1e12 * Math.random()), ["description", "tags", "reference_id", "ad_keys"].forEach(function(e) { - i.mediainfo && i.mediainfo[e] ? d["{mediainfo." + e + "}"] = i.mediainfo[e] : s["{mediainfo." + e + "}"] ? d["{mediainfo." + e + "}"] = s["{mediainfo." + e + "}"] : d["{mediainfo." + e + "}"] = "" - }), p(this.mediainfo, d, "custom_fields"), p(this.mediainfo, d, "customFields"), Object.keys(c).forEach(function(e) { - d["{tcf." + e + "}"] = c[e] - }), d["{tcf.gdprAppliesInt}"] = c.gdprApplies ? 1 : 0, d) a = a.split(l).join(h(d[l], o)); - for (var u in a = a.replace(/{pageVariable\.([^}]+)}/g, function(n, a) { - for (var r, i = t, d = a.split("."), l = 0; l < d.length; l++) l === d.length - 1 ? r = i[d[l]] : i = i[d[l]]; - var u = typeof r; - return null === r ? "null" : void 0 === r ? s["{pageVariable." + a + "}"] ? s["{pageVariable." + a + "}"] : (e.log.warn('Page variable "' + a + '" not found'), "") : "string" !== u && "number" !== u && "boolean" !== u ? (e.log.warn('Page variable "' + a + '" is not a supported type'), "") : h(String(r), o) - }), s) a = a.replace(u, s[u]); - return a - }.bind(r), - function(e) { - e.ads.contentSrc = e.currentSrc(), e.ads._seenInitialLoadstart = !1, e.on("loadstart", function() { - if (!e.ads.inAdBreak()) { - var t = e.currentSrc(); - t !== e.ads.contentSrc && (e.ads._seenInitialLoadstart && e.trigger({ - type: "contentchanged" - }), e.trigger({ - type: "contentupdate", - oldValue: e.ads.contentSrc, - newValue: t - }), e.ads.contentSrc = t), e.ads._seenInitialLoadstart = !0 - } - }) - }(r), r.on("contentchanged", r.ads.reset); - var d = function() { - var t = r.textTracks(); - if (!r.ads.shouldPlayContentBehindAd(r) && r.ads.inAdBreak() && r.tech_.featuresNativeTextTracks && e.browser.IS_IOS && !Array.isArray(r.textTracks())) - for (var n = 0; n < t.length; n++) { - var a = t[n]; - "showing" === a.mode && (a.mode = "disabled") - } - }; - r.ready(function() { - r.textTracks().addEventListener("change", d) - }), r.on(["play", "playing", "ended", "adsready", "adscanceled", "adskip", "adserror", "adtimeout", "adended", "ads-ad-started", "contentchanged", "dispose", "contentresumed", "readyforpostroll", "nopreroll", "nopostroll"], function(e) { - r.ads._state.handleEvent(e.type) - }), r.on("dispose", function() { - r.ads.reset(), r.textTracks().removeEventListener("change", d) - }), f(), r.ads.listenToTcf = f - }; - return q.VERSION = a, - function(t) { - !b(e) && ((e.registerPlugin || e.plugin)("ads", t), P() && !e.usingContribAdsMiddleware_ && (e.use("*", _), e.usingContribAdsMiddleware_ = !0, e.log.debug("Play middleware has been registered with videojs"))) - }(q), q -}); -/*! @name @viostream/videojs-overlay @version v2.1.6-f.97-master @license Apache-2.0 */ -! function(t, e) { - "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).videojsOverlay = e(t.videojs) -}(this, (function(t) { - "use strict"; - - function e(t) { - return t && "object" == typeof t && "default" in t ? t : { - default: t - } - } - var n = e(t); - - function i(t, e, n) { - return t(n = { - path: e, - exports: {}, - require: function(t, e) { - return function() { - throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs") - }(null == e && n.path) - } - }, n.exports), n.exports - } - var o = i((function(t) { - t.exports = function(t) { - if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return t - }, t.exports.default = t.exports, t.exports.__esModule = !0 - })), - r = i((function(t) { - function e(n, i) { - return t.exports = e = Object.setPrototypeOf || function(t, e) { - return t.__proto__ = e, t - }, t.exports.default = t.exports, t.exports.__esModule = !0, e(n, i) - } - t.exports = e, t.exports.default = t.exports, t.exports.__esModule = !0 - })), - s = i((function(t) { - t.exports = function(t, e) { - t.prototype = Object.create(e.prototype), t.prototype.constructor = t, r(t, e) - }, t.exports.default = t.exports, t.exports.__esModule = !0 - })), - a = { - align: "top-left", - class: "", - content: "This overlay will show up while the video is playing", - debug: !1, - showBackground: !0, - attachToControlBar: !1, - overlays: [{ - start: "playing", - end: "paused" - }] - }, - h = n.default.getComponent("Component"), - d = n.default.dom || n.default, - l = n.default.registerPlugin || n.default.plugin, - u = function(t) { - return "number" == typeof t && t == t - }, - p = function(t) { - return "string" == typeof t && /^\S+$/.test(t) - }, - c = function(t) { - function e(n, i) { - var r; - return (r = t.call(this, n, i) || this).isVisible = !0, ["start", "end"].forEach((function(t) { - var e = r.options_[t]; - if (u(e)) r[t + "Event_"] = "timeupdate"; - else if (p(e)) r[t + "Event_"] = e; - else if ("start" === t) throw new Error('invalid "start" option; expected number or string') - })), ["endListener_", "rewindListener_", "startListener_"].forEach((function(t) { - r[t] = function(n) { - return e.prototype[t].call(o(r), n) - } - })), "timeupdate" === r.startEvent_ && r.on(n, "timeupdate", r.rewindListener_), r.debug('created, listening to "' + r.startEvent_ + '" for "start" and "' + (r.endEvent_ || "nothing") + '" for "end"'), r.hide(), r - } - s(e, t); - var i = e.prototype; - return i.createEl = function() { - var t = this.options_, - e = t.content, - n = t.showBackground ? "vjs-overlay-background" : "vjs-overlay-no-background", - i = d.createEl("div", { - className: "\n vjs-overlay\n vjs-overlay-" + t.align + "\n " + t.class + "\n " + n + "\n vjs-hidden\n " - }); - return "string" == typeof e ? i.innerHTML = e : e instanceof window.DocumentFragment ? i.appendChild(e) : d.appendContent(i, e), i - }, i.debug = function() { - if (this.options_.debug) { - for (var t = n.default.log, e = t, i = arguments.length, o = new Array(i), r = 0; r < i; r++) o[r] = arguments[r]; - t.hasOwnProperty(o[0]) && "function" == typeof t[o[0]] && (e = t[o.shift()]), e.apply(void 0, ["overlay#" + this.id() + ": "].concat(o)) - } - }, i.hide = function() { - if (!1 !== this.isVisible) return t.prototype.hide.call(this), this.isVisible = !1, this.debug("hidden"), this.debug('bound `startListener_` to "' + this.startEvent_ + '"'), u(this.options_.end) && (this.player().paused() || this.player().trigger("hide-overlay", { - id: this.options_.cta_id, - align: this.options_.align - })), this.endEvent_ && (this.debug('unbound `endListener_` from "' + this.endEvent_ + '"'), this.off(this.player(), this.endEvent_, this.endListener_)), this.on(this.player(), this.startEvent_, this.startListener_), this - }, i.shouldHide_ = function(t, e) { - var n = this.options_.end; - return u(n) ? t >= n : n === e - }, i.show = function() { - return t.prototype.show.call(this), this.isVisible = !0, this.off(this.player(), this.startEvent_, this.startListener_), this.debug("shown"), this.debug('unbound `startListener_` from "' + this.startEvent_ + '"'), u(this.options_.start) && (this.player().paused() && 0 !== this.options_.start || this.player().trigger("show-overlay", { - id: this.options_.cta_id, - align: this.options_.align - })), this.endEvent_ && (this.debug('bound `endListener_` to "' + this.endEvent_ + '"'), this.on(this.player(), this.endEvent_, this.endListener_)), this - }, i.shouldShow_ = function(t, e) { - var n = this.options_.start, - i = this.options_.end; - return u(n) ? u(i) ? t >= n && t < i : this.hasShownSinceSeek_ ? Math.floor(t) === n : (this.hasShownSinceSeek_ = !0, t >= n) : n === e - }, i.startListener_ = function(t) { - var e = this.player().currentTime(); - this.shouldShow_(e, t.type) && this.show() - }, i.endListener_ = function(t) { - var e = this.player().currentTime(); - this.shouldHide_(e, t.type) && this.hide() - }, i.rewindListener_ = function(t) { - var e = this.player().currentTime(), - n = this.previousTime_, - i = this.options_.start, - o = this.options_.end; - e < n && (this.debug("rewind detected"), u(o) && !this.shouldShow_(e) ? (this.debug("hiding; " + o + " is an integer and overlay should not show at this time"), this.hasShownSinceSeek_ = !1, this.hide()) : p(o) && e < i && (this.debug("hiding; show point (" + i + ") is before now (" + e + ") and end point (" + o + ") is an event"), this.hasShownSinceSeek_ = !1, this.hide())), this.previousTime_ = e - }, e - }(h); - n.default.registerComponent("Overlay", c); - var f = function(t) { - var e = this, - i = n.default.mergeOptions(a, t); - Array.isArray(this.overlays_) && this.overlays_.forEach((function(t) { - e.removeChild(t), e.controlBar && e.controlBar.removeChild(t), t.dispose() - })); - var o = i.overlays; - delete i.overlays, this.overlays_ = o.map((function(t) { - var o = n.default.mergeOptions(i, t), - r = "string" == typeof o.attachToControlBar || !0 === o.attachToControlBar; - if (!e.controls() || !e.controlBar) return e.addChild("overlay", o); - if (r && -1 !== o.align.indexOf("bottom")) { - var s = e.controlBar.children()[0]; - if (void 0 !== e.controlBar.getChild(o.attachToControlBar) && (s = e.controlBar.getChild(o.attachToControlBar)), s) { - var a = e.controlBar.children().indexOf(s); - return e.controlBar.addChild("overlay", o, a) - } - } - var h = e.addChild("overlay", o); - return e.el().insertBefore(h.el(), e.controlBar.el()), h - })) - }; - return f.VERSION = "v2.1.6-f.97-master", l("overlay", f), f -})); -/** - * videojs-share - * @version 3.2.1 - * @copyright 2019 Mikhail Khazov - * @license MIT - */ -! function(t, e) { - "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], e) : t.videojsShare = e(t.videojs) -}(this, function(t) { - "use strict"; - - function e(t, e) { - return e = { - exports: {} - }, t(e, e.exports), e.exports - } - - function n(t) { - var e; - if ("SELECT" === t.nodeName) t.focus(), e = t.value; - else if ("INPUT" === t.nodeName || "TEXTAREA" === t.nodeName) { - var n = t.hasAttribute("readonly"); - n || t.setAttribute("readonly", ""), t.select(), t.setSelectionRange(0, t.value.length), n || t.removeAttribute("readonly"), e = t.value - } else { - t.hasAttribute("contenteditable") && t.focus(); - var i = window.getSelection(), - o = document.createRange(); - o.selectNodeContents(t), i.removeAllRanges(), i.addRange(o), e = i.toString() - } - return e - } - - function i() {} - - function o(t, e) { - for (; t && t.nodeType !== G;) { - if ("function" == typeof t.matches && t.matches(e)) return t; - t = t.parentNode - } - } - - function r(t, e, n, i, o) { - var r = l.apply(this, arguments); - return t.addEventListener(n, r, o), { - destroy: function() { - t.removeEventListener(n, r, o) - } - } - } - - function a(t, e, n, i, o) { - return "function" == typeof t.addEventListener ? r.apply(null, arguments) : "function" == typeof n ? r.bind(null, document).apply(null, arguments) : ("string" == typeof t && (t = document.querySelectorAll(t)), Array.prototype.map.call(t, function(t) { - return r(t, e, n, i, o) - })) - } - - function l(t, e, n, i) { - return function(n) { - n.delegateTarget = K(n.target, e), n.delegateTarget && i.call(t, n) - } - } - - function s(t, e, n) { - if (!t && !e && !n) throw new Error("Missing required arguments"); - if (!X.string(e)) throw new TypeError("Second argument must be a String"); - if (!X.fn(n)) throw new TypeError("Third argument must be a Function"); - if (X.node(t)) return c(t, e, n); - if (X.nodeList(t)) return u(t, e, n); - if (X.string(t)) return h(t, e, n); - throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList") - } - - function c(t, e, n) { - return t.addEventListener(e, n), { - destroy: function() { - t.removeEventListener(e, n) - } - } - } - - function u(t, e, n) { - return Array.prototype.forEach.call(t, function(t) { - t.addEventListener(e, n) - }), { - destroy: function() { - Array.prototype.forEach.call(t, function(t) { - t.removeEventListener(e, n) - }) - } - } - } - - function h(t, e, n) { - return Q(document.body, t, e, n) - } - - function d(t) { - return Object.keys(t).filter(function(e) { - return void 0 !== t[e] && "" !== t[e] - }).map(function(e) { - return encodeURIComponent(e) + "=" + encodeURIComponent(t[e]) - }).join("&") - } - - function f() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.fbAppId, - n = t.url, - i = t.redirectUri; - if (!e) throw new Error("fbAppId is not defined"); - var o = d({ - app_id: e, - display: "popup", - redirect_uri: i, - link: n - }); - return window.open("https://www.facebook.com/dialog/feed?" + o, "_blank", tt) - } - - function p() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.fbAppId, - n = t.url, - i = t.hashtag, - o = t.redirectUri; - if (!e) throw new Error("fbAppId is not defined"); - var r = d({ - app_id: e, - display: "popup", - redirect_uri: o, - href: n, - hashtag: i - }); - return window.open("https://www.facebook.com/dialog/share?" + r, "_blank", tt) - } - - function v() { - var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).url; - if (!t) throw new Error("url is not defined"); - var e = d({ - kid_directed_site: "0", - sdk: "joey", - u: t, - display: "popup", - ref: "plugin", - src: "share_button" - }); - return window.open("https://www.facebook.com/sharer/sharer.php?" + e, "_blank", tt) - } - - function g() { - var t = d({ - url: (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).url - }); - return window.open("https://plus.google.com/share?" + t, "_blank", tt) - } - - function w() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = d({ - share_url: t.url, - title: t.title, - description: t.description, - imageurl: t.image - }); - return window.open("http://connect.mail.ru/share?" + e, "_blank", tt) - } - - function m() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.url, - n = t.title, - i = t.description, - o = (n || "") + "\r\n" + (i || "") + "\r\n" + (e || ""), - r = "mailto:?body=" + encodeURIComponent(o); - return window.location.assign(r) - } - - function y() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = d({ - "st.cmd": "addShare", - "st._surl": t.url, - title: t.title - }); - return window.open("https://ok.ru/dk?" + e, "_blank", tt) - } - - function b() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = d({ - url: t.url, - text: t.title - }); - return window.open("https://t.me/share/url?" + e, "_blank", tt) - } - - function k() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.title, - n = t.url, - i = t.hashtags, - o = d({ - text: e, - url: n, - hashtags: (void 0 === i ? [] : i).join(",") - }); - return window.open("https://twitter.com/intent/tweet?" + o, "_blank", tt) - } - - function _() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = d({ - url: t.url, - title: t.title - }); - return window.open("https://www.reddit.com/submit?" + e, "_blank", tt) - } - - function C() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.description, - n = d({ - url: t.url, - description: e, - media: t.media - }); - return window.open("https://pinterest.com/pin/create/button/?" + n, "_blank", tt) - } - - function x() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.url, - n = t.title, - i = t.caption, - o = t.tags, - r = void 0 === o ? [] : o, - a = t.posttype, - l = void 0 === a ? "link" : a, - s = d({ - canonicalUrl: e, - title: n, - caption: i, - tags: r.join(","), - posttype: l - }); - return window.open("https://www.tumblr.com/widgets/share/tool?" + s, "_blank", tt) - } - - function E() { - return !!window.navigator.userAgent.match(/Version\/[\d.]+.*Safari/) - } - - function S(t) { - return E() ? window.open(t) : window.location.assign(t) - } - - function j() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.url, - n = t.title; - if (!e && !n) throw new Error("url and title not specified"); - return S("viber://forward?" + d({ - text: [n, e].filter(function(t) { - return t - }).join(" ") - })) - } - - function F() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.url, - n = t.image, - i = t.isVkParse, - o = t.description, - r = t.title; - o && o.length > et && (o = o.substr(0, et) + "..."), r && r.length > et && (r = r.substr(0, et) + "..."); - return "https://vk.com/share.php?" + d(i ? { - url: e - } : { - url: e, - title: r, - description: o, - image: n, - noparse: !0 - }) - } - - function A() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; - return window.open(F(t), "_blank", tt) - } - - function T() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.phone, - n = d({ - text: [t.title, t.url].filter(function(t) { - return t - }).join(" "), - phone: e - }); - return window.open("https://api.whatsapp.com/send?" + n, "_blank", tt) - } - - function z() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.title, - n = t.url, - i = d({ - title: e, - summary: t.description, - url: n - }); - return window.open("https://www.linkedin.com/shareArticle?mini=true&" + i, "_blank", tt) - } - - function M() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.fbAppId, - n = t.url; - if (!e) throw new Error("fbAppId is not defined"); - var i = d({ - app_id: e, - link: n - }); - return window.location.assign("fb-messenger://share?" + i) - } - - function O() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, - e = t.title, - n = t.url; - if (!n) throw new Error("url is not defined"); - var i = encodeURIComponent("" + n); - return e && (i = "" + encodeURIComponent(e + " ") + i), window.open("https://line.me/R/msg/text/?" + i, "_blank", tt) - } - - function L() { - return "ontouchstart" in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 - } - - function V() { - return /Android/.test(window.navigator.userAgent) || /iP(hone|ad|od)/i.test(window.navigator.userAgent) - } - - function H() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; - return !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1] ? V() ? t : t.filter(function(t) { - return !it.includes(t) - }) : t - } - t = t && t.hasOwnProperty("default") ? t.default : t; - var I = function() { - return "undefined" == typeof window ? "" : window.location.href - }(), - P = { - mobileVerification: !0, - title: "Video", - url: I, - socials: ["fbFeed", "tw", "reddit", "gp", "messenger", "linkedin", "vk", "ok", "mail", "email", "telegram", "whatsapp", "viber"], - embedCode: function() { - return "" - }(), - redirectUri: function() { - return I + "#close_window" - }() - }, - R = function(t, e) { - if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") - }, - U = function() { - function t(t, e) { - for (var n = 0; n < e.length; n++) { - var i = e[n]; - i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) - } - } - return function(e, n, i) { - return n && t(e.prototype, n), i && t(e, i), e - } - }(), - N = function(t, e) { - if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); - t.prototype = Object.create(e && e.prototype, { - constructor: { - value: t, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) - }, - B = function(t, e) { - if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !e || "object" != typeof e && "function" != typeof e ? t : e - }, - q = function(t) { - function e(n, i) { - R(this, e); - var o = B(this, t.call(this, n, i)); - return o.addClass("vjs-menu-button"), o.addClass("vjs-share-control"), o.addClass("vjs-icon-share"), o.controlText(n.localize("Share")), o - } - return N(e, t), e.prototype.handleClick = function() { - this.player().getChild("ShareOverlay").open() - }, e - }(t.getComponent("Button")), - D = ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self && self, n), - Y = e(function(t, e) { - ! function(e, n) { - n(t, D) - }(0, function(t, e) { - function n(t, e) { - if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") - } - var i = function(t) { - return t && t.__esModule ? t : { - default: t - } - }(e), - o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { - return typeof t - } : function(t) { - return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t - }, - r = function() { - function t(t, e) { - for (var n = 0; n < e.length; n++) { - var i = e[n]; - i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) - } - } - return function(e, n, i) { - return n && t(e.prototype, n), i && t(e, i), e - } - }(), - a = function() { - function t(e) { - n(this, t), this.resolveOptions(e), this.initSelection() - } - return r(t, [{ - key: "resolveOptions", - value: function() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; - this.action = t.action, this.container = t.container, this.emitter = t.emitter, this.target = t.target, this.text = t.text, this.trigger = t.trigger, this.selectedText = "" - } - }, { - key: "initSelection", - value: function() { - this.text ? this.selectFake() : this.target && this.selectTarget() - } - }, { - key: "selectFake", - value: function() { - var t = this, - e = "rtl" == document.documentElement.getAttribute("dir"); - this.removeFake(), this.fakeHandlerCallback = function() { - return t.removeFake() - }, this.fakeHandler = this.container.addEventListener("click", this.fakeHandlerCallback) || !0, this.fakeElem = document.createElement("textarea"), this.fakeElem.style.fontSize = "12pt", this.fakeElem.style.border = "0", this.fakeElem.style.padding = "0", this.fakeElem.style.margin = "0", this.fakeElem.style.position = "absolute", this.fakeElem.style[e ? "right" : "left"] = "-9999px"; - var n = window.pageYOffset || document.documentElement.scrollTop; - this.fakeElem.style.top = n + "px", this.fakeElem.setAttribute("readonly", ""), this.fakeElem.value = this.text, this.container.appendChild(this.fakeElem), this.selectedText = (0, i.default)(this.fakeElem), this.copyText() - } - }, { - key: "removeFake", - value: function() { - this.fakeHandler && (this.container.removeEventListener("click", this.fakeHandlerCallback), this.fakeHandler = null, this.fakeHandlerCallback = null), this.fakeElem && (this.container.removeChild(this.fakeElem), this.fakeElem = null) - } - }, { - key: "selectTarget", - value: function() { - this.selectedText = (0, i.default)(this.target), this.copyText() - } - }, { - key: "copyText", - value: function() { - var t = void 0; - try { - t = document.execCommand(this.action) - } catch (e) { - t = !1 - } - this.handleResult(t) - } - }, { - key: "handleResult", - value: function(t) { - this.emitter.emit(t ? "success" : "error", { - action: this.action, - text: this.selectedText, - trigger: this.trigger, - clearSelection: this.clearSelection.bind(this) - }) - } - }, { - key: "clearSelection", - value: function() { - this.trigger && this.trigger.focus(), window.getSelection().removeAllRanges() - } - }, { - key: "destroy", - value: function() { - this.removeFake() - } - }, { - key: "action", - set: function() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "copy"; - if (this._action = t, "copy" !== this._action && "cut" !== this._action) throw new Error('Invalid "action" value, use either "copy" or "cut"') - }, - get: function() { - return this._action - } - }, { - key: "target", - set: function(t) { - if (void 0 !== t) { - if (!t || "object" !== (void 0 === t ? "undefined" : o(t)) || 1 !== t.nodeType) throw new Error('Invalid "target" value, use a valid Element'); - if ("copy" === this.action && t.hasAttribute("disabled")) throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'); - if ("cut" === this.action && (t.hasAttribute("readonly") || t.hasAttribute("disabled"))) throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes'); - this._target = t - } - }, - get: function() { - return this._target - } - }]), t - }(); - t.exports = a - }) - }); - i.prototype = { - on: function(t, e, n) { - var i = this.e || (this.e = {}); - return (i[t] || (i[t] = [])).push({ - fn: e, - ctx: n - }), this - }, - once: function(t, e, n) { - function i() { - o.off(t, i), e.apply(n, arguments) - } - var o = this; - return i._ = e, this.on(t, i, n) - }, - emit: function(t) { - var e = [].slice.call(arguments, 1), - n = ((this.e || (this.e = {}))[t] || []).slice(), - i = 0, - o = n.length; - for (i; i < o; i++) n[i].fn.apply(n[i].ctx, e); - return this - }, - off: function(t, e) { - var n = this.e || (this.e = {}), - i = n[t], - o = []; - if (i && e) - for (var r = 0, a = i.length; r < a; r++) i[r].fn !== e && i[r].fn._ !== e && o.push(i[r]); - return o.length ? n[t] = o : delete n[t], this - } - }; - var W = i, - X = e(function(t, e) { - e.node = function(t) { - return void 0 !== t && t instanceof HTMLElement && 1 === t.nodeType - }, e.nodeList = function(t) { - var n = Object.prototype.toString.call(t); - return void 0 !== t && ("[object NodeList]" === n || "[object HTMLCollection]" === n) && "length" in t && (0 === t.length || e.node(t[0])) - }, e.string = function(t) { - return "string" == typeof t || t instanceof String - }, e.fn = function(t) { - return "[object Function]" === Object.prototype.toString.call(t) - } - }), - G = 9; - if ("undefined" != typeof Element && !Element.prototype.matches) { - var J = Element.prototype; - J.matches = J.matchesSelector || J.mozMatchesSelector || J.msMatchesSelector || J.oMatchesSelector || J.webkitMatchesSelector - } - var K = o, - Q = a, - Z = s, - $ = function(t) { - return t && t.__esModule ? t.default : t - }(e(function(t, e) { - ! function(e, n) { - n(t, Y, W, Z) - }(0, function(t, e, n, i) { - function o(t) { - return t && t.__esModule ? t : { - default: t - } - } - - function r(t, e) { - if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") - } - - function a(t, e) { - if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !e || "object" != typeof e && "function" != typeof e ? t : e - } - - function l(t, e) { - if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); - t.prototype = Object.create(e && e.prototype, { - constructor: { - value: t, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) - } - - function s(t, e) { - var n = "data-clipboard-" + t; - if (e.hasAttribute(n)) return e.getAttribute(n) - } - var c = o(e), - u = o(n), - h = o(i), - d = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { - return typeof t - } : function(t) { - return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t - }, - f = function() { - function t(t, e) { - for (var n = 0; n < e.length; n++) { - var i = e[n]; - i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) - } - } - return function(e, n, i) { - return n && t(e.prototype, n), i && t(e, i), e - } - }(), - p = function(t) { - function e(t, n) { - r(this, e); - var i = a(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this)); - return i.resolveOptions(n), i.listenClick(t), i - } - return l(e, t), f(e, [{ - key: "resolveOptions", - value: function() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; - this.action = "function" == typeof t.action ? t.action : this.defaultAction, this.target = "function" == typeof t.target ? t.target : this.defaultTarget, this.text = "function" == typeof t.text ? t.text : this.defaultText, this.container = "object" === d(t.container) ? t.container : document.body - } - }, { - key: "listenClick", - value: function(t) { - var e = this; - this.listener = (0, h.default)(t, "click", function(t) { - return e.onClick(t) - }) - } - }, { - key: "onClick", - value: function(t) { - var e = t.delegateTarget || t.currentTarget; - this.clipboardAction && (this.clipboardAction = null), this.clipboardAction = new c.default({ - action: this.action(e), - target: this.target(e), - text: this.text(e), - container: this.container, - trigger: e, - emitter: this - }) - } - }, { - key: "defaultAction", - value: function(t) { - return s("action", t) - } - }, { - key: "defaultTarget", - value: function(t) { - var e = s("target", t); - if (e) return document.querySelector(e) - } - }, { - key: "defaultText", - value: function(t) { - return s("text", t) - } - }, { - key: "destroy", - value: function() { - this.listener.destroy(), this.clipboardAction && (this.clipboardAction.destroy(), this.clipboardAction = null) - } - }], [{ - key: "isSupported", - value: function() { - var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : ["copy", "cut"], - e = "string" == typeof t ? [t] : t, - n = !!document.queryCommandSupported; - return e.forEach(function(t) { - n = n && !!document.queryCommandSupported(t) - }), n - } - }]), e - }(u.default); - t.exports = p - }) - })), - tt = "scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0", - et = 80, - nt = (Object.freeze || Object)({ - fbFeed: f, - fbShare: p, - fbButton: v, - gp: g, - mail: w, - email: m, - ok: y, - telegram: b, - tw: k, - reddit: _, - pinterest: C, - tumblr: x, - viber: j, - getVkUrl: F, - vk: A, - whatsapp: T, - linkedin: z, - messenger: M, - line: O - }), - it = ["whatsapp", "viber", "messenger"], - ot = { - fbFeed: '\n \n\n', - tw: '\n \n\n', - reddit: '\n \n\n', - gp: '\n \n\n', - messenger: '\n \n \n\n', - linkedin: '\n \n\n', - vk: '\n \n\n', - ok: '\n \n\n', - mail: '\n \n\n', - email: '\n \n\n', - telegram: '\n \n\n', - whatsapp: '\n \n\n', - viber: '\n \n\n' - }, - rt = function() { - function t(e, n) { - R(this, t), this.player = e, this.options = n, this.socials = H(n.socials, n.mobileVerification), this.copyBtnTextClass = "vjs-share__btn-text", this.socialBtnClass = "vjs-share__social", this._createContent(), this._initToggle(), this._initClipboard(), this._initSharing() - } - return t.prototype.getContent = function() { - return this.content - }, t.prototype._createContent = function() { - var t = '\n \n \n \n ' + this.player.localize("Copy") + "\n ", - e = document.createElement("div"), - n = ""; - this.options.embedCode && (n = '\n \n "), e.innerHTML = '
\n \n\n
\n \n \n\n " + n + '\n
\n\n
\n
\n ' + this._getSocialItems().join("") + "\n
\n
\n
", this.content = e.firstChild - }, t.prototype._initClipboard = function() { - var t = this; - new $(".vjs-share__btn", { - target: function(t) { - return t.previousElementSibling - } - }).on("success", function(e) { - var n = e.trigger.querySelector("." + t.copyBtnTextClass), - i = function() { - n.innerText = t.player.localize("Copy"), e.clearSelection() - }; - n.innerText = t.player.localize("Copied"), L() ? setTimeout(i, 1e3) : n.parentElement.addEventListener("mouseleave", function() { - setTimeout(i, 300) - }) - }) - }, t.prototype._initSharing = function() { - var t = this, - e = this.content.querySelectorAll("." + this.socialBtnClass); - Array.from(e).forEach(function(e) { - e.addEventListener("click", function(e) { - var n = e.currentTarget.getAttribute("data-social"), - i = nt[n]; - "function" == typeof i && i(t.socialOptions) - }) - }) - }, t.prototype._initToggle = function() { - var t = this.content.querySelector(".vjs-share__socials"); - this.socials.length > 10 || window.innerWidth <= 180 && this.socials.length > 6 ? t.style.height = "calc((2em + 5px) * 2)" : t.classList.add("horizontal") - }, t.prototype._getSocialItems = function() { - var t = []; - return this.socials.forEach(function(e) { - ot[e] && t.push('\n \n ") - }), t - }, U(t, [{ - key: "socialOptions", - get: function() { - var t = this.options; - return { - url: t.url, - title: t.title, - description: t.description, - image: t.image, - fbAppId: t.fbAppId, - isVkParse: t.isVkParse, - redirectUri: t.redirectUri - } - } - }]), t - }(), - at = function(t) { - function e(n, i) { - R(this, e); - var o = B(this, t.call(this, n, i)); - return o.playerClassName = "vjs-videojs-share_open", o - } - return N(e, t), e.prototype.open = function() { - var e = this.player(); - e.addClass(this.playerClassName), t.prototype.open.call(this), e.trigger("sharing:opened") - }, e.prototype.close = function() { - var e = this.player(); - e.removeClass(this.playerClassName), t.prototype.close.call(this), e.trigger("sharing:closed") - }, e - }(t.getComponent("ModalDialog")), - lt = function(t) { - function e(n, i) { - R(this, e); - var o = B(this, t.call(this, n, i)); - return o.player = n, o.options = i, o - } - return N(e, t), e.prototype._createModal = function() { - var t = new rt(this.player, this.options).getContent(); - this.modal = new at(this.player, { - content: t, - temporary: !0 - }), this.el = this.modal.contentEl(), this.player.addChild(this.modal) - }, e.prototype.open = function() { - this._createModal(), this.modal.open() - }, e - }(t.getComponent("Component")), - st = function(e) { - function n(i, o) { - R(this, n); - var r = B(this, e.call(this, i)); - return r.options = t.mergeOptions(P, o), r.player.ready(function() { - r.player.addClass("vjs-share"), i.addClass("vjs-videojs-share"), i.getChild("controlBar").addChild("ShareButton", o), i.addChild("ShareOverlay", o) - }), r - } - return N(n, e), n - }(t.getPlugin("plugin")); - return st.defaultState = {}, st.VERSION = "3.2.1", t.registerComponent("ShareButton", q), t.registerComponent("ShareOverlay", lt), t.registerPlugin("share", st), st -}); -/** - * videojs-watermark - * @version 2.0.0 - * @copyright 2017 Brooks Lyrette - * @license Apache-2.0 - */ -! function(e) { - if ("object" == typeof exports && "undefined" != typeof module) module.exports = e(); - else if ("function" == typeof define && define.amd) define([], e); - else { - var n; - n = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, n.videojsWatermark = e() - } -}(function() { - return function e(n, t, i) { - function o(d, a) { - if (!t[d]) { - if (!n[d]) { - var f = "function" == typeof require && require; - if (!a && f) return f(d, !0); - if (r) return r(d, !0); - var u = new Error("Cannot find module '" + d + "'"); - throw u.code = "MODULE_NOT_FOUND", u - } - var l = t[d] = { - exports: {} - }; - n[d][0].call(l.exports, function(e) { - var t = n[d][1][e]; - return o(t || e) - }, l, l.exports, e, n, t, i) - } - return t[d].exports - } - for (var r = "function" == typeof require && require, d = 0; d < i.length; d++) o(i[d]); - return o - }({ - 1: [function(e, n, t) { - (function(e) { - "use strict"; - Object.defineProperty(t, "__esModule", { - value: !0 - }); - var i = "undefined" != typeof window ? window.videojs : void 0 !== e ? e.videojs : null, - o = function(e) { - return e && e.__esModule ? e : { - default: e - } - }(i), - r = { - position: "top-right", - fadeTime: 3e3, - url: void 0, - image: void 0 - }, - d = function(e, n) { - var t = e.el(), - i = document.createElement("div"), - o = document.createElement("img"); - if (i.classList.add("vjs-watermark-content"), i.classList.add("vjs-watermark-" + n.position), o.src = n.image, n.url) { - var r = document.createElement("a"); - r.href = n.url, r.onclick = function(t) { - t.preventDefault(), e.pause(), window.open(n.url) - }, r.appendChild(o), i.appendChild(r) - } else i.appendChild(o); - t.appendChild(i) - }, - a = function(e) { - setTimeout(function() { - return document.getElementsByClassName("vjs-watermark-content")[0].classList.add("vjs-watermark-fade") - }, e.fadeTime) - }, - f = function(e, n) { - e.addClass("vjs-watermark"), n.image && (d(e, n), null !== n.fadeTime && e.on("play", function() { - return a(n) - })) - }, - u = function(e) { - var n = this; - this.ready(function() { - f(n, o.default.mergeOptions(r, e)) - }) - }; - o.default.registerPlugin("watermark", u), u.VERSION = "2.0.0", t.default = u, n.exports = t.default - }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}) - }, {}] - }, {}, [1])(1) -}); -/*! @name videojs-vr @version 1.10.1 @license MIT */ -! function(t, e) { - "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("global/window"), require("global/document"), require("video.js")) : "function" == typeof define && define.amd ? define(["global/window", "global/document", "video.js"], e) : (t = t || self).videojsVr = e(t.window, t.document, t.videojs) -}(this, (function(t, e, n) { - "use strict"; - t = t && t.hasOwnProperty("default") ? t.default : t, e = e && e.hasOwnProperty("default") ? e.default : e, n = n && n.hasOwnProperty("default") ? n.default : n; - var i = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; - - function r(t) { - return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t - } - - function o(t, e) { - return t(e = { - exports: {} - }, e.exports), e.exports - } - var s = r(o((function(t) { - t.exports = function(t) { - if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return t - }, t.exports.default = t.exports, t.exports.__esModule = !0 - }))), - a = o((function(t) { - function e(n, i) { - return t.exports = e = Object.setPrototypeOf || function(t, e) { - return t.__proto__ = e, t - }, t.exports.default = t.exports, t.exports.__esModule = !0, e(n, i) - } - t.exports = e, t.exports.default = t.exports, t.exports.__esModule = !0 - })); - r(a); - var l = r(o((function(t) { - t.exports = function(t, e) { - t.prototype = Object.create(e.prototype), t.prototype.constructor = t, a(t, e) - }, t.exports.default = t.exports, t.exports.__esModule = !0 - }))), - c = r(o((function(t, e) { - /** - * @license - * webvr-polyfill - * Copyright (c) 2015-2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** - * @license - * cardboard-vr-display - * Copyright (c) 2015-2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** - * @license - * webvr-polyfill-dpdb - * Copyright (c) 2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** - * @license - * wglu-preserve-state - * Copyright (c) 2016, Brandon Jones. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - /** - * @license - * nosleep.js - * Copyright (c) 2017, Rich Tibbett - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - t.exports = function() { - var t, e = "undefined" != typeof window ? window : void 0 !== i ? i : "undefined" != typeof self ? self : {}, - n = function() { - return /Android/i.test(navigator.userAgent) || /iPhone|iPad|iPod/i.test(navigator.userAgent) - }, - r = function(t, e) { - for (var n = 0, i = t.length; n < i; n++) e[n] = t[n] - }, - o = function(t, e) { - for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]); - return t - }, - s = (t = function(t, e) { - return t(e = { - exports: {} - }, e.exports), e.exports - }((function(t, n) { - /** - * @license - * cardboard-vr-display - * Copyright (c) 2015-2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** - * @license - * gl-preserve-state - * Copyright (c) 2016, Brandon Jones. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - /** - * @license - * webvr-polyfill-dpdb - * Copyright (c) 2015-2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** - * @license - * nosleep.js - * Copyright (c) 2017, Rich Tibbett - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - t.exports = function() { - var t, n, i, r = function() { - function t(t, e) { - for (var n = 0; n < e.length; n++) { - var i = e[n]; - i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) - } - } - return function(e, n, i) { - return n && t(e.prototype, n), i && t(e, i), e - } - }(), - o = function(t, e) { - if (Array.isArray(t)) return t; - if (Symbol.iterator in Object(t)) return function(t, e) { - var n = [], - i = !0, - r = !1, - o = void 0; - try { - for (var s, a = t[Symbol.iterator](); !(i = (s = a.next()).done) && (n.push(s.value), !e || n.length !== e); i = !0); - } catch (t) { - r = !0, o = t - } finally { - try { - !i && a.return && a.return() - } finally { - if (r) throw o - } - } - return n - }(t, e); - throw new TypeError("Invalid attempt to destructure non-iterable instance") - }, - s = function(t, e, n) { - return t + (e - t) * n - }, - a = function() { - var t = /iPad|iPhone|iPod/.test(navigator.platform); - return function() { - return t - } - }(), - l = function() { - var t = -1 !== navigator.userAgent.indexOf("Version") && -1 !== navigator.userAgent.indexOf("Android") && -1 !== navigator.userAgent.indexOf("Chrome"); - return function() { - return t - } - }(), - c = function() { - var t = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - return function() { - return t - } - }(), - h = function() { - var t = -1 !== navigator.userAgent.indexOf("Firefox") && -1 !== navigator.userAgent.indexOf("Android"); - return function() { - return t - } - }(), - u = (n = navigator.userAgent.match(/.*Chrome\/([0-9]+)/), i = n ? parseInt(n[1], 10) : null, function() { - return i - }), - d = function() { - var t; - return t = a() && c() && -1 !== navigator.userAgent.indexOf("13_4"), - function() { - return t - } - }(), - p = function() { - var t = !1; - if (65 === u()) { - var e = navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/); - if (e) { - var n = e[1].split("."), - i = o(n, 4), - r = (i[0], i[1], i[2]), - s = i[3]; - t = 3325 === parseInt(r, 10) && parseInt(s, 10) < 148 - } - } - return function() { - return t - } - }(), - f = function() { - var t = -1 !== navigator.userAgent.indexOf("R7 Build"); - return function() { - return t - } - }(), - m = function() { - var t = 90 == window.orientation || -90 == window.orientation; - return f() ? !t : t - }, - g = function() { - return Math.max(window.screen.width, window.screen.height) * window.devicePixelRatio - }, - v = function() { - return Math.min(window.screen.width, window.screen.height) * window.devicePixelRatio - }, - y = function() { - if (document.exitFullscreen) document.exitFullscreen(); - else if (document.webkitExitFullscreen) document.webkitExitFullscreen(); - else if (document.mozCancelFullScreen) document.mozCancelFullScreen(); - else { - if (!document.msExitFullscreen) return !1; - document.msExitFullscreen() - } - return !0 - }, - A = function(t, e, n, i) { - var r = t.createShader(t.VERTEX_SHADER); - t.shaderSource(r, e), t.compileShader(r); - var o = t.createShader(t.FRAGMENT_SHADER); - t.shaderSource(o, n), t.compileShader(o); - var s = t.createProgram(); - for (var a in t.attachShader(s, r), t.attachShader(s, o), i) t.bindAttribLocation(s, i[a], a); - return t.linkProgram(s), t.deleteShader(r), t.deleteShader(o), s - }, - x = function(t, e) { - for (var n = {}, i = t.getProgramParameter(e, t.ACTIVE_UNIFORMS), r = "", o = 0; o < i; o++) n[r = t.getActiveUniform(e, o).name.replace("[0]", "")] = t.getUniformLocation(e, r); - return n - }, - _ = function() { - var t, e = !1; - return t = navigator.userAgent || navigator.vendor || window.opera, (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0, 4))) && (e = !0), e - }, - b = function(t, e) { - for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]); - return t - }, - w = function(t) { - if (a()) { - var e = t.style.width, - n = t.style.height; - t.style.width = parseInt(e) + 1 + "px", t.style.height = parseInt(n) + "px", setTimeout((function() { - t.style.width = e, t.style.height = n - }), 100) - } - window.canvas = t - }, - M = function() { - var t = Math.PI / 180, - e = .25 * Math.PI, - n = new Float32Array([0, 0, 0, 1]), - i = new Float32Array([0, 0, 0]); - - function r(r, o, s, a, l, c) { - ! function(n, i, r, o) { - var s = Math.tan(i ? i.upDegrees * t : e), - a = Math.tan(i ? i.downDegrees * t : e), - l = Math.tan(i ? i.leftDegrees * t : e), - c = Math.tan(i ? i.rightDegrees * t : e), - h = 2 / (l + c), - u = 2 / (s + a); - n[0] = h, n[1] = 0, n[2] = 0, n[3] = 0, n[4] = 0, n[5] = u, n[6] = 0, n[7] = 0, n[8] = -(l - c) * h * .5, n[9] = (s - a) * u * .5, n[10] = o / (r - o), n[11] = -1, n[12] = 0, n[13] = 0, n[14] = o * r / (r - o), n[15] = 0 - }(r, a || null, c.depthNear, c.depthFar); - var h, u, d, p, f, m, g, v, y, A, x, _, b, w, M, E, S, T, L, R = s.orientation || n, - C = s.position || i; - h = o, d = C, p = (u = R)[0], f = u[1], m = u[2], g = u[3], x = p * (v = p + p), _ = p * (y = f + f), b = p * (A = m + m), w = f * y, M = f * A, E = m * A, S = g * v, T = g * y, L = g * A, h[0] = 1 - (w + E), h[1] = _ + L, h[2] = b - T, h[3] = 0, h[4] = _ - L, h[5] = 1 - (x + E), h[6] = M + S, h[7] = 0, h[8] = b + T, h[9] = M - S, h[10] = 1 - (x + w), h[11] = 0, h[12] = d[0], h[13] = d[1], h[14] = d[2], h[15] = 1, l && function(t, e, n) { - var i, r, o, s, a, l, c, h, u, d, p, f, m = n[0], - g = n[1], - v = n[2]; - e === t ? (t[12] = e[0] * m + e[4] * g + e[8] * v + e[12], t[13] = e[1] * m + e[5] * g + e[9] * v + e[13], t[14] = e[2] * m + e[6] * g + e[10] * v + e[14], t[15] = e[3] * m + e[7] * g + e[11] * v + e[15]) : (i = e[0], r = e[1], o = e[2], s = e[3], a = e[4], l = e[5], c = e[6], h = e[7], u = e[8], d = e[9], p = e[10], f = e[11], t[0] = i, t[1] = r, t[2] = o, t[3] = s, t[4] = a, t[5] = l, t[6] = c, t[7] = h, t[8] = u, t[9] = d, t[10] = p, t[11] = f, t[12] = i * m + a * g + u * v + e[12], t[13] = r * m + l * g + d * v + e[13], t[14] = o * m + c * g + p * v + e[14], t[15] = s * m + h * g + f * v + e[15]) - }(o, o, l), - function(t, e) { - var n = e[0], - i = e[1], - r = e[2], - o = e[3], - s = e[4], - a = e[5], - l = e[6], - c = e[7], - h = e[8], - u = e[9], - d = e[10], - p = e[11], - f = e[12], - m = e[13], - g = e[14], - v = e[15], - y = n * a - i * s, - A = n * l - r * s, - x = n * c - o * s, - _ = i * l - r * a, - b = i * c - o * a, - w = r * c - o * l, - M = h * m - u * f, - E = h * g - d * f, - S = h * v - p * f, - T = u * g - d * m, - L = u * v - p * m, - R = d * v - p * g, - C = y * R - A * L + x * T + _ * S - b * E + w * M; - C && (C = 1 / C, t[0] = (a * R - l * L + c * T) * C, t[1] = (r * L - i * R - o * T) * C, t[2] = (m * w - g * b + v * _) * C, t[3] = (d * b - u * w - p * _) * C, t[4] = (l * S - s * R - c * E) * C, t[5] = (n * R - r * S + o * E) * C, t[6] = (g * x - f * w - v * A) * C, t[7] = (h * w - d * x + p * A) * C, t[8] = (s * L - a * S + c * M) * C, t[9] = (i * S - n * L - o * M) * C, t[10] = (f * b - m * x + v * y) * C, t[11] = (u * x - h * b - p * y) * C, t[12] = (a * E - s * T - l * M) * C, t[13] = (n * T - i * E + r * M) * C, t[14] = (m * A - f * _ - g * y) * C, t[15] = (h * _ - u * A + d * y) * C) - }(o, o) - } - return function(t, e, n) { - return !(!t || !e || (t.pose = e, t.timestamp = e.timestamp, r(t.leftProjectionMatrix, t.leftViewMatrix, e, n._getFieldOfView("left"), n._getEyeOffset("left"), n), r(t.rightProjectionMatrix, t.rightViewMatrix, e, n._getFieldOfView("right"), n._getEyeOffset("right"), n), 0)) - } - }(), - E = function(t) { - var e, n = t.indexOf("://"); - e = -1 !== n ? n + 3 : 0; - var i = t.indexOf("/", e); - return -1 === i && (i = t.length), t.substring(0, i) - }, - S = (t = {}, function(e, n) { - void 0 === t[e] && (console.warn("webvr-polyfill: " + n), t[e] = !0) - }), - T = function(t, e) { - S(t, t + " has been deprecated. This may not work on native WebVR displays. " + (e ? "Please use " + e + " instead." : "")) - }, - L = function(t, e, n) { - if (e) { - for (var i = [], r = null, o = 0; o < e.length; ++o) switch (s = e[o]) { - case t.TEXTURE_BINDING_2D: - case t.TEXTURE_BINDING_CUBE_MAP: - if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) { - console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"), i.push(null, null); - break - } - r || (r = t.getParameter(t.ACTIVE_TEXTURE)), t.activeTexture(l), i.push(t.getParameter(s), null); - break; - case t.ACTIVE_TEXTURE: - r = t.getParameter(t.ACTIVE_TEXTURE), i.push(null); - break; - default: - i.push(t.getParameter(s)) - } - for (n(t), o = 0; o < e.length; ++o) { - var s = e[o], - a = i[o]; - switch (s) { - case t.ACTIVE_TEXTURE: - break; - case t.ARRAY_BUFFER_BINDING: - t.bindBuffer(t.ARRAY_BUFFER, a); - break; - case t.COLOR_CLEAR_VALUE: - t.clearColor(a[0], a[1], a[2], a[3]); - break; - case t.COLOR_WRITEMASK: - t.colorMask(a[0], a[1], a[2], a[3]); - break; - case t.CURRENT_PROGRAM: - t.useProgram(a); - break; - case t.ELEMENT_ARRAY_BUFFER_BINDING: - t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, a); - break; - case t.FRAMEBUFFER_BINDING: - t.bindFramebuffer(t.FRAMEBUFFER, a); - break; - case t.RENDERBUFFER_BINDING: - t.bindRenderbuffer(t.RENDERBUFFER, a); - break; - case t.TEXTURE_BINDING_2D: - if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) break; - t.activeTexture(l), t.bindTexture(t.TEXTURE_2D, a); - break; - case t.TEXTURE_BINDING_CUBE_MAP: - var l; - if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) break; - t.activeTexture(l), t.bindTexture(t.TEXTURE_CUBE_MAP, a); - break; - case t.VIEWPORT: - t.viewport(a[0], a[1], a[2], a[3]); - break; - case t.BLEND: - case t.CULL_FACE: - case t.DEPTH_TEST: - case t.SCISSOR_TEST: - case t.STENCIL_TEST: - a ? t.enable(s) : t.disable(s); - break; - default: - console.log("No GL restore behavior for 0x" + s.toString(16)) - } - r && t.activeTexture(r) - } - } else n(t) - }, - R = ["attribute vec2 position;", "attribute vec3 texCoord;", "varying vec2 vTexCoord;", "uniform vec4 viewportOffsetScale[2];", "void main() {", " vec4 viewport = viewportOffsetScale[int(texCoord.z)];", " vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;", " gl_Position = vec4( position, 1.0, 1.0 );", "}"].join("\n"), - C = ["precision mediump float;", "uniform sampler2D diffuse;", "varying vec2 vTexCoord;", "void main() {", " gl_FragColor = texture2D(diffuse, vTexCoord);", "}"].join("\n"); - - function P(t, e, n, i) { - this.gl = t, this.cardboardUI = e, this.bufferScale = n, this.dirtySubmitFrameBindings = i, this.ctxAttribs = t.getContextAttributes(), this.instanceExt = t.getExtension("ANGLE_instanced_arrays"), this.meshWidth = 20, this.meshHeight = 20, this.bufferWidth = t.drawingBufferWidth, this.bufferHeight = t.drawingBufferHeight, this.realBindFramebuffer = t.bindFramebuffer, this.realEnable = t.enable, this.realDisable = t.disable, this.realColorMask = t.colorMask, this.realClearColor = t.clearColor, this.realViewport = t.viewport, a() || (this.realCanvasWidth = Object.getOwnPropertyDescriptor(t.canvas.__proto__, "width"), this.realCanvasHeight = Object.getOwnPropertyDescriptor(t.canvas.__proto__, "height")), this.isPatched = !1, this.lastBoundFramebuffer = null, this.cullFace = !1, this.depthTest = !1, this.blend = !1, this.scissorTest = !1, this.stencilTest = !1, this.viewport = [0, 0, 0, 0], this.colorMask = [!0, !0, !0, !0], this.clearColor = [0, 0, 0, 0], this.attribs = { - position: 0, - texCoord: 1 - }, this.program = A(t, R, C, this.attribs), this.uniforms = x(t, this.program), this.viewportOffsetScale = new Float32Array(8), this.setTextureBounds(), this.vertexBuffer = t.createBuffer(), this.indexBuffer = t.createBuffer(), this.indexCount = 0, this.renderTarget = t.createTexture(), this.framebuffer = t.createFramebuffer(), this.depthStencilBuffer = null, this.depthBuffer = null, this.stencilBuffer = null, this.ctxAttribs.depth && this.ctxAttribs.stencil ? this.depthStencilBuffer = t.createRenderbuffer() : this.ctxAttribs.depth ? this.depthBuffer = t.createRenderbuffer() : this.ctxAttribs.stencil && (this.stencilBuffer = t.createRenderbuffer()), this.patch(), this.onResize() - } - P.prototype.destroy = function() { - var t = this.gl; - this.unpatch(), t.deleteProgram(this.program), t.deleteBuffer(this.vertexBuffer), t.deleteBuffer(this.indexBuffer), t.deleteTexture(this.renderTarget), t.deleteFramebuffer(this.framebuffer), this.depthStencilBuffer && t.deleteRenderbuffer(this.depthStencilBuffer), this.depthBuffer && t.deleteRenderbuffer(this.depthBuffer), this.stencilBuffer && t.deleteRenderbuffer(this.stencilBuffer), this.cardboardUI && this.cardboardUI.destroy() - }, P.prototype.onResize = function() { - var t = this.gl, - e = this, - n = [t.RENDERBUFFER_BINDING, t.TEXTURE_BINDING_2D, t.TEXTURE0]; - L(t, n, (function(t) { - e.realBindFramebuffer.call(t, t.FRAMEBUFFER, null), e.scissorTest && e.realDisable.call(t, t.SCISSOR_TEST), e.realColorMask.call(t, !0, !0, !0, !0), e.realViewport.call(t, 0, 0, t.drawingBufferWidth, t.drawingBufferHeight), e.realClearColor.call(t, 0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT), e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.framebuffer), t.bindTexture(t.TEXTURE_2D, e.renderTarget), t.texImage2D(t.TEXTURE_2D, 0, e.ctxAttribs.alpha ? t.RGBA : t.RGB, e.bufferWidth, e.bufferHeight, 0, e.ctxAttribs.alpha ? t.RGBA : t.RGB, t.UNSIGNED_BYTE, null), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE), t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, e.renderTarget, 0), e.ctxAttribs.depth && e.ctxAttribs.stencil ? (t.bindRenderbuffer(t.RENDERBUFFER, e.depthStencilBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.DEPTH_STENCIL, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.DEPTH_STENCIL_ATTACHMENT, t.RENDERBUFFER, e.depthStencilBuffer)) : e.ctxAttribs.depth ? (t.bindRenderbuffer(t.RENDERBUFFER, e.depthBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.DEPTH_COMPONENT16, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.DEPTH_ATTACHMENT, t.RENDERBUFFER, e.depthBuffer)) : e.ctxAttribs.stencil && (t.bindRenderbuffer(t.RENDERBUFFER, e.stencilBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.STENCIL_INDEX8, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.STENCIL_ATTACHMENT, t.RENDERBUFFER, e.stencilBuffer)), !t.checkFramebufferStatus(t.FRAMEBUFFER) === t.FRAMEBUFFER_COMPLETE && console.error("Framebuffer incomplete!"), e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.lastBoundFramebuffer), e.scissorTest && e.realEnable.call(t, t.SCISSOR_TEST), e.realColorMask.apply(t, e.colorMask), e.realViewport.apply(t, e.viewport), e.realClearColor.apply(t, e.clearColor) - })), this.cardboardUI && this.cardboardUI.onResize() - }, P.prototype.patch = function() { - if (!this.isPatched) { - var t = this, - e = this.gl.canvas, - n = this.gl; - a() || (e.width = g() * this.bufferScale, e.height = v() * this.bufferScale, Object.defineProperty(e, "width", { - configurable: !0, - enumerable: !0, - get: function() { - return t.bufferWidth - }, - set: function(n) { - t.bufferWidth = n, t.realCanvasWidth.set.call(e, n), t.onResize() - } - }), Object.defineProperty(e, "height", { - configurable: !0, - enumerable: !0, - get: function() { - return t.bufferHeight - }, - set: function(n) { - t.bufferHeight = n, t.realCanvasHeight.set.call(e, n), t.onResize() - } - })), this.lastBoundFramebuffer = n.getParameter(n.FRAMEBUFFER_BINDING), null == this.lastBoundFramebuffer && (this.lastBoundFramebuffer = this.framebuffer, this.gl.bindFramebuffer(n.FRAMEBUFFER, this.framebuffer)), this.gl.bindFramebuffer = function(e, i) { - t.lastBoundFramebuffer = i || t.framebuffer, t.realBindFramebuffer.call(n, e, t.lastBoundFramebuffer) - }, this.cullFace = n.getParameter(n.CULL_FACE), this.depthTest = n.getParameter(n.DEPTH_TEST), this.blend = n.getParameter(n.BLEND), this.scissorTest = n.getParameter(n.SCISSOR_TEST), this.stencilTest = n.getParameter(n.STENCIL_TEST), n.enable = function(e) { - switch (e) { - case n.CULL_FACE: - t.cullFace = !0; - break; - case n.DEPTH_TEST: - t.depthTest = !0; - break; - case n.BLEND: - t.blend = !0; - break; - case n.SCISSOR_TEST: - t.scissorTest = !0; - break; - case n.STENCIL_TEST: - t.stencilTest = !0 - } - t.realEnable.call(n, e) - }, n.disable = function(e) { - switch (e) { - case n.CULL_FACE: - t.cullFace = !1; - break; - case n.DEPTH_TEST: - t.depthTest = !1; - break; - case n.BLEND: - t.blend = !1; - break; - case n.SCISSOR_TEST: - t.scissorTest = !1; - break; - case n.STENCIL_TEST: - t.stencilTest = !1 - } - t.realDisable.call(n, e) - }, this.colorMask = n.getParameter(n.COLOR_WRITEMASK), n.colorMask = function(e, i, r, o) { - t.colorMask[0] = e, t.colorMask[1] = i, t.colorMask[2] = r, t.colorMask[3] = o, t.realColorMask.call(n, e, i, r, o) - }, this.clearColor = n.getParameter(n.COLOR_CLEAR_VALUE), n.clearColor = function(e, i, r, o) { - t.clearColor[0] = e, t.clearColor[1] = i, t.clearColor[2] = r, t.clearColor[3] = o, t.realClearColor.call(n, e, i, r, o) - }, this.viewport = n.getParameter(n.VIEWPORT), n.viewport = function(e, i, r, o) { - t.viewport[0] = e, t.viewport[1] = i, t.viewport[2] = r, t.viewport[3] = o, t.realViewport.call(n, e, i, r, o) - }, this.isPatched = !0, w(e) - } - }, P.prototype.unpatch = function() { - if (this.isPatched) { - var t = this.gl, - e = this.gl.canvas; - a() || (Object.defineProperty(e, "width", this.realCanvasWidth), Object.defineProperty(e, "height", this.realCanvasHeight)), e.width = this.bufferWidth, e.height = this.bufferHeight, t.bindFramebuffer = this.realBindFramebuffer, t.enable = this.realEnable, t.disable = this.realDisable, t.colorMask = this.realColorMask, t.clearColor = this.realClearColor, t.viewport = this.realViewport, this.lastBoundFramebuffer == this.framebuffer && t.bindFramebuffer(t.FRAMEBUFFER, null), this.isPatched = !1, setTimeout((function() { - w(e) - }), 1) - } - }, P.prototype.setTextureBounds = function(t, e) { - t || (t = [0, 0, .5, 1]), e || (e = [.5, 0, .5, 1]), this.viewportOffsetScale[0] = t[0], this.viewportOffsetScale[1] = t[1], this.viewportOffsetScale[2] = t[2], this.viewportOffsetScale[3] = t[3], this.viewportOffsetScale[4] = e[0], this.viewportOffsetScale[5] = e[1], this.viewportOffsetScale[6] = e[2], this.viewportOffsetScale[7] = e[3] - }, P.prototype.submitFrame = function() { - var t = this.gl, - e = this, - n = []; - if (this.dirtySubmitFrameBindings || n.push(t.CURRENT_PROGRAM, t.ARRAY_BUFFER_BINDING, t.ELEMENT_ARRAY_BUFFER_BINDING, t.TEXTURE_BINDING_2D, t.TEXTURE0), L(t, n, (function(t) { - e.realBindFramebuffer.call(t, t.FRAMEBUFFER, null); - var n = 0, - i = 0; - e.instanceExt && (n = t.getVertexAttrib(e.attribs.position, e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE), i = t.getVertexAttrib(e.attribs.texCoord, e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)), e.cullFace && e.realDisable.call(t, t.CULL_FACE), e.depthTest && e.realDisable.call(t, t.DEPTH_TEST), e.blend && e.realDisable.call(t, t.BLEND), e.scissorTest && e.realDisable.call(t, t.SCISSOR_TEST), e.stencilTest && e.realDisable.call(t, t.STENCIL_TEST), e.realColorMask.call(t, !0, !0, !0, !0), e.realViewport.call(t, 0, 0, t.drawingBufferWidth, t.drawingBufferHeight), (e.ctxAttribs.alpha || a()) && (e.realClearColor.call(t, 0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT)), t.useProgram(e.program), t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, e.indexBuffer), t.bindBuffer(t.ARRAY_BUFFER, e.vertexBuffer), t.enableVertexAttribArray(e.attribs.position), t.enableVertexAttribArray(e.attribs.texCoord), t.vertexAttribPointer(e.attribs.position, 2, t.FLOAT, !1, 20, 0), t.vertexAttribPointer(e.attribs.texCoord, 3, t.FLOAT, !1, 20, 8), e.instanceExt && (0 != n && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position, 0), 0 != i && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord, 0)), t.activeTexture(t.TEXTURE0), t.uniform1i(e.uniforms.diffuse, 0), t.bindTexture(t.TEXTURE_2D, e.renderTarget), t.uniform4fv(e.uniforms.viewportOffsetScale, e.viewportOffsetScale), t.drawElements(t.TRIANGLES, e.indexCount, t.UNSIGNED_SHORT, 0), e.cardboardUI && e.cardboardUI.renderNoState(), e.realBindFramebuffer.call(e.gl, t.FRAMEBUFFER, e.framebuffer), e.ctxAttribs.preserveDrawingBuffer || (e.realClearColor.call(t, 0, 0, 0, 0), t.clear(t.COLOR_BUFFER_BIT)), e.dirtySubmitFrameBindings || e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.lastBoundFramebuffer), e.cullFace && e.realEnable.call(t, t.CULL_FACE), e.depthTest && e.realEnable.call(t, t.DEPTH_TEST), e.blend && e.realEnable.call(t, t.BLEND), e.scissorTest && e.realEnable.call(t, t.SCISSOR_TEST), e.stencilTest && e.realEnable.call(t, t.STENCIL_TEST), e.realColorMask.apply(t, e.colorMask), e.realViewport.apply(t, e.viewport), !e.ctxAttribs.alpha && e.ctxAttribs.preserveDrawingBuffer || e.realClearColor.apply(t, e.clearColor), e.instanceExt && (0 != n && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position, n), 0 != i && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord, i)) - })), a()) { - var i = t.canvas; - i.width == e.bufferWidth && i.height == e.bufferHeight || (e.bufferWidth = i.width, e.bufferHeight = i.height, e.onResize()) - } - }, P.prototype.updateDeviceInfo = function(t) { - var e = this.gl, - n = this, - i = [e.ARRAY_BUFFER_BINDING, e.ELEMENT_ARRAY_BUFFER_BINDING]; - L(e, i, (function(e) { - var i = n.computeMeshVertices_(n.meshWidth, n.meshHeight, t); - if (e.bindBuffer(e.ARRAY_BUFFER, n.vertexBuffer), e.bufferData(e.ARRAY_BUFFER, i, e.STATIC_DRAW), !n.indexCount) { - var r = n.computeMeshIndices_(n.meshWidth, n.meshHeight); - e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, n.indexBuffer), e.bufferData(e.ELEMENT_ARRAY_BUFFER, r, e.STATIC_DRAW), n.indexCount = r.length - } - })) - }, P.prototype.computeMeshVertices_ = function(t, e, n) { - for (var i = new Float32Array(2 * t * e * 5), r = n.getLeftEyeVisibleTanAngles(), o = n.getLeftEyeNoLensTanAngles(), a = n.getLeftEyeVisibleScreenRect(o), l = 0, c = 0; c < 2; c++) { - for (var h = 0; h < e; h++) - for (var u = 0; u < t; u++, l++) { - var d = u / (t - 1), - p = h / (e - 1), - f = d, - m = p, - g = s(r[0], r[2], d), - v = s(r[3], r[1], p), - y = Math.sqrt(g * g + v * v), - A = n.distortion.distortInverse(y), - x = v * A / y; - d = (g * A / y - o[0]) / (o[2] - o[0]), p = (x - o[3]) / (o[1] - o[3]), d = 2 * (a.x + d * a.width - .5), p = 2 * (a.y + p * a.height - .5), i[5 * l + 0] = d, i[5 * l + 1] = p, i[5 * l + 2] = f, i[5 * l + 3] = m, i[5 * l + 4] = c - } - var _ = r[2] - r[0]; - r[0] = -(_ + r[0]), r[2] = _ - r[2], _ = o[2] - o[0], o[0] = -(_ + o[0]), o[2] = _ - o[2], a.x = 1 - (a.x + a.width) - } - return i - }, P.prototype.computeMeshIndices_ = function(t, e) { - for (var n = new Uint16Array(2 * (t - 1) * (e - 1) * 6), i = t / 2, r = e / 2, o = 0, s = 0, a = 0; a < 2; a++) - for (var l = 0; l < e; l++) - for (var c = 0; c < t; c++, o++) 0 != c && 0 != l && (c <= i == l <= r ? (n[s++] = o, n[s++] = o - t - 1, n[s++] = o - t, n[s++] = o - t - 1, n[s++] = o, n[s++] = o - 1) : (n[s++] = o - 1, n[s++] = o - t, n[s++] = o, n[s++] = o - t, n[s++] = o - 1, n[s++] = o - t - 1)); - return n - }, P.prototype.getOwnPropertyDescriptor_ = function(t, e) { - var n = Object.getOwnPropertyDescriptor(t, e); - return void 0 !== n.get && void 0 !== n.set || (n.configurable = !0, n.enumerable = !0, n.get = function() { - return this.getAttribute(e) - }, n.set = function(t) { - this.setAttribute(e, t) - }), n - }; - var D = ["attribute vec2 position;", "uniform mat4 projectionMat;", "void main() {", " gl_Position = projectionMat * vec4( position, -1.0, 1.0 );", "}"].join("\n"), - I = ["precision mediump float;", "uniform vec4 color;", "void main() {", " gl_FragColor = color;", "}"].join("\n"), - O = Math.PI / 180; - - function N(t) { - this.gl = t, this.attribs = { - position: 0 - }, this.program = A(t, D, I, this.attribs), this.uniforms = x(t, this.program), this.vertexBuffer = t.createBuffer(), this.gearOffset = 0, this.gearVertexCount = 0, this.arrowOffset = 0, this.arrowVertexCount = 0, this.projMat = new Float32Array(16), this.listener = null, this.onResize() - } - - function B(t) { - this.coefficients = t - } - N.prototype.destroy = function() { - var t = this.gl; - this.listener && t.canvas.removeEventListener("click", this.listener, !1), t.deleteProgram(this.program), t.deleteBuffer(this.vertexBuffer) - }, N.prototype.listen = function(t, e) { - var n = this.gl.canvas; - this.listener = function(i) { - var r = n.clientWidth / 2; - i.clientX > r - 42 && i.clientX < r + 42 && i.clientY > n.clientHeight - 42 ? t(i) : i.clientX < 42 && i.clientY < 42 && e(i) - }, n.addEventListener("click", this.listener, !1) - }, N.prototype.onResize = function() { - var t = this.gl, - e = this, - n = [t.ARRAY_BUFFER_BINDING]; - L(t, n, (function(t) { - var n = [], - i = t.drawingBufferWidth / 2, - r = Math.max(screen.width, screen.height) * window.devicePixelRatio, - o = t.drawingBufferWidth / r * window.devicePixelRatio, - s = 4 * o / 2, - a = 42 * o, - l = 28 * o / 2, - c = 14 * o; - - function h(t, e) { - var r = (90 - t) * O, - o = Math.cos(r), - s = Math.sin(r); - n.push(.3125 * o * l + i, .3125 * s * l + l), n.push(e * o * l + i, e * s * l + l) - } - n.push(i - s, a), n.push(i - s, t.drawingBufferHeight), n.push(i + s, a), n.push(i + s, t.drawingBufferHeight), e.gearOffset = n.length / 2; - for (var u = 0; u <= 6; u++) { - var d = 60 * u; - h(d, 1), h(d + 12, 1), h(d + 20, .75), h(d + 40, .75), h(d + 48, 1) - } - - function p(e, i) { - n.push(c + e, t.drawingBufferHeight - c - i) - } - e.gearVertexCount = n.length / 2 - e.gearOffset, e.arrowOffset = n.length / 2; - var f = s / Math.sin(45 * O); - p(0, l), p(l, 0), p(l + f, f), p(f, l + f), p(f, l - f), p(0, l), p(l, 2 * l), p(l + f, 2 * l - f), p(f, l - f), p(0, l), p(f, l - s), p(28 * o, l - s), p(f, l + s), p(28 * o, l + s), e.arrowVertexCount = n.length / 2 - e.arrowOffset, t.bindBuffer(t.ARRAY_BUFFER, e.vertexBuffer), t.bufferData(t.ARRAY_BUFFER, new Float32Array(n), t.STATIC_DRAW) - })) - }, N.prototype.render = function() { - var t = this.gl, - e = this, - n = [t.CULL_FACE, t.DEPTH_TEST, t.BLEND, t.SCISSOR_TEST, t.STENCIL_TEST, t.COLOR_WRITEMASK, t.VIEWPORT, t.CURRENT_PROGRAM, t.ARRAY_BUFFER_BINDING]; - L(t, n, (function(t) { - t.disable(t.CULL_FACE), t.disable(t.DEPTH_TEST), t.disable(t.BLEND), t.disable(t.SCISSOR_TEST), t.disable(t.STENCIL_TEST), t.colorMask(!0, !0, !0, !0), t.viewport(0, 0, t.drawingBufferWidth, t.drawingBufferHeight), e.renderNoState() - })) - }, N.prototype.renderNoState = function() { - var t, e, n, i, r, o, s, a, l, c, h = this.gl; - h.useProgram(this.program), h.bindBuffer(h.ARRAY_BUFFER, this.vertexBuffer), h.enableVertexAttribArray(this.attribs.position), h.vertexAttribPointer(this.attribs.position, 2, h.FLOAT, !1, 8, 0), h.uniform4f(this.uniforms.color, 1, 1, 1, 1), t = this.projMat, e = 0, n = h.drawingBufferWidth, i = 0, r = h.drawingBufferHeight, a = 1 / (e - n), l = 1 / (i - r), c = 1 / ((o = .1) - (s = 1024)), t[0] = -2 * a, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[5] = -2 * l, t[6] = 0, t[7] = 0, t[8] = 0, t[9] = 0, t[10] = 2 * c, t[11] = 0, t[12] = (e + n) * a, t[13] = (r + i) * l, t[14] = (s + o) * c, t[15] = 1, h.uniformMatrix4fv(this.uniforms.projectionMat, !1, this.projMat), h.drawArrays(h.TRIANGLE_STRIP, 0, 4), h.drawArrays(h.TRIANGLE_STRIP, this.gearOffset, this.gearVertexCount), h.drawArrays(h.TRIANGLE_STRIP, this.arrowOffset, this.arrowVertexCount) - }, B.prototype.distortInverse = function(t) { - for (var e = 0, n = 1, i = t - this.distort(e); Math.abs(n - e) > 1e-4;) { - var r = t - this.distort(n), - o = n - r * ((n - e) / (r - i)); - e = n, n = o, i = r - } - return n - }, B.prototype.distort = function(t) { - for (var e = t * t, n = 0, i = 0; i < this.coefficients.length; i++) n = e * (n + this.coefficients[i]); - return (n + 1) * t - }; - var F = Math.PI / 180, - z = 180 / Math.PI, - U = function(t, e, n) { - this.x = t || 0, this.y = e || 0, this.z = n || 0 - }; - U.prototype = { - constructor: U, - set: function(t, e, n) { - return this.x = t, this.y = e, this.z = n, this - }, - copy: function(t) { - return this.x = t.x, this.y = t.y, this.z = t.z, this - }, - length: function() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) - }, - normalize: function() { - var t = this.length(); - if (0 !== t) { - var e = 1 / t; - this.multiplyScalar(e) - } else this.x = 0, this.y = 0, this.z = 0; - return this - }, - multiplyScalar: function(t) { - this.x *= t, this.y *= t, this.z *= t - }, - applyQuaternion: function(t) { - var e = this.x, - n = this.y, - i = this.z, - r = t.x, - o = t.y, - s = t.z, - a = t.w, - l = a * e + o * i - s * n, - c = a * n + s * e - r * i, - h = a * i + r * n - o * e, - u = -r * e - o * n - s * i; - return this.x = l * a + u * -r + c * -s - h * -o, this.y = c * a + u * -o + h * -r - l * -s, this.z = h * a + u * -s + l * -o - c * -r, this - }, - dot: function(t) { - return this.x * t.x + this.y * t.y + this.z * t.z - }, - crossVectors: function(t, e) { - var n = t.x, - i = t.y, - r = t.z, - o = e.x, - s = e.y, - a = e.z; - return this.x = i * a - r * s, this.y = r * o - n * a, this.z = n * s - i * o, this - } - }; - var H, G, V = function(t, e, n, i) { - this.x = t || 0, this.y = e || 0, this.z = n || 0, this.w = void 0 !== i ? i : 1 - }; - - function k(t) { - this.width = t.width || g(), this.height = t.height || v(), this.widthMeters = t.widthMeters, this.heightMeters = t.heightMeters, this.bevelMeters = t.bevelMeters - } - V.prototype = { - constructor: V, - set: function(t, e, n, i) { - return this.x = t, this.y = e, this.z = n, this.w = i, this - }, - copy: function(t) { - return this.x = t.x, this.y = t.y, this.z = t.z, this.w = t.w, this - }, - setFromEulerXYZ: function(t, e, n) { - var i = Math.cos(t / 2), - r = Math.cos(e / 2), - o = Math.cos(n / 2), - s = Math.sin(t / 2), - a = Math.sin(e / 2), - l = Math.sin(n / 2); - return this.x = s * r * o + i * a * l, this.y = i * a * o - s * r * l, this.z = i * r * l + s * a * o, this.w = i * r * o - s * a * l, this - }, - setFromEulerYXZ: function(t, e, n) { - var i = Math.cos(t / 2), - r = Math.cos(e / 2), - o = Math.cos(n / 2), - s = Math.sin(t / 2), - a = Math.sin(e / 2), - l = Math.sin(n / 2); - return this.x = s * r * o + i * a * l, this.y = i * a * o - s * r * l, this.z = i * r * l - s * a * o, this.w = i * r * o + s * a * l, this - }, - setFromAxisAngle: function(t, e) { - var n = e / 2, - i = Math.sin(n); - return this.x = t.x * i, this.y = t.y * i, this.z = t.z * i, this.w = Math.cos(n), this - }, - multiply: function(t) { - return this.multiplyQuaternions(this, t) - }, - multiplyQuaternions: function(t, e) { - var n = t.x, - i = t.y, - r = t.z, - o = t.w, - s = e.x, - a = e.y, - l = e.z, - c = e.w; - return this.x = n * c + o * s + i * l - r * a, this.y = i * c + o * a + r * s - n * l, this.z = r * c + o * l + n * a - i * s, this.w = o * c - n * s - i * a - r * l, this - }, - inverse: function() { - return this.x *= -1, this.y *= -1, this.z *= -1, this.normalize(), this - }, - normalize: function() { - var t = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); - return 0 === t ? (this.x = 0, this.y = 0, this.z = 0, this.w = 1) : (t = 1 / t, this.x = this.x * t, this.y = this.y * t, this.z = this.z * t, this.w = this.w * t), this - }, - slerp: function(t, e) { - if (0 === e) return this; - if (1 === e) return this.copy(t); - var n = this.x, - i = this.y, - r = this.z, - o = this.w, - s = o * t.w + n * t.x + i * t.y + r * t.z; - if (s < 0 ? (this.w = -t.w, this.x = -t.x, this.y = -t.y, this.z = -t.z, s = -s) : this.copy(t), s >= 1) return this.w = o, this.x = n, this.y = i, this.z = r, this; - var a = Math.acos(s), - l = Math.sqrt(1 - s * s); - if (Math.abs(l) < .001) return this.w = .5 * (o + this.w), this.x = .5 * (n + this.x), this.y = .5 * (i + this.y), this.z = .5 * (r + this.z), this; - var c = Math.sin((1 - e) * a) / l, - h = Math.sin(e * a) / l; - return this.w = o * c + this.w * h, this.x = n * c + this.x * h, this.y = i * c + this.y * h, this.z = r * c + this.z * h, this - }, - setFromUnitVectors: function(t, e) { - return void 0 === H && (H = new U), (G = t.dot(e) + 1) < 1e-6 ? (G = 0, Math.abs(t.x) > Math.abs(t.z) ? H.set(-t.y, t.x, 0) : H.set(0, -t.z, t.y)) : H.crossVectors(t, e), this.x = H.x, this.y = H.y, this.z = H.z, this.w = G, this.normalize(), this - } - }; - var W = new k({ - widthMeters: .11, - heightMeters: .062, - bevelMeters: .004 - }), - j = new k({ - widthMeters: .1038, - heightMeters: .0584, - bevelMeters: .004 - }), - X = { - CardboardV1: new Y({ - id: "CardboardV1", - label: "Cardboard I/O 2014", - fov: 40, - interLensDistance: .06, - baselineLensDistance: .035, - screenLensDistance: .042, - distortionCoefficients: [.441, .156], - inverseCoefficients: [-.4410035, .42756155, -.4804439, .5460139, -.58821183, .5733938, -.48303202, .33299083, -.17573841, .0651772, -.01488963, .001559834] - }), - CardboardV2: new Y({ - id: "CardboardV2", - label: "Cardboard I/O 2015", - fov: 60, - interLensDistance: .064, - baselineLensDistance: .035, - screenLensDistance: .039, - distortionCoefficients: [.34, .55], - inverseCoefficients: [-.33836704, -.18162185, .862655, -1.2462051, 1.0560602, -.58208317, .21609078, -.05444823, .009177956, -.0009904169, 6183535e-11, -16981803e-13] - }) - }; - - function q(t, e) { - this.viewer = X.CardboardV2, this.updateDeviceParams(t), this.distortion = new B(this.viewer.distortionCoefficients); - for (var n = 0; n < e.length; n++) { - var i = e[n]; - X[i.id] = new Y(i) - } - } - - function Y(t) { - this.id = t.id, this.label = t.label, this.fov = t.fov, this.interLensDistance = t.interLensDistance, this.baselineLensDistance = t.baselineLensDistance, this.screenLensDistance = t.screenLensDistance, this.distortionCoefficients = t.distortionCoefficients, this.inverseCoefficients = t.inverseCoefficients - } - q.prototype.updateDeviceParams = function(t) { - this.device = this.determineDevice_(t) || this.device - }, q.prototype.getDevice = function() { - return this.device - }, q.prototype.setViewer = function(t) { - this.viewer = t, this.distortion = new B(this.viewer.distortionCoefficients) - }, q.prototype.determineDevice_ = function(t) { - if (!t) return a() ? (console.warn("Using fallback iOS device measurements."), j) : (console.warn("Using fallback Android device measurements."), W); - var e = .0254 / t.xdpi, - n = .0254 / t.ydpi; - return new k({ - widthMeters: e * g(), - heightMeters: n * v(), - bevelMeters: .001 * t.bevelMm - }) - }, q.prototype.getDistortedFieldOfViewLeftEye = function() { - var t = this.viewer, - e = this.device, - n = this.distortion, - i = t.screenLensDistance, - r = (e.widthMeters - t.interLensDistance) / 2, - o = t.interLensDistance / 2, - s = t.baselineLensDistance - e.bevelMeters, - a = e.heightMeters - s, - l = z * Math.atan(n.distort(r / i)), - c = z * Math.atan(n.distort(o / i)), - h = z * Math.atan(n.distort(s / i)), - u = z * Math.atan(n.distort(a / i)); - return { - leftDegrees: Math.min(l, t.fov), - rightDegrees: Math.min(c, t.fov), - downDegrees: Math.min(h, t.fov), - upDegrees: Math.min(u, t.fov) - } - }, q.prototype.getLeftEyeVisibleTanAngles = function() { - var t = this.viewer, - e = this.device, - n = this.distortion, - i = Math.tan(-F * t.fov), - r = Math.tan(F * t.fov), - o = Math.tan(F * t.fov), - s = Math.tan(-F * t.fov), - a = e.widthMeters / 4, - l = e.heightMeters / 2, - c = t.baselineLensDistance - e.bevelMeters - l, - h = t.interLensDistance / 2 - a, - u = -c, - d = t.screenLensDistance, - p = n.distort((h - a) / d), - f = n.distort((u + l) / d), - m = n.distort((h + a) / d), - g = n.distort((u - l) / d), - v = new Float32Array(4); - return v[0] = Math.max(i, p), v[1] = Math.min(r, f), v[2] = Math.min(o, m), v[3] = Math.max(s, g), v - }, q.prototype.getLeftEyeNoLensTanAngles = function() { - var t = this.viewer, - e = this.device, - n = this.distortion, - i = new Float32Array(4), - r = n.distortInverse(Math.tan(-F * t.fov)), - o = n.distortInverse(Math.tan(F * t.fov)), - s = n.distortInverse(Math.tan(F * t.fov)), - a = n.distortInverse(Math.tan(-F * t.fov)), - l = e.widthMeters / 4, - c = e.heightMeters / 2, - h = t.baselineLensDistance - e.bevelMeters - c, - u = t.interLensDistance / 2 - l, - d = -h, - p = t.screenLensDistance, - f = (u - l) / p, - m = (d + c) / p, - g = (u + l) / p, - v = (d - c) / p; - return i[0] = Math.max(r, f), i[1] = Math.min(o, m), i[2] = Math.min(s, g), i[3] = Math.max(a, v), i - }, q.prototype.getLeftEyeVisibleScreenRect = function(t) { - var e = this.viewer, - n = this.device, - i = e.screenLensDistance, - r = (n.widthMeters - e.interLensDistance) / 2, - o = e.baselineLensDistance - n.bevelMeters, - s = (t[0] * i + r) / n.widthMeters, - a = (t[1] * i + o) / n.heightMeters, - l = (t[2] * i + r) / n.widthMeters, - c = (t[3] * i + o) / n.heightMeters; - return { - x: s, - y: c, - width: l - s, - height: a - c - } - }, q.prototype.getFieldOfViewLeftEye = function(t) { - return t ? this.getUndistortedFieldOfViewLeftEye() : this.getDistortedFieldOfViewLeftEye() - }, q.prototype.getFieldOfViewRightEye = function(t) { - var e = this.getFieldOfViewLeftEye(t); - return { - leftDegrees: e.rightDegrees, - rightDegrees: e.leftDegrees, - upDegrees: e.upDegrees, - downDegrees: e.downDegrees - } - }, q.prototype.getUndistortedFieldOfViewLeftEye = function() { - var t = this.getUndistortedParams_(); - return { - leftDegrees: z * Math.atan(t.outerDist), - rightDegrees: z * Math.atan(t.innerDist), - downDegrees: z * Math.atan(t.bottomDist), - upDegrees: z * Math.atan(t.topDist) - } - }, q.prototype.getUndistortedViewportLeftEye = function() { - var t = this.getUndistortedParams_(), - e = this.viewer, - n = this.device, - i = e.screenLensDistance, - r = n.widthMeters / i, - o = n.heightMeters / i, - s = n.width / r, - a = n.height / o, - l = Math.round((t.eyePosX - t.outerDist) * s), - c = Math.round((t.eyePosY - t.bottomDist) * a); - return { - x: l, - y: c, - width: Math.round((t.eyePosX + t.innerDist) * s) - l, - height: Math.round((t.eyePosY + t.topDist) * a) - c - } - }, q.prototype.getUndistortedParams_ = function() { - var t = this.viewer, - e = this.device, - n = this.distortion, - i = t.screenLensDistance, - r = t.interLensDistance / 2 / i, - o = e.widthMeters / i, - s = e.heightMeters / i, - a = o / 2 - r, - l = (t.baselineLensDistance - e.bevelMeters) / i, - c = t.fov, - h = n.distortInverse(Math.tan(F * c)), - u = Math.min(a, h), - d = Math.min(r, h), - p = Math.min(l, h); - return { - outerDist: u, - innerDist: d, - topDist: Math.min(s - l, h), - bottomDist: p, - eyePosX: a, - eyePosY: l - } - }, q.Viewers = X; - var Q = { - format: 1, - last_updated: "2019-11-09T17:36:14Z", - devices: [{ - type: "android", - rules: [{ - mdmh: "asus/*/Nexus 7/*" - }, { - ua: "Nexus 7" - }], - dpi: [320.8, 323], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "asus/*/ASUS_X00PD/*" - }, { - ua: "ASUS_X00PD" - }], - dpi: 245, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "asus/*/ASUS_X008D/*" - }, { - ua: "ASUS_X008D" - }], - dpi: 282, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "asus/*/ASUS_Z00AD/*" - }, { - ua: "ASUS_Z00AD" - }], - dpi: [403, 404.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel 2 XL/*" - }, { - ua: "Pixel 2 XL" - }], - dpi: 537.9, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel 3 XL/*" - }, { - ua: "Pixel 3 XL" - }], - dpi: [558.5, 553.8], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel XL/*" - }, { - ua: "Pixel XL" - }], - dpi: [537.9, 533], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel 3/*" - }, { - ua: "Pixel 3" - }], - dpi: 442.4, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel 2/*" - }, { - ua: "Pixel 2" - }], - dpi: 441, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "Google/*/Pixel/*" - }, { - ua: "Pixel" - }], - dpi: [432.6, 436.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "HTC/*/HTC6435LVW/*" - }, { - ua: "HTC6435LVW" - }], - dpi: [449.7, 443.3], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "HTC/*/HTC One XL/*" - }, { - ua: "HTC One XL" - }], - dpi: [315.3, 314.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "htc/*/Nexus 9/*" - }, { - ua: "Nexus 9" - }], - dpi: 289, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "HTC/*/HTC One M9/*" - }, { - ua: "HTC One M9" - }], - dpi: [442.5, 443.3], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "HTC/*/HTC One_M8/*" - }, { - ua: "HTC One_M8" - }], - dpi: [449.7, 447.4], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "HTC/*/HTC One/*" - }, { - ua: "HTC One" - }], - dpi: 472.8, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Huawei/*/Nexus 6P/*" - }, { - ua: "Nexus 6P" - }], - dpi: [515.1, 518], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Huawei/*/BLN-L24/*" - }, { - ua: "HONORBLN-L24" - }], - dpi: 480, - bw: 4, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "Huawei/*/BKL-L09/*" - }, { - ua: "BKL-L09" - }], - dpi: 403, - bw: 3.47, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "LENOVO/*/Lenovo PB2-690Y/*" - }, { - ua: "Lenovo PB2-690Y" - }], - dpi: [457.2, 454.713], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/Nexus 5X/*" - }, { - ua: "Nexus 5X" - }], - dpi: [422, 419.9], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LGMS345/*" - }, { - ua: "LGMS345" - }], - dpi: [221.7, 219.1], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LG-D800/*" - }, { - ua: "LG-D800" - }], - dpi: [422, 424.1], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LG-D850/*" - }, { - ua: "LG-D850" - }], - dpi: [537.9, 541.9], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/VS985 4G/*" - }, { - ua: "VS985 4G" - }], - dpi: [537.9, 535.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/Nexus 5/*" - }, { - ua: "Nexus 5 B" - }], - dpi: [442.4, 444.8], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/Nexus 4/*" - }, { - ua: "Nexus 4" - }], - dpi: [319.8, 318.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LG-P769/*" - }, { - ua: "LG-P769" - }], - dpi: [240.6, 247.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LGMS323/*" - }, { - ua: "LGMS323" - }], - dpi: [206.6, 204.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "LGE/*/LGLS996/*" - }, { - ua: "LGLS996" - }], - dpi: [403.4, 401.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Micromax/*/4560MMX/*" - }, { - ua: "4560MMX" - }], - dpi: [240, 219.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Micromax/*/A250/*" - }, { - ua: "Micromax A250" - }], - dpi: [480, 446.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Micromax/*/Micromax AQ4501/*" - }, { - ua: "Micromax AQ4501" - }], - dpi: 240, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/G5/*" - }, { - ua: "Moto G (5) Plus" - }], - dpi: [403.4, 403], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/DROID RAZR/*" - }, { - ua: "DROID RAZR" - }], - dpi: [368.1, 256.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT830C/*" - }, { - ua: "XT830C" - }], - dpi: [254, 255.9], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1021/*" - }, { - ua: "XT1021" - }], - dpi: [254, 256.7], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1023/*" - }, { - ua: "XT1023" - }], - dpi: [254, 256.7], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1028/*" - }, { - ua: "XT1028" - }], - dpi: [326.6, 327.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1034/*" - }, { - ua: "XT1034" - }], - dpi: [326.6, 328.4], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1053/*" - }, { - ua: "XT1053" - }], - dpi: [315.3, 316.1], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1562/*" - }, { - ua: "XT1562" - }], - dpi: [403.4, 402.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/Nexus 6/*" - }, { - ua: "Nexus 6 B" - }], - dpi: [494.3, 489.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1063/*" - }, { - ua: "XT1063" - }], - dpi: [295, 296.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1064/*" - }, { - ua: "XT1064" - }], - dpi: [295, 295.6], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1092/*" - }, { - ua: "XT1092" - }], - dpi: [422, 424.1], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/XT1095/*" - }, { - ua: "XT1095" - }], - dpi: [422, 423.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "motorola/*/G4/*" - }, { - ua: "Moto G (4)" - }], - dpi: 401, - bw: 4, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/A0001/*" - }, { - ua: "A0001" - }], - dpi: [403.4, 401], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE E1001/*" - }, { - ua: "ONE E1001" - }], - dpi: [442.4, 441.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE E1003/*" - }, { - ua: "ONE E1003" - }], - dpi: [442.4, 441.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE E1005/*" - }, { - ua: "ONE E1005" - }], - dpi: [442.4, 441.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE A2001/*" - }, { - ua: "ONE A2001" - }], - dpi: [391.9, 405.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE A2003/*" - }, { - ua: "ONE A2003" - }], - dpi: [391.9, 405.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE A2005/*" - }, { - ua: "ONE A2005" - }], - dpi: [391.9, 405.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A3000/*" - }, { - ua: "ONEPLUS A3000" - }], - dpi: 401, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A3003/*" - }, { - ua: "ONEPLUS A3003" - }], - dpi: 401, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A3010/*" - }, { - ua: "ONEPLUS A3010" - }], - dpi: 401, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A5000/*" - }, { - ua: "ONEPLUS A5000 " - }], - dpi: [403.411, 399.737], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONE A5010/*" - }, { - ua: "ONEPLUS A5010" - }], - dpi: [403, 400], - bw: 2, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A6000/*" - }, { - ua: "ONEPLUS A6000" - }], - dpi: 401, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A6003/*" - }, { - ua: "ONEPLUS A6003" - }], - dpi: 401, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A6010/*" - }, { - ua: "ONEPLUS A6010" - }], - dpi: 401, - bw: 2, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OnePlus/*/ONEPLUS A6013/*" - }, { - ua: "ONEPLUS A6013" - }], - dpi: 401, - bw: 2, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "OPPO/*/X909/*" - }, { - ua: "X909" - }], - dpi: [442.4, 444.1], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9082/*" - }, { - ua: "GT-I9082" - }], - dpi: [184.7, 185.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G360P/*" - }, { - ua: "SM-G360P" - }], - dpi: [196.7, 205.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/Nexus S/*" - }, { - ua: "Nexus S" - }], - dpi: [234.5, 229.8], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9300/*" - }, { - ua: "GT-I9300" - }], - dpi: [304.8, 303.9], - bw: 5, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-T230NU/*" - }, { - ua: "SM-T230NU" - }], - dpi: 216, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SGH-T399/*" - }, { - ua: "SGH-T399" - }], - dpi: [217.7, 231.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SGH-M919/*" - }, { - ua: "SGH-M919" - }], - dpi: [440.8, 437.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N9005/*" - }, { - ua: "SM-N9005" - }], - dpi: [386.4, 387], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SAMSUNG-SM-N900A/*" - }, { - ua: "SAMSUNG-SM-N900A" - }], - dpi: [386.4, 387.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9500/*" - }, { - ua: "GT-I9500" - }], - dpi: [442.5, 443.3], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9505/*" - }, { - ua: "GT-I9505" - }], - dpi: 439.4, - bw: 4, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G900F/*" - }, { - ua: "SM-G900F" - }], - dpi: [415.6, 431.6], - bw: 5, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G900M/*" - }, { - ua: "SM-G900M" - }], - dpi: [415.6, 431.6], - bw: 5, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G800F/*" - }, { - ua: "SM-G800F" - }], - dpi: 326.8, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G906S/*" - }, { - ua: "SM-G906S" - }], - dpi: [562.7, 572.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9300/*" - }, { - ua: "GT-I9300" - }], - dpi: [306.7, 304.8], - bw: 5, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-T535/*" - }, { - ua: "SM-T535" - }], - dpi: [142.6, 136.4], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N920C/*" - }, { - ua: "SM-N920C" - }], - dpi: [515.1, 518.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N920P/*" - }, { - ua: "SM-N920P" - }], - dpi: [386.3655, 390.144], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N920W8/*" - }, { - ua: "SM-N920W8" - }], - dpi: [515.1, 518.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9300I/*" - }, { - ua: "GT-I9300I" - }], - dpi: [304.8, 305.8], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-I9195/*" - }, { - ua: "GT-I9195" - }], - dpi: [249.4, 256.7], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SPH-L520/*" - }, { - ua: "SPH-L520" - }], - dpi: [249.4, 255.9], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SAMSUNG-SGH-I717/*" - }, { - ua: "SAMSUNG-SGH-I717" - }], - dpi: 285.8, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SPH-D710/*" - }, { - ua: "SPH-D710" - }], - dpi: [217.7, 204.2], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/GT-N7100/*" - }, { - ua: "GT-N7100" - }], - dpi: 265.1, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SCH-I605/*" - }, { - ua: "SCH-I605" - }], - dpi: 265.1, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/Galaxy Nexus/*" - }, { - ua: "Galaxy Nexus" - }], - dpi: [315.3, 314.2], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N910H/*" - }, { - ua: "SM-N910H" - }], - dpi: [515.1, 518], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-N910C/*" - }, { - ua: "SM-N910C" - }], - dpi: [515.2, 520.2], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G130M/*" - }, { - ua: "SM-G130M" - }], - dpi: [165.9, 164.8], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G928I/*" - }, { - ua: "SM-G928I" - }], - dpi: [515.1, 518.4], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G920F/*" - }, { - ua: "SM-G920F" - }], - dpi: 580.6, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G920P/*" - }, { - ua: "SM-G920P" - }], - dpi: [522.5, 577], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G925F/*" - }, { - ua: "SM-G925F" - }], - dpi: 580.6, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G925V/*" - }, { - ua: "SM-G925V" - }], - dpi: [522.5, 576.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G930F/*" - }, { - ua: "SM-G930F" - }], - dpi: 576.6, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G935F/*" - }, { - ua: "SM-G935F" - }], - dpi: 533, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G950F/*" - }, { - ua: "SM-G950F" - }], - dpi: [562.707, 565.293], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G955U/*" - }, { - ua: "SM-G955U" - }], - dpi: [522.514, 525.762], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G955F/*" - }, { - ua: "SM-G955F" - }], - dpi: [522.514, 525.762], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960F/*" - }, { - ua: "SM-G960F" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G9600/*" - }, { - ua: "SM-G9600" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960T/*" - }, { - ua: "SM-G960T" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960N/*" - }, { - ua: "SM-G960N" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960U/*" - }, { - ua: "SM-G960U" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G9608/*" - }, { - ua: "SM-G9608" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960FD/*" - }, { - ua: "SM-G960FD" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G960W/*" - }, { - ua: "SM-G960W" - }], - dpi: [569.575, 571.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G965F/*" - }, { - ua: "SM-G965F" - }], - dpi: 529, - bw: 2, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Sony/*/C6903/*" - }, { - ua: "C6903" - }], - dpi: [442.5, 443.3], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "Sony/*/D6653/*" - }, { - ua: "D6653" - }], - dpi: [428.6, 427.6], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Sony/*/E6653/*" - }, { - ua: "E6653" - }], - dpi: [428.6, 425.7], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Sony/*/E6853/*" - }, { - ua: "E6853" - }], - dpi: [403.4, 401.9], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Sony/*/SGP321/*" - }, { - ua: "SGP321" - }], - dpi: [224.7, 224.1], - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "TCT/*/ALCATEL ONE TOUCH Fierce/*" - }, { - ua: "ALCATEL ONE TOUCH Fierce" - }], - dpi: [240, 247.5], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "THL/*/thl 5000/*" - }, { - ua: "thl 5000" - }], - dpi: [480, 443.3], - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Fly/*/IQ4412/*" - }, { - ua: "IQ4412" - }], - dpi: 307.9, - bw: 3, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "ZTE/*/ZTE Blade L2/*" - }, { - ua: "ZTE Blade L2" - }], - dpi: 240, - bw: 3, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "BENEVE/*/VR518/*" - }, { - ua: "VR518" - }], - dpi: 480, - bw: 3, - ac: 500 - }, { - type: "ios", - rules: [{ - res: [640, 960] - }], - dpi: [325.1, 328.4], - bw: 4, - ac: 1e3 - }, { - type: "ios", - rules: [{ - res: [640, 1136] - }], - dpi: [317.1, 320.2], - bw: 3, - ac: 1e3 - }, { - type: "ios", - rules: [{ - res: [750, 1334] - }], - dpi: 326.4, - bw: 4, - ac: 1e3 - }, { - type: "ios", - rules: [{ - res: [1242, 2208] - }], - dpi: [453.6, 458.4], - bw: 4, - ac: 1e3 - }, { - type: "ios", - rules: [{ - res: [1125, 2001] - }], - dpi: [410.9, 415.4], - bw: 4, - ac: 1e3 - }, { - type: "ios", - rules: [{ - res: [1125, 2436] - }], - dpi: 458, - bw: 4, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "Huawei/*/EML-L29/*" - }, { - ua: "EML-L29" - }], - dpi: 428, - bw: 3.45, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "Nokia/*/Nokia 7.1/*" - }, { - ua: "Nokia 7.1" - }], - dpi: [432, 431.9], - bw: 3, - ac: 500 - }, { - type: "ios", - rules: [{ - res: [1242, 2688] - }], - dpi: 458, - bw: 4, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G570M/*" - }, { - ua: "SM-G570M" - }], - dpi: 320, - bw: 3.684, - ac: 1e3 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G970F/*" - }, { - ua: "SM-G970F" - }], - dpi: 438, - bw: 2.281, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G973F/*" - }, { - ua: "SM-G973F" - }], - dpi: 550, - bw: 2.002, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G975F/*" - }, { - ua: "SM-G975F" - }], - dpi: 522, - bw: 2.054, - ac: 500 - }, { - type: "android", - rules: [{ - mdmh: "samsung/*/SM-G977F/*" - }, { - ua: "SM-G977F" - }], - dpi: 505, - bw: 2.334, - ac: 500 - }, { - type: "ios", - rules: [{ - res: [828, 1792] - }], - dpi: 326, - bw: 5, - ac: 500 - }] - }; - - function Z(t, e) { - if (this.dpdb = Q, this.recalculateDeviceParams_(), t) { - this.onDeviceParamsUpdated = e; - var n = new XMLHttpRequest, - i = this; - n.open("GET", t, !0), n.addEventListener("load", (function() { - i.loading = !1, n.status >= 200 && n.status <= 299 ? (i.dpdb = JSON.parse(n.response), i.recalculateDeviceParams_()) : console.error("Error loading online DPDB!") - })), n.send() - } - } - - function J(t) { - this.xdpi = t.xdpi, this.ydpi = t.ydpi, this.bevelMm = t.bevelMm - } - - function K(t, e) { - this.set(t, e) - } - - function $(t, e) { - this.kFilter = t, this.isDebug = e, this.currentAccelMeasurement = new K, this.currentGyroMeasurement = new K, this.previousGyroMeasurement = new K, a() ? this.filterQ = new V(-1, 0, 0, 1) : this.filterQ = new V(1, 0, 0, 1), this.previousFilterQ = new V, this.previousFilterQ.copy(this.filterQ), this.accelQ = new V, this.isOrientationInitialized = !1, this.estimatedGravity = new U, this.measuredGravity = new U, this.gyroIntegralQ = new V - } - - function tt(t, e) { - this.predictionTimeS = t, this.isDebug = e, this.previousQ = new V, this.previousTimestampS = null, this.deltaQ = new V, this.outQ = new V - } - - function et(t, e, n, i) { - this.yawOnly = n, this.accelerometer = new U, this.gyroscope = new U, this.filter = new $(t, i), this.posePredictor = new tt(e, i), this.isFirefoxAndroid = h(), this.isIOS = a(); - var r = u(); - this.isDeviceMotionInRadians = !this.isIOS && r && r < 66, this.isWithoutDeviceMotion = p() || d(), this.filterToWorldQ = new V, a() ? this.filterToWorldQ.setFromAxisAngle(new U(1, 0, 0), Math.PI / 2) : this.filterToWorldQ.setFromAxisAngle(new U(1, 0, 0), -Math.PI / 2), this.inverseWorldToScreenQ = new V, this.worldToScreenQ = new V, this.originalPoseAdjustQ = new V, this.originalPoseAdjustQ.setFromAxisAngle(new U(0, 0, 1), -window.orientation * Math.PI / 180), this.setScreenTransform_(), m() && this.filterToWorldQ.multiply(this.inverseWorldToScreenQ), this.resetQ = new V, this.orientationOut_ = new Float32Array(4), this.start() - } - Z.prototype.getDeviceParams = function() { - return this.deviceParams - }, Z.prototype.recalculateDeviceParams_ = function() { - var t = this.calcDeviceParams_(); - t ? (this.deviceParams = t, this.onDeviceParamsUpdated && this.onDeviceParamsUpdated(this.deviceParams)) : console.error("Failed to recalculate device parameters.") - }, Z.prototype.calcDeviceParams_ = function() { - var t = this.dpdb; - if (!t) return console.error("DPDB not available."), null; - if (1 != t.format) return console.error("DPDB has unexpected format version."), null; - if (!t.devices || !t.devices.length) return console.error("DPDB does not have a devices section."), null; - var e = navigator.userAgent || navigator.vendor || window.opera, - n = g(), - i = v(); - if (!t.devices) return console.error("DPDB has no devices section."), null; - for (var r = 0; r < t.devices.length; r++) { - var o = t.devices[r]; - if (o.rules) - if ("ios" == o.type || "android" == o.type) { - if (a() == ("ios" == o.type)) { - for (var s = !1, l = 0; l < o.rules.length; l++) { - var c = o.rules[l]; - if (this.ruleMatches_(c, e, n, i)) { - s = !0; - break - } - } - if (s) return new J({ - xdpi: o.dpi[0] || o.dpi, - ydpi: o.dpi[1] || o.dpi, - bevelMm: o.bw - }) - } - } else console.warn("Device[" + r + "] has invalid type."); - else console.warn("Device[" + r + "] has no rules section.") - } - return console.warn("No DPDB device match."), null - }, Z.prototype.ruleMatches_ = function(t, e, n, i) { - if (!t.ua && !t.res) return !1; - if (t.ua && "SM" === t.ua.substring(0, 2) && (t.ua = t.ua.substring(0, 7)), t.ua && e.indexOf(t.ua) < 0) return !1; - if (t.res) { - if (!t.res[0] || !t.res[1]) return !1; - var r = t.res[0], - o = t.res[1]; - if (Math.min(n, i) != Math.min(r, o) || Math.max(n, i) != Math.max(r, o)) return !1 - } - return !0 - }, K.prototype.set = function(t, e) { - this.sample = t, this.timestampS = e - }, K.prototype.copy = function(t) { - this.set(t.sample, t.timestampS) - }, $.prototype.addAccelMeasurement = function(t, e) { - this.currentAccelMeasurement.set(t, e) - }, $.prototype.addGyroMeasurement = function(t, e) { - this.currentGyroMeasurement.set(t, e); - var n, i = e - this.previousGyroMeasurement.timestampS; - n = i, isNaN(n) || n <= .001 || n > 1 || this.run_(), this.previousGyroMeasurement.copy(this.currentGyroMeasurement) - }, $.prototype.run_ = function() { - if (!this.isOrientationInitialized) return this.accelQ = this.accelToQuaternion_(this.currentAccelMeasurement.sample), this.previousFilterQ.copy(this.accelQ), void(this.isOrientationInitialized = !0); - var t = this.currentGyroMeasurement.timestampS - this.previousGyroMeasurement.timestampS, - e = this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample, t); - this.gyroIntegralQ.multiply(e), this.filterQ.copy(this.previousFilterQ), this.filterQ.multiply(e); - var n = new V; - n.copy(this.filterQ), n.inverse(), this.estimatedGravity.set(0, 0, -1), this.estimatedGravity.applyQuaternion(n), this.estimatedGravity.normalize(), this.measuredGravity.copy(this.currentAccelMeasurement.sample), this.measuredGravity.normalize(); - var i, r = new V; - r.setFromUnitVectors(this.estimatedGravity, this.measuredGravity), r.inverse(), this.isDebug && console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)", z * ((i = r).w > 1 ? (console.warn("getQuaternionAngle: w > 1"), 0) : 2 * Math.acos(i.w)), this.estimatedGravity.x.toFixed(1), this.estimatedGravity.y.toFixed(1), this.estimatedGravity.z.toFixed(1), this.measuredGravity.x.toFixed(1), this.measuredGravity.y.toFixed(1), this.measuredGravity.z.toFixed(1)); - var o = new V; - o.copy(this.filterQ), o.multiply(r), this.filterQ.slerp(o, 1 - this.kFilter), this.previousFilterQ.copy(this.filterQ) - }, $.prototype.getOrientation = function() { - return this.filterQ - }, $.prototype.accelToQuaternion_ = function(t) { - var e = new U; - e.copy(t), e.normalize(); - var n = new V; - return n.setFromUnitVectors(new U(0, 0, -1), e), n.inverse(), n - }, $.prototype.gyroToQuaternionDelta_ = function(t, e) { - var n = new V, - i = new U; - return i.copy(t), i.normalize(), n.setFromAxisAngle(i, t.length() * e), n - }, tt.prototype.getPrediction = function(t, e, n) { - if (!this.previousTimestampS) return this.previousQ.copy(t), this.previousTimestampS = n, t; - var i = new U; - i.copy(e), i.normalize(); - var r = e.length(); - if (r < 20 * F) return this.isDebug && console.log("Moving slowly, at %s deg/s: no prediction", (z * r).toFixed(1)), this.outQ.copy(t), this.previousQ.copy(t), this.outQ; - var o = r * this.predictionTimeS; - return this.deltaQ.setFromAxisAngle(i, o), this.outQ.copy(this.previousQ), this.outQ.multiply(this.deltaQ), this.previousQ.copy(t), this.previousTimestampS = n, this.outQ - }, et.prototype.getPosition = function() { - return null - }, et.prototype.getOrientation = function() { - var t = void 0; - if (this.isWithoutDeviceMotion && this._deviceOrientationQ) return this.deviceOrientationFixQ = this.deviceOrientationFixQ || (n = (new V).setFromAxisAngle(new U(0, 0, -1), 0), i = new V, -90 === window.orientation ? i.setFromAxisAngle(new U(0, 1, 0), Math.PI / -2) : i.setFromAxisAngle(new U(0, 1, 0), Math.PI / 2), n.multiply(i)), this.deviceOrientationFilterToWorldQ = this.deviceOrientationFilterToWorldQ || ((e = new V).setFromAxisAngle(new U(1, 0, 0), -Math.PI / 2), e), t = this._deviceOrientationQ, (r = new V).copy(t), r.multiply(this.deviceOrientationFilterToWorldQ), r.multiply(this.resetQ), r.multiply(this.worldToScreenQ), r.multiplyQuaternions(this.deviceOrientationFixQ, r), this.yawOnly && (r.x = 0, r.z = 0, r.normalize()), this.orientationOut_[0] = r.x, this.orientationOut_[1] = r.y, this.orientationOut_[2] = r.z, this.orientationOut_[3] = r.w, this.orientationOut_; - var e, n, i, r, o = this.filter.getOrientation(); - return t = this.posePredictor.getPrediction(o, this.gyroscope, this.previousTimestampS), (r = new V).copy(this.filterToWorldQ), r.multiply(this.resetQ), r.multiply(t), r.multiply(this.worldToScreenQ), this.yawOnly && (r.x = 0, r.z = 0, r.normalize()), this.orientationOut_[0] = r.x, this.orientationOut_[1] = r.y, this.orientationOut_[2] = r.z, this.orientationOut_[3] = r.w, this.orientationOut_ - }, et.prototype.resetPose = function() { - this.resetQ.copy(this.filter.getOrientation()), this.resetQ.x = 0, this.resetQ.y = 0, this.resetQ.z *= -1, this.resetQ.normalize(), m() && this.resetQ.multiply(this.inverseWorldToScreenQ), this.resetQ.multiply(this.originalPoseAdjustQ) - }, et.prototype.onDeviceOrientation_ = function(t) { - this._deviceOrientationQ = this._deviceOrientationQ || new V; - var e = t.alpha, - n = t.beta, - i = t.gamma; - e = (e || 0) * Math.PI / 180, n = (n || 0) * Math.PI / 180, i = (i || 0) * Math.PI / 180, this._deviceOrientationQ.setFromEulerYXZ(n, e, -i) - }, et.prototype.onDeviceMotion_ = function(t) { - this.updateDeviceMotion_(t) - }, et.prototype.updateDeviceMotion_ = function(t) { - var e = t.accelerationIncludingGravity, - n = t.rotationRate, - i = t.timeStamp / 1e3, - r = i - this.previousTimestampS; - return r < 0 ? (S("fusion-pose-sensor:invalid:non-monotonic", "Invalid timestamps detected: non-monotonic timestamp from devicemotion"), void(this.previousTimestampS = i)) : r <= .001 || r > 1 ? (S("fusion-pose-sensor:invalid:outside-threshold", "Invalid timestamps detected: Timestamp from devicemotion outside expected range."), void(this.previousTimestampS = i)) : (this.accelerometer.set(-e.x, -e.y, -e.z), n && (f() ? this.gyroscope.set(-n.beta, n.alpha, n.gamma) : this.gyroscope.set(n.alpha, n.beta, n.gamma), this.isDeviceMotionInRadians || this.gyroscope.multiplyScalar(Math.PI / 180), this.filter.addGyroMeasurement(this.gyroscope, i)), this.filter.addAccelMeasurement(this.accelerometer, i), void(this.previousTimestampS = i)) - }, et.prototype.onOrientationChange_ = function(t) { - this.setScreenTransform_() - }, et.prototype.onMessage_ = function(t) { - var e = t.data; - e && e.type && "devicemotion" === e.type.toLowerCase() && this.updateDeviceMotion_(e.deviceMotionEvent) - }, et.prototype.setScreenTransform_ = function() { - switch (this.worldToScreenQ.set(0, 0, 0, 1), window.orientation) { - case 0: - break; - case 90: - this.worldToScreenQ.setFromAxisAngle(new U(0, 0, 1), -Math.PI / 2); - break; - case -90: - this.worldToScreenQ.setFromAxisAngle(new U(0, 0, 1), Math.PI / 2) - } - this.inverseWorldToScreenQ.copy(this.worldToScreenQ), this.inverseWorldToScreenQ.inverse() - }, et.prototype.start = function() { - var t, e, n; - this.onDeviceMotionCallback_ = this.onDeviceMotion_.bind(this), this.onOrientationChangeCallback_ = this.onOrientationChange_.bind(this), this.onMessageCallback_ = this.onMessage_.bind(this), this.onDeviceOrientationCallback_ = this.onDeviceOrientation_.bind(this), a() && (t = window.self !== window.top, e = E(document.referrer), n = E(window.location.href), t && e !== n) && window.addEventListener("message", this.onMessageCallback_), window.addEventListener("orientationchange", this.onOrientationChangeCallback_), this.isWithoutDeviceMotion ? window.addEventListener("deviceorientation", this.onDeviceOrientationCallback_) : window.addEventListener("devicemotion", this.onDeviceMotionCallback_) - }, et.prototype.stop = function() { - window.removeEventListener("devicemotion", this.onDeviceMotionCallback_), window.removeEventListener("deviceorientation", this.onDeviceOrientationCallback_), window.removeEventListener("orientationchange", this.onOrientationChangeCallback_), window.removeEventListener("message", this.onMessageCallback_) - }; - var nt = new U(1, 0, 0), - it = new U(0, 0, 1), - rt = new V; - rt.setFromAxisAngle(nt, -Math.PI / 2), rt.multiply((new V).setFromAxisAngle(it, Math.PI / 2)); - var ot = function() { - function t(e) { - ! function(t, e) { - if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") - }(this, t), this.config = e, this.sensor = null, this.fusionSensor = null, this._out = new Float32Array(4), this.api = null, this.errors = [], this._sensorQ = new V, this._outQ = new V, this._onSensorRead = this._onSensorRead.bind(this), this._onSensorError = this._onSensorError.bind(this), this.init() - } - return r(t, [{ - key: "init", - value: function() { - var t = null; - try { - (t = new RelativeOrientationSensor({ - frequency: 60, - referenceFrame: "screen" - })).addEventListener("error", this._onSensorError) - } catch (t) { - this.errors.push(t), "SecurityError" === t.name ? (console.error("Cannot construct sensors due to the Feature Policy"), console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'), this.useDeviceMotion()) : "ReferenceError" === t.name ? this.useDeviceMotion() : console.error(t) - } - t && (this.api = "sensor", this.sensor = t, this.sensor.addEventListener("reading", this._onSensorRead), this.sensor.start()) - } - }, { - key: "useDeviceMotion", - value: function() { - this.api = "devicemotion", this.fusionSensor = new et(this.config.K_FILTER, this.config.PREDICTION_TIME_S, this.config.YAW_ONLY, this.config.DEBUG), this.sensor && (this.sensor.removeEventListener("reading", this._onSensorRead), this.sensor.removeEventListener("error", this._onSensorError), this.sensor = null) - } - }, { - key: "getOrientation", - value: function() { - if (this.fusionSensor) return this.fusionSensor.getOrientation(); - if (!this.sensor || !this.sensor.quaternion) return this._out[0] = this._out[1] = this._out[2] = 0, this._out[3] = 1, this._out; - var t = this.sensor.quaternion; - this._sensorQ.set(t[0], t[1], t[2], t[3]); - var e = this._outQ; - return e.copy(rt), e.multiply(this._sensorQ), this.config.YAW_ONLY && (e.x = e.z = 0, e.normalize()), this._out[0] = e.x, this._out[1] = e.y, this._out[2] = e.z, this._out[3] = e.w, this._out - } - }, { - key: "_onSensorError", - value: function(t) { - this.errors.push(t.error), "NotAllowedError" === t.error.name ? console.error("Permission to access sensor was denied") : "NotReadableError" === t.error.name ? console.error("Sensor could not be read") : console.error(t.error), this.useDeviceMotion() - } - }, { - key: "_onSensorRead", - value: function() {} - }]), t - }(); - - function st() { - this.loadIcon_(); - var t = document.createElement("div"); - (o = t.style).position = "fixed", o.top = 0, o.right = 0, o.bottom = 0, o.left = 0, o.backgroundColor = "gray", o.fontFamily = "sans-serif", o.zIndex = 1e6; - var e = document.createElement("img"); - e.src = this.icon, (o = e.style).marginLeft = "25%", o.marginTop = "25%", o.width = "50%", t.appendChild(e); - var n = document.createElement("div"); - (o = n.style).textAlign = "center", o.fontSize = "16px", o.lineHeight = "24px", o.margin = "24px 25%", o.width = "50%", n.innerHTML = "Place your phone into your Cardboard viewer.", t.appendChild(n); - var i = document.createElement("div"); - (o = i.style).backgroundColor = "#CFD8DC", o.position = "fixed", o.bottom = 0, o.width = "100%", o.height = "48px", o.padding = "14px 24px", o.boxSizing = "border-box", o.color = "#656A6B", t.appendChild(i); - var r = document.createElement("div"); - r.style.float = "left", r.innerHTML = "No Cardboard viewer?"; - var o, s = document.createElement("a"); - s.href = "https://www.google.com/get/cardboard/get-cardboard/", s.innerHTML = "get one", s.target = "_blank", (o = s.style).float = "right", o.fontWeight = 600, o.textTransform = "uppercase", o.borderLeft = "1px solid gray", o.paddingLeft = "24px", o.textDecoration = "none", o.color = "#656A6B", i.appendChild(r), i.appendChild(s), this.overlay = t, this.text = n, this.hide() - } - - function at(t) { - try { - this.selectedKey = localStorage.getItem("WEBVR_CARDBOARD_VIEWER") - } catch (t) { - console.error("Failed to load viewer profile: %s", t) - } - this.selectedKey || (this.selectedKey = t || "CardboardV1"), this.dialog = this.createDialog_(q.Viewers), this.root = null, this.onChangeCallbacks_ = [] - } - st.prototype.show = function(t) { - t || this.overlay.parentElement ? t && (this.overlay.parentElement && this.overlay.parentElement != t && this.overlay.parentElement.removeChild(this.overlay), t.appendChild(this.overlay)) : document.body.appendChild(this.overlay), this.overlay.style.display = "block"; - var e = this.overlay.querySelector("img").style; - m() ? (e.width = "20%", e.marginLeft = "40%", e.marginTop = "3%") : (e.width = "50%", e.marginLeft = "25%", e.marginTop = "25%") - }, st.prototype.hide = function() { - this.overlay.style.display = "none" - }, st.prototype.showTemporarily = function(t, e) { - this.show(e), this.timer = setTimeout(this.hide.bind(this), t) - }, st.prototype.disableShowTemporarily = function() { - clearTimeout(this.timer) - }, st.prototype.update = function() { - this.disableShowTemporarily(), !m() && _() ? this.show() : this.hide() - }, st.prototype.loadIcon_ = function() { - this.icon = "data:image/svg+xml," + encodeURIComponent("") - }, at.prototype.show = function(t) { - this.root = t, t.appendChild(this.dialog), this.dialog.querySelector("#" + this.selectedKey).checked = !0, this.dialog.style.display = "block" - }, at.prototype.hide = function() { - this.root && this.root.contains(this.dialog) && this.root.removeChild(this.dialog), this.dialog.style.display = "none" - }, at.prototype.getCurrentViewer = function() { - return q.Viewers[this.selectedKey] - }, at.prototype.getSelectedKey_ = function() { - var t = this.dialog.querySelector("input[name=field]:checked"); - return t ? t.id : null - }, at.prototype.onChange = function(t) { - this.onChangeCallbacks_.push(t) - }, at.prototype.fireOnChange_ = function(t) { - for (var e = 0; e < this.onChangeCallbacks_.length; e++) this.onChangeCallbacks_[e](t) - }, at.prototype.onSave_ = function() { - if (this.selectedKey = this.getSelectedKey_(), this.selectedKey && q.Viewers[this.selectedKey]) { - this.fireOnChange_(q.Viewers[this.selectedKey]); - try { - localStorage.setItem("WEBVR_CARDBOARD_VIEWER", this.selectedKey) - } catch (t) { - console.error("Failed to save viewer profile: %s", t) - } - this.hide() - } else console.error("ViewerSelector.onSave_: this should never happen!") - }, at.prototype.createDialog_ = function(t) { - var e = document.createElement("div"); - e.classList.add("webvr-polyfill-viewer-selector"), e.style.display = "none"; - var n = document.createElement("div"); - (r = n.style).position = "fixed", r.left = 0, r.top = 0, r.width = "100%", r.height = "100%", r.background = "rgba(0, 0, 0, 0.3)", n.addEventListener("click", this.hide.bind(this)); - var i = document.createElement("div"), - r = i.style; - for (var o in r.boxSizing = "border-box", r.position = "fixed", r.top = "24px", r.left = "50%", r.marginLeft = "-140px", r.width = "280px", r.padding = "24px", r.overflow = "hidden", r.background = "#fafafa", r.fontFamily = "'Roboto', sans-serif", r.boxShadow = "0px 5px 20px #666", i.appendChild(this.createH1_("Select your viewer")), t) i.appendChild(this.createChoice_(o, t[o].label)); - return i.appendChild(this.createButton_("Save", this.onSave_.bind(this))), e.appendChild(n), e.appendChild(i), e - }, at.prototype.createH1_ = function(t) { - var e = document.createElement("h1"), - n = e.style; - return n.color = "black", n.fontSize = "20px", n.fontWeight = "bold", n.marginTop = 0, n.marginBottom = "24px", e.innerHTML = t, e - }, at.prototype.createChoice_ = function(t, e) { - var n = document.createElement("div"); - n.style.marginTop = "8px", n.style.color = "black"; - var i = document.createElement("input"); - i.style.fontSize = "30px", i.setAttribute("id", t), i.setAttribute("type", "radio"), i.setAttribute("value", t), i.setAttribute("name", "field"); - var r = document.createElement("label"); - return r.style.marginLeft = "4px", r.setAttribute("for", t), r.innerHTML = e, n.appendChild(i), n.appendChild(r), n - }, at.prototype.createButton_ = function(t, e) { - var n = document.createElement("button"); - n.innerHTML = t; - var i = n.style; - return i.float = "right", i.textTransform = "uppercase", i.color = "#1094f7", i.fontSize = "14px", i.letterSpacing = 0, i.border = 0, i.background = "none", i.marginTop = "16px", n.addEventListener("click", e), n - }, "undefined" != typeof window ? window : void 0 !== e || "undefined" != typeof self && self; - var lt, ct = (lt = function(t, e) { - return t(e = { - exports: {} - }, e.exports), e.exports - }((function(t, e) { - ! function(e, n) { - t.exports = n() - }(0, (function() { - return function(t) { - var e = {}; - - function n(i) { - if (e[i]) return e[i].exports; - var r = e[i] = { - i: i, - l: !1, - exports: {} - }; - return t[i].call(r.exports, r, r.exports, n), r.l = !0, r.exports - } - return n.m = t, n.c = e, n.d = function(t, e, i) { - n.o(t, e) || Object.defineProperty(t, e, { - configurable: !1, - enumerable: !0, - get: i - }) - }, n.n = function(t) { - var e = t && t.__esModule ? function() { - return t.default - } : function() { - return t - }; - return n.d(e, "a", e), e - }, n.o = function(t, e) { - return Object.prototype.hasOwnProperty.call(t, e) - }, n.p = "", n(n.s = 0) - }([function(t, e, n) { - var i = function() { - function t(t, e) { - for (var n = 0; n < e.length; n++) { - var i = e[n]; - i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) - } - } - return function(e, n, i) { - return n && t(e.prototype, n), i && t(e, i), e - } - }(), - r = n(1), - o = "undefined" != typeof navigator && parseFloat(("" + (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ""])[1]).replace("undefined", "3_2").replace("_", ".").replace("_", "")) < 10 && !window.MSStream, - s = function() { - function t() { - ! function(t, e) { - if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") - }(this, t), o ? this.noSleepTimer = null : (this.noSleepVideo = document.createElement("video"), this.noSleepVideo.setAttribute("playsinline", ""), this.noSleepVideo.setAttribute("src", r), this.noSleepVideo.addEventListener("timeupdate", function(t) { - this.noSleepVideo.currentTime > .5 && (this.noSleepVideo.currentTime = Math.random()) - }.bind(this))) - } - return i(t, [{ - key: "enable", - value: function() { - o ? (this.disable(), this.noSleepTimer = window.setInterval((function() { - window.location.href = "/", window.setTimeout(window.stop, 0) - }), 15e3)) : this.noSleepVideo.play() - } - }, { - key: "disable", - value: function() { - o ? this.noSleepTimer && (window.clearInterval(this.noSleepTimer), this.noSleepTimer = null) : this.noSleepVideo.pause() - } - }]), t - }(); - t.exports = s - }, function(t, e, n) { - t.exports = "data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA=" - }]) - })) - }))) && lt.__esModule && Object.prototype.hasOwnProperty.call(lt, "default") ? lt.default : lt, - ht = 1e3, - ut = [0, 0, .5, 1], - dt = [.5, 0, .5, 1], - pt = window.requestAnimationFrame, - ft = window.cancelAnimationFrame; - - function mt(t) { - Object.defineProperties(this, { - hasPosition: { - writable: !1, - enumerable: !0, - value: t.hasPosition - }, - hasExternalDisplay: { - writable: !1, - enumerable: !0, - value: t.hasExternalDisplay - }, - canPresent: { - writable: !1, - enumerable: !0, - value: t.canPresent - }, - maxLayers: { - writable: !1, - enumerable: !0, - value: t.maxLayers - }, - hasOrientation: { - enumerable: !0, - get: function() { - return T("VRDisplayCapabilities.prototype.hasOrientation", "VRDisplay.prototype.getFrameData"), t.hasOrientation - } - } - }) - } - - function gt(t) { - var e = !("wakelock" in (t = t || {})) || t.wakelock; - this.isPolyfilled = !0, this.displayId = ht++, this.displayName = "", this.depthNear = .01, this.depthFar = 1e4, this.isPresenting = !1, Object.defineProperty(this, "isConnected", { - get: function() { - return T("VRDisplay.prototype.isConnected", "VRDisplayCapabilities.prototype.hasExternalDisplay"), !1 - } - }), this.capabilities = new mt({ - hasPosition: !1, - hasOrientation: !1, - hasExternalDisplay: !1, - canPresent: !1, - maxLayers: 1 - }), this.stageParameters = null, this.waitingForPresent_ = !1, this.layer_ = null, this.originalParent_ = null, this.fullscreenElement_ = null, this.fullscreenWrapper_ = null, this.fullscreenElementCachedStyle_ = null, this.fullscreenEventTarget_ = null, this.fullscreenChangeHandler_ = null, this.fullscreenErrorHandler_ = null, e && _() && (this.wakelock_ = new ct) - } - gt.prototype.getFrameData = function(t) { - return M(t, this._getPose(), this) - }, gt.prototype.getPose = function() { - return T("VRDisplay.prototype.getPose", "VRDisplay.prototype.getFrameData"), this._getPose() - }, gt.prototype.resetPose = function() { - return T("VRDisplay.prototype.resetPose"), this._resetPose() - }, gt.prototype.getImmediatePose = function() { - return T("VRDisplay.prototype.getImmediatePose", "VRDisplay.prototype.getFrameData"), this._getPose() - }, gt.prototype.requestAnimationFrame = function(t) { - return pt(t) - }, gt.prototype.cancelAnimationFrame = function(t) { - return ft(t) - }, gt.prototype.wrapForFullscreen = function(t) { - if (a()) return t; - if (!this.fullscreenWrapper_) { - this.fullscreenWrapper_ = document.createElement("div"); - var e = ["height: " + Math.min(screen.height, screen.width) + "px !important", "top: 0 !important", "left: 0 !important", "right: 0 !important", "border: 0", "margin: 0", "padding: 0", "z-index: 999999 !important", "position: fixed"]; - this.fullscreenWrapper_.setAttribute("style", e.join("; ") + ";"), this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper") - } - if (this.fullscreenElement_ == t) return this.fullscreenWrapper_; - if (this.fullscreenElement_ && (this.originalParent_ ? this.originalParent_.appendChild(this.fullscreenElement_) : this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)), this.fullscreenElement_ = t, this.originalParent_ = t.parentElement, this.originalParent_ || document.body.appendChild(t), !this.fullscreenWrapper_.parentElement) { - var n = this.fullscreenElement_.parentElement; - n.insertBefore(this.fullscreenWrapper_, this.fullscreenElement_), n.removeChild(this.fullscreenElement_) - } - this.fullscreenWrapper_.insertBefore(this.fullscreenElement_, this.fullscreenWrapper_.firstChild), this.fullscreenElementCachedStyle_ = this.fullscreenElement_.getAttribute("style"); - var i = this; - return function() { - if (i.fullscreenElement_) { - var t = ["position: absolute", "top: 0", "left: 0", "width: " + Math.max(screen.width, screen.height) + "px", "height: " + Math.min(screen.height, screen.width) + "px", "border: 0", "margin: 0", "padding: 0"]; - i.fullscreenElement_.setAttribute("style", t.join("; ") + ";") - } - }(), this.fullscreenWrapper_ - }, gt.prototype.removeFullscreenWrapper = function() { - if (this.fullscreenElement_) { - var t = this.fullscreenElement_; - this.fullscreenElementCachedStyle_ ? t.setAttribute("style", this.fullscreenElementCachedStyle_) : t.removeAttribute("style"), this.fullscreenElement_ = null, this.fullscreenElementCachedStyle_ = null; - var e = this.fullscreenWrapper_.parentElement; - return this.fullscreenWrapper_.removeChild(t), this.originalParent_ === e ? e.insertBefore(t, this.fullscreenWrapper_) : this.originalParent_ && this.originalParent_.appendChild(t), e.removeChild(this.fullscreenWrapper_), t - } - }, gt.prototype.requestPresent = function(t) { - var e = this.isPresenting, - n = this; - return t instanceof Array || (T("VRDisplay.prototype.requestPresent with non-array argument", "an array of VRLayers as the first argument"), t = [t]), new Promise((function(i, r) { - if (n.capabilities.canPresent) - if (0 == t.length || t.length > n.capabilities.maxLayers) r(new Error("Invalid number of layers.")); - else { - var o = t[0]; - if (o.source) { - var s = o.leftBounds || ut, - c = o.rightBounds || dt; - if (e) { - var h = n.layer_; - h.source !== o.source && (h.source = o.source); - for (var u = 0; u < 4; u++) h.leftBounds[u] = s[u], h.rightBounds[u] = c[u]; - return n.wrapForFullscreen(n.layer_.source), n.updatePresent_(), void i() - } - if (n.layer_ = { - predistorted: o.predistorted, - source: o.source, - leftBounds: s.slice(0), - rightBounds: c.slice(0) - }, n.waitingForPresent_ = !1, n.layer_ && n.layer_.source) { - var d = n.wrapForFullscreen(n.layer_.source); - n.addFullscreenListeners_(d, (function() { - var t = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement; - n.isPresenting = d === t, n.isPresenting ? (screen.orientation && screen.orientation.lock && screen.orientation.lock("landscape-primary").catch((function(t) { - console.error("screen.orientation.lock() failed due to", t.message) - })), n.waitingForPresent_ = !1, n.beginPresent_(), i()) : (screen.orientation && screen.orientation.unlock && screen.orientation.unlock(), n.removeFullscreenWrapper(), n.disableWakeLock(), n.endPresent_(), n.removeFullscreenListeners_()), n.fireVRDisplayPresentChange_() - }), (function() { - n.waitingForPresent_ && (n.removeFullscreenWrapper(), n.removeFullscreenListeners_(), n.disableWakeLock(), n.waitingForPresent_ = !1, n.isPresenting = !1, r(new Error("Unable to present."))) - })), - function(t) { - if (l()) return !1; - if (t.requestFullscreen) t.requestFullscreen(); - else if (t.webkitRequestFullscreen) t.webkitRequestFullscreen(); - else if (t.mozRequestFullScreen) t.mozRequestFullScreen(); - else { - if (!t.msRequestFullscreen) return !1; - t.msRequestFullscreen() - } - return !0 - }(d) ? (n.enableWakeLock(), n.waitingForPresent_ = !0) : (a() || l()) && (n.enableWakeLock(), n.isPresenting = !0, n.beginPresent_(), n.fireVRDisplayPresentChange_(), i()) - } - n.waitingForPresent_ || a() || (y(), r(new Error("Unable to present."))) - } else i() - } - else r(new Error("VRDisplay is not capable of presenting.")) - })) - }, gt.prototype.exitPresent = function() { - var t = this.isPresenting, - e = this; - return this.isPresenting = !1, this.layer_ = null, this.disableWakeLock(), new Promise((function(n, i) { - t ? (!y() && a() && (e.endPresent_(), e.fireVRDisplayPresentChange_()), l() && (e.removeFullscreenWrapper(), e.removeFullscreenListeners_(), e.endPresent_(), e.fireVRDisplayPresentChange_()), n()) : i(new Error("Was not presenting to VRDisplay.")) - })) - }, gt.prototype.getLayers = function() { - return this.layer_ ? [this.layer_] : [] - }, gt.prototype.fireVRDisplayPresentChange_ = function() { - var t = new CustomEvent("vrdisplaypresentchange", { - detail: { - display: this - } - }); - window.dispatchEvent(t) - }, gt.prototype.fireVRDisplayConnect_ = function() { - var t = new CustomEvent("vrdisplayconnect", { - detail: { - display: this - } - }); - window.dispatchEvent(t) - }, gt.prototype.addFullscreenListeners_ = function(t, e, n) { - this.removeFullscreenListeners_(), this.fullscreenEventTarget_ = t, this.fullscreenChangeHandler_ = e, this.fullscreenErrorHandler_ = n, e && (document.fullscreenEnabled ? t.addEventListener("fullscreenchange", e, !1) : document.webkitFullscreenEnabled ? t.addEventListener("webkitfullscreenchange", e, !1) : document.mozFullScreenEnabled ? document.addEventListener("mozfullscreenchange", e, !1) : document.msFullscreenEnabled && t.addEventListener("msfullscreenchange", e, !1)), n && (document.fullscreenEnabled ? t.addEventListener("fullscreenerror", n, !1) : document.webkitFullscreenEnabled ? t.addEventListener("webkitfullscreenerror", n, !1) : document.mozFullScreenEnabled ? document.addEventListener("mozfullscreenerror", n, !1) : document.msFullscreenEnabled && t.addEventListener("msfullscreenerror", n, !1)) - }, gt.prototype.removeFullscreenListeners_ = function() { - if (this.fullscreenEventTarget_) { - var t = this.fullscreenEventTarget_; - if (this.fullscreenChangeHandler_) { - var e = this.fullscreenChangeHandler_; - t.removeEventListener("fullscreenchange", e, !1), t.removeEventListener("webkitfullscreenchange", e, !1), document.removeEventListener("mozfullscreenchange", e, !1), t.removeEventListener("msfullscreenchange", e, !1) - } - if (this.fullscreenErrorHandler_) { - var n = this.fullscreenErrorHandler_; - t.removeEventListener("fullscreenerror", n, !1), t.removeEventListener("webkitfullscreenerror", n, !1), document.removeEventListener("mozfullscreenerror", n, !1), t.removeEventListener("msfullscreenerror", n, !1) - } - this.fullscreenEventTarget_ = null, this.fullscreenChangeHandler_ = null, this.fullscreenErrorHandler_ = null - } - }, gt.prototype.enableWakeLock = function() { - this.wakelock_ && this.wakelock_.enable() - }, gt.prototype.disableWakeLock = function() { - this.wakelock_ && this.wakelock_.disable() - }, gt.prototype.beginPresent_ = function() {}, gt.prototype.endPresent_ = function() {}, gt.prototype.submitFrame = function(t) {}, gt.prototype.getEyeParameters = function(t) { - return null - }; - var vt = { - ADDITIONAL_VIEWERS: [], - DEFAULT_VIEWER: "", - MOBILE_WAKE_LOCK: !0, - DEBUG: !1, - DPDB_URL: "https://dpdb.webvr.rocks/dpdb.json", - K_FILTER: .98, - PREDICTION_TIME_S: .04, - CARDBOARD_UI_DISABLED: !1, - ROTATE_INSTRUCTIONS_DISABLED: !1, - YAW_ONLY: !1, - BUFFER_SCALE: .5, - DIRTY_SUBMIT_FRAME_BINDINGS: !1 - }, - yt = "left", - At = "right"; - - function xt(t) { - var e = b({}, vt); - t = b(e, t || {}), gt.call(this, { - wakelock: t.MOBILE_WAKE_LOCK - }), this.config = t, this.displayName = "Cardboard VRDisplay", this.capabilities = new mt({ - hasPosition: !1, - hasOrientation: !0, - hasExternalDisplay: !1, - canPresent: !0, - maxLayers: 1 - }), this.stageParameters = null, this.bufferScale_ = this.config.BUFFER_SCALE, this.poseSensor_ = new ot(this.config), this.distorter_ = null, this.cardboardUI_ = null, this.dpdb_ = new Z(this.config.DPDB_URL, this.onDeviceParamsUpdated_.bind(this)), this.deviceInfo_ = new q(this.dpdb_.getDeviceParams(), t.ADDITIONAL_VIEWERS), this.viewerSelector_ = new at(t.DEFAULT_VIEWER), this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)), this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()), this.config.ROTATE_INSTRUCTIONS_DISABLED || (this.rotateInstructions_ = new st), a() && window.addEventListener("resize", this.onResize_.bind(this)) - } - return xt.prototype = Object.create(gt.prototype), xt.prototype._getPose = function() { - return { - position: null, - orientation: this.poseSensor_.getOrientation(), - linearVelocity: null, - linearAcceleration: null, - angularVelocity: null, - angularAcceleration: null - } - }, xt.prototype._resetPose = function() { - this.poseSensor_.resetPose && this.poseSensor_.resetPose() - }, xt.prototype._getFieldOfView = function(t) { - var e; - if (t == yt) e = this.deviceInfo_.getFieldOfViewLeftEye(); - else { - if (t != At) return console.error("Invalid eye provided: %s", t), null; - e = this.deviceInfo_.getFieldOfViewRightEye() - } - return e - }, xt.prototype._getEyeOffset = function(t) { - var e; - if (t == yt) e = [.5 * -this.deviceInfo_.viewer.interLensDistance, 0, 0]; - else { - if (t != At) return console.error("Invalid eye provided: %s", t), null; - e = [.5 * this.deviceInfo_.viewer.interLensDistance, 0, 0] - } - return e - }, xt.prototype.getEyeParameters = function(t) { - var e = this._getEyeOffset(t), - n = this._getFieldOfView(t), - i = { - offset: e, - renderWidth: .5 * this.deviceInfo_.device.width * this.bufferScale_, - renderHeight: this.deviceInfo_.device.height * this.bufferScale_ - }; - return Object.defineProperty(i, "fieldOfView", { - enumerable: !0, - get: function() { - return T("VRFieldOfView", "VRFrameData's projection matrices"), n - } - }), i - }, xt.prototype.onDeviceParamsUpdated_ = function(t) { - this.config.DEBUG && console.log("DPDB reported that device params were updated."), this.deviceInfo_.updateDeviceParams(t), this.distorter_ && this.distorter_.updateDeviceInfo(this.deviceInfo_) - }, xt.prototype.updateBounds_ = function() { - this.layer_ && this.distorter_ && (this.layer_.leftBounds || this.layer_.rightBounds) && this.distorter_.setTextureBounds(this.layer_.leftBounds, this.layer_.rightBounds) - }, xt.prototype.beginPresent_ = function() { - var t = this.layer_.source.getContext("webgl"); - t || (t = this.layer_.source.getContext("experimental-webgl")), t || (t = this.layer_.source.getContext("webgl2")), t && (this.layer_.predistorted ? this.config.CARDBOARD_UI_DISABLED || (t.canvas.width = g() * this.bufferScale_, t.canvas.height = v() * this.bufferScale_, this.cardboardUI_ = new N(t)) : (this.config.CARDBOARD_UI_DISABLED || (this.cardboardUI_ = new N(t)), this.distorter_ = new P(t, this.cardboardUI_, this.config.BUFFER_SCALE, this.config.DIRTY_SUBMIT_FRAME_BINDINGS), this.distorter_.updateDeviceInfo(this.deviceInfo_)), this.cardboardUI_ && this.cardboardUI_.listen(function(t) { - this.viewerSelector_.show(this.layer_.source.parentElement), t.stopPropagation(), t.preventDefault() - }.bind(this), function(t) { - this.exitPresent(), t.stopPropagation(), t.preventDefault() - }.bind(this)), this.rotateInstructions_ && (m() && _() ? this.rotateInstructions_.showTemporarily(3e3, this.layer_.source.parentElement) : this.rotateInstructions_.update()), this.orientationHandler = this.onOrientationChange_.bind(this), window.addEventListener("orientationchange", this.orientationHandler), this.vrdisplaypresentchangeHandler = this.updateBounds_.bind(this), window.addEventListener("vrdisplaypresentchange", this.vrdisplaypresentchangeHandler), this.fireVRDisplayDeviceParamsChange_()) - }, xt.prototype.endPresent_ = function() { - this.distorter_ && (this.distorter_.destroy(), this.distorter_ = null), this.cardboardUI_ && (this.cardboardUI_.destroy(), this.cardboardUI_ = null), this.rotateInstructions_ && this.rotateInstructions_.hide(), this.viewerSelector_.hide(), window.removeEventListener("orientationchange", this.orientationHandler), window.removeEventListener("vrdisplaypresentchange", this.vrdisplaypresentchangeHandler) - }, xt.prototype.updatePresent_ = function() { - this.endPresent_(), this.beginPresent_() - }, xt.prototype.submitFrame = function(t) { - if (this.distorter_) this.updateBounds_(), this.distorter_.submitFrame(); - else if (this.cardboardUI_ && this.layer_) { - var e = this.layer_.source.getContext("webgl"); - e || (e = this.layer_.source.getContext("experimental-webgl")), e || (e = this.layer_.source.getContext("webgl2")); - var n = e.canvas; - n.width == this.lastWidth && n.height == this.lastHeight || this.cardboardUI_.onResize(), this.lastWidth = n.width, this.lastHeight = n.height, this.cardboardUI_.render() - } - }, xt.prototype.onOrientationChange_ = function(t) { - this.viewerSelector_.hide(), this.rotateInstructions_ && this.rotateInstructions_.update(), this.onResize_() - }, xt.prototype.onResize_ = function(t) { - if (this.layer_) { - var e = this.layer_.source.getContext("webgl"); - e || (e = this.layer_.source.getContext("experimental-webgl")), e || (e = this.layer_.source.getContext("webgl2")), e.canvas.setAttribute("style", ["position: absolute", "top: 0", "left: 0", "width: 100vw", "height: 100vh", "border: 0", "margin: 0", "padding: 0px", "box-sizing: content-box"].join("; ") + ";"), w(e.canvas) - } - }, xt.prototype.onViewerChanged_ = function(t) { - this.deviceInfo_.setViewer(t), this.distorter_ && this.distorter_.updateDeviceInfo(this.deviceInfo_), this.fireVRDisplayDeviceParamsChange_() - }, xt.prototype.fireVRDisplayDeviceParamsChange_ = function() { - var t = new CustomEvent("vrdisplaydeviceparamschange", { - detail: { - vrdisplay: this, - deviceInfo: this.deviceInfo_ - } - }); - window.dispatchEvent(t) - }, xt.VRFrameData = function() { - this.leftProjectionMatrix = new Float32Array(16), this.leftViewMatrix = new Float32Array(16), this.rightProjectionMatrix = new Float32Array(16), this.rightViewMatrix = new Float32Array(16), this.pose = null - }, xt.VRDisplay = gt, xt - }() - }))) && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t, - a = { - ADDITIONAL_VIEWERS: [], - DEFAULT_VIEWER: "", - PROVIDE_MOBILE_VRDISPLAY: !0, - MOBILE_WAKE_LOCK: !0, - DEBUG: !1, - DPDB_URL: "https://dpdb.webvr.rocks/dpdb.json", - K_FILTER: .98, - PREDICTION_TIME_S: .04, - CARDBOARD_UI_DISABLED: !1, - ROTATE_INSTRUCTIONS_DISABLED: !1, - YAW_ONLY: !1, - BUFFER_SCALE: .5, - DIRTY_SUBMIT_FRAME_BINDINGS: !1 - }; - - function l(t) { - this.config = o(o({}, a), t), this.polyfillDisplays = [], this.enabled = !1, this.hasNative = "getVRDisplays" in navigator, this.native = {}, this.native.getVRDisplays = navigator.getVRDisplays, this.native.VRFrameData = window.VRFrameData, this.native.VRDisplay = window.VRDisplay, (!this.hasNative || this.config.PROVIDE_MOBILE_VRDISPLAY && n()) && (this.enable(), this.getVRDisplays().then((function(t) { - t && t[0] && t[0].fireVRDisplayConnect_ && t[0].fireVRDisplayConnect_() - }))) - } - l.prototype.getPolyfillDisplays = function() { - if (this._polyfillDisplaysPopulated) return this.polyfillDisplays; - if (n()) { - var t = new s({ - ADDITIONAL_VIEWERS: this.config.ADDITIONAL_VIEWERS, - DEFAULT_VIEWER: this.config.DEFAULT_VIEWER, - MOBILE_WAKE_LOCK: this.config.MOBILE_WAKE_LOCK, - DEBUG: this.config.DEBUG, - DPDB_URL: this.config.DPDB_URL, - CARDBOARD_UI_DISABLED: this.config.CARDBOARD_UI_DISABLED, - K_FILTER: this.config.K_FILTER, - PREDICTION_TIME_S: this.config.PREDICTION_TIME_S, - ROTATE_INSTRUCTIONS_DISABLED: this.config.ROTATE_INSTRUCTIONS_DISABLED, - YAW_ONLY: this.config.YAW_ONLY, - BUFFER_SCALE: this.config.BUFFER_SCALE, - DIRTY_SUBMIT_FRAME_BINDINGS: this.config.DIRTY_SUBMIT_FRAME_BINDINGS - }); - this.polyfillDisplays.push(t) - } - return this._polyfillDisplaysPopulated = !0, this.polyfillDisplays - }, l.prototype.enable = function() { - if (this.enabled = !0, this.hasNative && this.native.VRFrameData) { - var t = this.native.VRFrameData, - e = new this.native.VRFrameData, - n = this.native.VRDisplay.prototype.getFrameData; - window.VRDisplay.prototype.getFrameData = function(i) { - i instanceof t ? n.call(this, i) : (n.call(this, e), i.pose = e.pose, r(e.leftProjectionMatrix, i.leftProjectionMatrix), r(e.rightProjectionMatrix, i.rightProjectionMatrix), r(e.leftViewMatrix, i.leftViewMatrix), r(e.rightViewMatrix, i.rightViewMatrix)) - } - } - navigator.getVRDisplays = this.getVRDisplays.bind(this), window.VRDisplay = s.VRDisplay, window.VRFrameData = s.VRFrameData - }, l.prototype.getVRDisplays = function() { - var t = this; - return this.config, this.hasNative ? this.native.getVRDisplays.call(navigator).then((function(e) { - return e.length > 0 ? e : t.getPolyfillDisplays() - })) : Promise.resolve(this.getPolyfillDisplays()) - }, l.version = "0.10.12", l.VRFrameData = s.VRFrameData, l.VRDisplay = s.VRDisplay; - var c = Object.freeze({ - default: l - }), - h = c && l || c; - return void 0 !== e && e.window && (e.document || (e.document = e.window.document), e.navigator || (e.navigator = e.window.navigator)), h - }() - }))); - const h = 0, - u = 1, - d = 2; - - function p() {} - Object.assign(p.prototype, { - addEventListener: function(t, e) { - void 0 === this._listeners && (this._listeners = {}); - const n = this._listeners; - void 0 === n[t] && (n[t] = []), -1 === n[t].indexOf(e) && n[t].push(e) - }, - hasEventListener: function(t, e) { - if (void 0 === this._listeners) return !1; - const n = this._listeners; - return void 0 !== n[t] && -1 !== n[t].indexOf(e) - }, - removeEventListener: function(t, e) { - if (void 0 === this._listeners) return; - const n = this._listeners[t]; - if (void 0 !== n) { - const t = n.indexOf(e); - 1 !== t && n.splice(t, 1) - } - }, - dispatchEvent: function(t) { - if (void 0 === this._listeners) return; - const e = this._listeners[t.type]; - if (void 0 !== e) { - t.target = this; - const n = e.slice(0); - for (let e = 0, i = n.length; e < i; e++) n[e].call(this, t) - } - } - }); - const f = []; - for (let t = 0; t < 256; t++) f[t] = (t < 16 ? "0" : "") + t.toString(16); - let m = 1234567; - const g = { - DEG2RAD: Math.PI / 180, - RAD2DEG: 180 / Math.PI, - generateUUID: function() { - const t = 4294967295 * Math.random() | 0, - e = 4294967295 * Math.random() | 0, - n = 4294967295 * Math.random() | 0, - i = 4294967295 * Math.random() | 0; - return (f[255 & t] + f[t >> 8 & 255] + f[t >> 16 & 255] + f[t >> 24 & 255] + "-" + f[255 & e] + f[e >> 8 & 255] + "-" + f[e >> 16 & 15 | 64] + f[e >> 24 & 255] + "-" + f[63 & n | 128] + f[n >> 8 & 255] + "-" + f[n >> 16 & 255] + f[n >> 24 & 255] + f[255 & i] + f[i >> 8 & 255] + f[i >> 16 & 255] + f[i >> 24 & 255]).toUpperCase() - }, - clamp: function(t, e, n) { - return Math.max(e, Math.min(n, t)) - }, - euclideanModulo: function(t, e) { - return (t % e + e) % e - }, - mapLinear: function(t, e, n, i, r) { - return i + (t - e) * (r - i) / (n - e) - }, - lerp: function(t, e, n) { - return (1 - n) * t + n * e - }, - damp: function(t, e, n, i) { - return g.lerp(t, e, 1 - Math.exp(-n * i)) - }, - pingpong: function(t, e = 1) { - return e - Math.abs(g.euclideanModulo(t, 2 * e) - e) - }, - smoothstep: function(t, e, n) { - return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * (3 - 2 * t) - }, - smootherstep: function(t, e, n) { - return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * t * (t * (6 * t - 15) + 10) - }, - randInt: function(t, e) { - return t + Math.floor(Math.random() * (e - t + 1)) - }, - randFloat: function(t, e) { - return t + Math.random() * (e - t) - }, - randFloatSpread: function(t) { - return t * (.5 - Math.random()) - }, - seededRandom: function(t) { - return void 0 !== t && (m = t % 2147483647), m = 16807 * m % 2147483647, (m - 1) / 2147483646 - }, - degToRad: function(t) { - return t * g.DEG2RAD - }, - radToDeg: function(t) { - return t * g.RAD2DEG - }, - isPowerOfTwo: function(t) { - return 0 == (t & t - 1) && 0 !== t - }, - ceilPowerOfTwo: function(t) { - return Math.pow(2, Math.ceil(Math.log(t) / Math.LN2)) - }, - floorPowerOfTwo: function(t) { - return Math.pow(2, Math.floor(Math.log(t) / Math.LN2)) - }, - setQuaternionFromProperEuler: function(t, e, n, i, r) { - const o = Math.cos, - s = Math.sin, - a = o(n / 2), - l = s(n / 2), - c = o((e + i) / 2), - h = s((e + i) / 2), - u = o((e - i) / 2), - d = s((e - i) / 2), - p = o((i - e) / 2), - f = s((i - e) / 2); - switch (r) { - case "XYX": - t.set(a * h, l * u, l * d, a * c); - break; - case "YZY": - t.set(l * d, a * h, l * u, a * c); - break; - case "ZXZ": - t.set(l * u, l * d, a * h, a * c); - break; - case "XZX": - t.set(a * h, l * f, l * p, a * c); - break; - case "YXY": - t.set(l * p, a * h, l * f, a * c); - break; - case "ZYZ": - t.set(l * f, l * p, a * h, a * c); - break; - default: - console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + r) - } - } - }; - class v { - constructor(t = 0, e = 0) { - Object.defineProperty(this, "isVector2", { - value: !0 - }), this.x = t, this.y = e - } - get width() { - return this.x - } - set width(t) { - this.x = t - } - get height() { - return this.y - } - set height(t) { - this.y = t - } - set(t, e) { - return this.x = t, this.y = e, this - } - setScalar(t) { - return this.x = t, this.y = t, this - } - setX(t) { - return this.x = t, this - } - setY(t) { - return this.y = t, this - } - setComponent(t, e) { - switch (t) { - case 0: - this.x = e; - break; - case 1: - this.y = e; - break; - default: - throw new Error("index is out of range: " + t) - } - return this - } - getComponent(t) { - switch (t) { - case 0: - return this.x; - case 1: - return this.y; - default: - throw new Error("index is out of range: " + t) - } - } - clone() { - return new this.constructor(this.x, this.y) - } - copy(t) { - return this.x = t.x, this.y = t.y, this - } - add(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this) - } - addScalar(t) { - return this.x += t, this.y += t, this - } - addVectors(t, e) { - return this.x = t.x + e.x, this.y = t.y + e.y, this - } - addScaledVector(t, e) { - return this.x += t.x * e, this.y += t.y * e, this - } - sub(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this) - } - subScalar(t) { - return this.x -= t, this.y -= t, this - } - subVectors(t, e) { - return this.x = t.x - e.x, this.y = t.y - e.y, this - } - multiply(t) { - return this.x *= t.x, this.y *= t.y, this - } - multiplyScalar(t) { - return this.x *= t, this.y *= t, this - } - divide(t) { - return this.x /= t.x, this.y /= t.y, this - } - divideScalar(t) { - return this.multiplyScalar(1 / t) - } - applyMatrix3(t) { - const e = this.x, - n = this.y, - i = t.elements; - return this.x = i[0] * e + i[3] * n + i[6], this.y = i[1] * e + i[4] * n + i[7], this - } - min(t) { - return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this - } - max(t) { - return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this - } - clamp(t, e) { - return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this - } - clampScalar(t, e) { - return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this - } - clampLength(t, e) { - const n = this.length(); - return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) - } - floor() { - return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this - } - ceil() { - return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this - } - round() { - return this.x = Math.round(this.x), this.y = Math.round(this.y), this - } - roundToZero() { - return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this - } - negate() { - return this.x = -this.x, this.y = -this.y, this - } - dot(t) { - return this.x * t.x + this.y * t.y - } - cross(t) { - return this.x * t.y - this.y * t.x - } - lengthSq() { - return this.x * this.x + this.y * this.y - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y) - } - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) - } - normalize() { - return this.divideScalar(this.length() || 1) - } - angle() { - return Math.atan2(-this.y, -this.x) + Math.PI - } - distanceTo(t) { - return Math.sqrt(this.distanceToSquared(t)) - } - distanceToSquared(t) { - const e = this.x - t.x, - n = this.y - t.y; - return e * e + n * n - } - manhattanDistanceTo(t) { - return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) - } - setLength(t) { - return this.normalize().multiplyScalar(t) - } - lerp(t, e) { - return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this - } - lerpVectors(t, e, n) { - return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this - } - equals(t) { - return t.x === this.x && t.y === this.y - } - fromArray(t, e = 0) { - return this.x = t[e], this.y = t[e + 1], this - } - toArray(t = [], e = 0) { - return t[e] = this.x, t[e + 1] = this.y, t - } - fromBufferAttribute(t, e, n) { - return void 0 !== n && console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this - } - rotateAround(t, e) { - const n = Math.cos(e), - i = Math.sin(e), - r = this.x - t.x, - o = this.y - t.y; - return this.x = r * n - o * i + t.x, this.y = r * i + o * n + t.y, this - } - random() { - return this.x = Math.random(), this.y = Math.random(), this - } - } - class y { - constructor() { - Object.defineProperty(this, "isMatrix3", { - value: !0 - }), this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], arguments.length > 0 && console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.") - } - set(t, e, n, i, r, o, s, a, l) { - const c = this.elements; - return c[0] = t, c[1] = i, c[2] = s, c[3] = e, c[4] = r, c[5] = a, c[6] = n, c[7] = o, c[8] = l, this - } - identity() { - return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this - } - clone() { - return (new this.constructor).fromArray(this.elements) - } - copy(t) { - const e = this.elements, - n = t.elements; - return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], this - } - extractBasis(t, e, n) { - return t.setFromMatrix3Column(this, 0), e.setFromMatrix3Column(this, 1), n.setFromMatrix3Column(this, 2), this - } - setFromMatrix4(t) { - const e = t.elements; - return this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), this - } - multiply(t) { - return this.multiplyMatrices(this, t) - } - premultiply(t) { - return this.multiplyMatrices(t, this) - } - multiplyMatrices(t, e) { - const n = t.elements, - i = e.elements, - r = this.elements, - o = n[0], - s = n[3], - a = n[6], - l = n[1], - c = n[4], - h = n[7], - u = n[2], - d = n[5], - p = n[8], - f = i[0], - m = i[3], - g = i[6], - v = i[1], - y = i[4], - A = i[7], - x = i[2], - _ = i[5], - b = i[8]; - return r[0] = o * f + s * v + a * x, r[3] = o * m + s * y + a * _, r[6] = o * g + s * A + a * b, r[1] = l * f + c * v + h * x, r[4] = l * m + c * y + h * _, r[7] = l * g + c * A + h * b, r[2] = u * f + d * v + p * x, r[5] = u * m + d * y + p * _, r[8] = u * g + d * A + p * b, this - } - multiplyScalar(t) { - const e = this.elements; - return e[0] *= t, e[3] *= t, e[6] *= t, e[1] *= t, e[4] *= t, e[7] *= t, e[2] *= t, e[5] *= t, e[8] *= t, this - } - determinant() { - const t = this.elements, - e = t[0], - n = t[1], - i = t[2], - r = t[3], - o = t[4], - s = t[5], - a = t[6], - l = t[7], - c = t[8]; - return e * o * c - e * s * l - n * r * c + n * s * a + i * r * l - i * o * a - } - invert() { - const t = this.elements, - e = t[0], - n = t[1], - i = t[2], - r = t[3], - o = t[4], - s = t[5], - a = t[6], - l = t[7], - c = t[8], - h = c * o - s * l, - u = s * a - c * r, - d = l * r - o * a, - p = e * h + n * u + i * d; - if (0 === p) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); - const f = 1 / p; - return t[0] = h * f, t[1] = (i * l - c * n) * f, t[2] = (s * n - i * o) * f, t[3] = u * f, t[4] = (c * e - i * a) * f, t[5] = (i * r - s * e) * f, t[6] = d * f, t[7] = (n * a - l * e) * f, t[8] = (o * e - n * r) * f, this - } - transpose() { - let t; - const e = this.elements; - return t = e[1], e[1] = e[3], e[3] = t, t = e[2], e[2] = e[6], e[6] = t, t = e[5], e[5] = e[7], e[7] = t, this - } - getNormalMatrix(t) { - return this.setFromMatrix4(t).copy(this).invert().transpose() - } - transposeIntoArray(t) { - const e = this.elements; - return t[0] = e[0], t[1] = e[3], t[2] = e[6], t[3] = e[1], t[4] = e[4], t[5] = e[7], t[6] = e[2], t[7] = e[5], t[8] = e[8], this - } - setUvTransform(t, e, n, i, r, o, s) { - const a = Math.cos(r), - l = Math.sin(r); - return this.set(n * a, n * l, -n * (a * o + l * s) + o + t, -i * l, i * a, -i * (-l * o + a * s) + s + e, 0, 0, 1), this - } - scale(t, e) { - const n = this.elements; - return n[0] *= t, n[3] *= t, n[6] *= t, n[1] *= e, n[4] *= e, n[7] *= e, this - } - rotate(t) { - const e = Math.cos(t), - n = Math.sin(t), - i = this.elements, - r = i[0], - o = i[3], - s = i[6], - a = i[1], - l = i[4], - c = i[7]; - return i[0] = e * r + n * a, i[3] = e * o + n * l, i[6] = e * s + n * c, i[1] = -n * r + e * a, i[4] = -n * o + e * l, i[7] = -n * s + e * c, this - } - translate(t, e) { - const n = this.elements; - return n[0] += t * n[2], n[3] += t * n[5], n[6] += t * n[8], n[1] += e * n[2], n[4] += e * n[5], n[7] += e * n[8], this - } - equals(t) { - const e = this.elements, - n = t.elements; - for (let t = 0; t < 9; t++) - if (e[t] !== n[t]) return !1; - return !0 - } - fromArray(t, e = 0) { - for (let n = 0; n < 9; n++) this.elements[n] = t[n + e]; - return this - } - toArray(t = [], e = 0) { - const n = this.elements; - return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t - } - } - let A; - const x = { - getDataURL: function(t) { - if (/^data:/i.test(t.src)) return t.src; - if ("undefined" == typeof HTMLCanvasElement) return t.src; - let e; - if (t instanceof HTMLCanvasElement) e = t; - else { - void 0 === A && (A = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas")), A.width = t.width, A.height = t.height; - const n = A.getContext("2d"); - t instanceof ImageData ? n.putImageData(t, 0, 0) : n.drawImage(t, 0, 0, t.width, t.height), e = A - } - return e.width > 2048 || e.height > 2048 ? e.toDataURL("image/jpeg", .6) : e.toDataURL("image/png") - } - }; - let _ = 0; - - function b(t = b.DEFAULT_IMAGE, e = b.DEFAULT_MAPPING, n = 1001, i = 1001, r = 1006, o = 1008, s = 1023, a = 1009, l = 1, c = 3e3) { - Object.defineProperty(this, "id", { - value: _++ - }), this.uuid = g.generateUUID(), this.name = "", this.image = t, this.mipmaps = [], this.mapping = e, this.wrapS = n, this.wrapT = i, this.magFilter = r, this.minFilter = o, this.anisotropy = l, this.format = s, this.internalFormat = null, this.type = a, this.offset = new v(0, 0), this.repeat = new v(1, 1), this.center = new v(0, 0), this.rotation = 0, this.matrixAutoUpdate = !0, this.matrix = new y, this.generateMipmaps = !0, this.premultiplyAlpha = !1, this.flipY = !0, this.unpackAlignment = 4, this.encoding = c, this.version = 0, this.onUpdate = null - } - - function w(t) { - return "undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap ? x.getDataURL(t) : t.data ? { - data: Array.prototype.slice.call(t.data), - width: t.width, - height: t.height, - type: t.data.constructor.name - } : (console.warn("THREE.Texture: Unable to serialize Texture."), {}) - } - b.DEFAULT_IMAGE = void 0, b.DEFAULT_MAPPING = 300, b.prototype = Object.assign(Object.create(p.prototype), { - constructor: b, - isTexture: !0, - updateMatrix: function() { - this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y) - }, - clone: function() { - return (new this.constructor).copy(this) - }, - copy: function(t) { - return this.name = t.name, this.image = t.image, this.mipmaps = t.mipmaps.slice(0), this.mapping = t.mapping, this.wrapS = t.wrapS, this.wrapT = t.wrapT, this.magFilter = t.magFilter, this.minFilter = t.minFilter, this.anisotropy = t.anisotropy, this.format = t.format, this.internalFormat = t.internalFormat, this.type = t.type, this.offset.copy(t.offset), this.repeat.copy(t.repeat), this.center.copy(t.center), this.rotation = t.rotation, this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrix.copy(t.matrix), this.generateMipmaps = t.generateMipmaps, this.premultiplyAlpha = t.premultiplyAlpha, this.flipY = t.flipY, this.unpackAlignment = t.unpackAlignment, this.encoding = t.encoding, this - }, - toJSON: function(t) { - const e = void 0 === t || "string" == typeof t; - if (!e && void 0 !== t.textures[this.uuid]) return t.textures[this.uuid]; - const n = { - metadata: { - version: 4.5, - type: "Texture", - generator: "Texture.toJSON" - }, - uuid: this.uuid, - name: this.name, - mapping: this.mapping, - repeat: [this.repeat.x, this.repeat.y], - offset: [this.offset.x, this.offset.y], - center: [this.center.x, this.center.y], - rotation: this.rotation, - wrap: [this.wrapS, this.wrapT], - format: this.format, - type: this.type, - encoding: this.encoding, - minFilter: this.minFilter, - magFilter: this.magFilter, - anisotropy: this.anisotropy, - flipY: this.flipY, - premultiplyAlpha: this.premultiplyAlpha, - unpackAlignment: this.unpackAlignment - }; - if (void 0 !== this.image) { - const i = this.image; - if (void 0 === i.uuid && (i.uuid = g.generateUUID()), !e && void 0 === t.images[i.uuid]) { - let e; - if (Array.isArray(i)) { - e = []; - for (let t = 0, n = i.length; t < n; t++) i[t].isDataTexture ? e.push(w(i[t].image)) : e.push(w(i[t])) - } else e = w(i); - t.images[i.uuid] = { - uuid: i.uuid, - url: e - } - } - n.image = i.uuid - } - return e || (t.textures[this.uuid] = n), n - }, - dispose: function() { - this.dispatchEvent({ - type: "dispose" - }) - }, - transformUv: function(t) { - if (300 !== this.mapping) return t; - if (t.applyMatrix3(this.matrix), t.x < 0 || t.x > 1) switch (this.wrapS) { - case 1e3: - t.x = t.x - Math.floor(t.x); - break; - case 1001: - t.x = t.x < 0 ? 0 : 1; - break; - case 1002: - 1 === Math.abs(Math.floor(t.x) % 2) ? t.x = Math.ceil(t.x) - t.x : t.x = t.x - Math.floor(t.x) - } - if (t.y < 0 || t.y > 1) switch (this.wrapT) { - case 1e3: - t.y = t.y - Math.floor(t.y); - break; - case 1001: - t.y = t.y < 0 ? 0 : 1; - break; - case 1002: - 1 === Math.abs(Math.floor(t.y) % 2) ? t.y = Math.ceil(t.y) - t.y : t.y = t.y - Math.floor(t.y) - } - return this.flipY && (t.y = 1 - t.y), t - } - }), Object.defineProperty(b.prototype, "needsUpdate", { - set: function(t) { - !0 === t && this.version++ - } - }); - class M { - constructor(t = 0, e = 0, n = 0, i = 1) { - Object.defineProperty(this, "isVector4", { - value: !0 - }), this.x = t, this.y = e, this.z = n, this.w = i - } - get width() { - return this.z - } - set width(t) { - this.z = t - } - get height() { - return this.w - } - set height(t) { - this.w = t - } - set(t, e, n, i) { - return this.x = t, this.y = e, this.z = n, this.w = i, this - } - setScalar(t) { - return this.x = t, this.y = t, this.z = t, this.w = t, this - } - setX(t) { - return this.x = t, this - } - setY(t) { - return this.y = t, this - } - setZ(t) { - return this.z = t, this - } - setW(t) { - return this.w = t, this - } - setComponent(t, e) { - switch (t) { - case 0: - this.x = e; - break; - case 1: - this.y = e; - break; - case 2: - this.z = e; - break; - case 3: - this.w = e; - break; - default: - throw new Error("index is out of range: " + t) - } - return this - } - getComponent(t) { - switch (t) { - case 0: - return this.x; - case 1: - return this.y; - case 2: - return this.z; - case 3: - return this.w; - default: - throw new Error("index is out of range: " + t) - } - } - clone() { - return new this.constructor(this.x, this.y, this.z, this.w) - } - copy(t) { - return this.x = t.x, this.y = t.y, this.z = t.z, this.w = void 0 !== t.w ? t.w : 1, this - } - add(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this.w += t.w, this) - } - addScalar(t) { - return this.x += t, this.y += t, this.z += t, this.w += t, this - } - addVectors(t, e) { - return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this.w = t.w + e.w, this - } - addScaledVector(t, e) { - return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this.w += t.w * e, this - } - sub(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this.w -= t.w, this) - } - subScalar(t) { - return this.x -= t, this.y -= t, this.z -= t, this.w -= t, this - } - subVectors(t, e) { - return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this.w = t.w - e.w, this - } - multiply(t) { - return this.x *= t.x, this.y *= t.y, this.z *= t.z, this.w *= t.w, this - } - multiplyScalar(t) { - return this.x *= t, this.y *= t, this.z *= t, this.w *= t, this - } - applyMatrix4(t) { - const e = this.x, - n = this.y, - i = this.z, - r = this.w, - o = t.elements; - return this.x = o[0] * e + o[4] * n + o[8] * i + o[12] * r, this.y = o[1] * e + o[5] * n + o[9] * i + o[13] * r, this.z = o[2] * e + o[6] * n + o[10] * i + o[14] * r, this.w = o[3] * e + o[7] * n + o[11] * i + o[15] * r, this - } - divideScalar(t) { - return this.multiplyScalar(1 / t) - } - setAxisAngleFromQuaternion(t) { - this.w = 2 * Math.acos(t.w); - const e = Math.sqrt(1 - t.w * t.w); - return e < 1e-4 ? (this.x = 1, this.y = 0, this.z = 0) : (this.x = t.x / e, this.y = t.y / e, this.z = t.z / e), this - } - setAxisAngleFromRotationMatrix(t) { - let e, n, i, r; - const o = t.elements, - s = o[0], - a = o[4], - l = o[8], - c = o[1], - h = o[5], - u = o[9], - d = o[2], - p = o[6], - f = o[10]; - if (Math.abs(a - c) < .01 && Math.abs(l - d) < .01 && Math.abs(u - p) < .01) { - if (Math.abs(a + c) < .1 && Math.abs(l + d) < .1 && Math.abs(u + p) < .1 && Math.abs(s + h + f - 3) < .1) return this.set(1, 0, 0, 0), this; - e = Math.PI; - const t = (s + 1) / 2, - o = (h + 1) / 2, - m = (f + 1) / 2, - g = (a + c) / 4, - v = (l + d) / 4, - y = (u + p) / 4; - return t > o && t > m ? t < .01 ? (n = 0, i = .707106781, r = .707106781) : (n = Math.sqrt(t), i = g / n, r = v / n) : o > m ? o < .01 ? (n = .707106781, i = 0, r = .707106781) : (i = Math.sqrt(o), n = g / i, r = y / i) : m < .01 ? (n = .707106781, i = .707106781, r = 0) : (r = Math.sqrt(m), n = v / r, i = y / r), this.set(n, i, r, e), this - } - let m = Math.sqrt((p - u) * (p - u) + (l - d) * (l - d) + (c - a) * (c - a)); - return Math.abs(m) < .001 && (m = 1), this.x = (p - u) / m, this.y = (l - d) / m, this.z = (c - a) / m, this.w = Math.acos((s + h + f - 1) / 2), this - } - min(t) { - return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this.w = Math.min(this.w, t.w), this - } - max(t) { - return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this.w = Math.max(this.w, t.w), this - } - clamp(t, e) { - return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this.w = Math.max(t.w, Math.min(e.w, this.w)), this - } - clampScalar(t, e) { - return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this.w = Math.max(t, Math.min(e, this.w)), this - } - clampLength(t, e) { - const n = this.length(); - return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) - } - floor() { - return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this.w = Math.floor(this.w), this - } - ceil() { - return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this.w = Math.ceil(this.w), this - } - round() { - return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this.w = Math.round(this.w), this - } - roundToZero() { - return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w), this - } - negate() { - return this.x = -this.x, this.y = -this.y, this.z = -this.z, this.w = -this.w, this - } - dot(t) { - return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w - } - lengthSq() { - return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) - } - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) - } - normalize() { - return this.divideScalar(this.length() || 1) - } - setLength(t) { - return this.normalize().multiplyScalar(t) - } - lerp(t, e) { - return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this.w += (t.w - this.w) * e, this - } - lerpVectors(t, e, n) { - return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this.z = t.z + (e.z - t.z) * n, this.w = t.w + (e.w - t.w) * n, this - } - equals(t) { - return t.x === this.x && t.y === this.y && t.z === this.z && t.w === this.w - } - fromArray(t, e = 0) { - return this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this.w = t[e + 3], this - } - toArray(t = [], e = 0) { - return t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t[e + 3] = this.w, t - } - fromBufferAttribute(t, e, n) { - return void 0 !== n && console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this.w = t.getW(e), this - } - random() { - return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this.w = Math.random(), this - } - } - class E extends p { - constructor(t, e, n) { - super(), Object.defineProperty(this, "isWebGLRenderTarget", { - value: !0 - }), this.width = t, this.height = e, this.scissor = new M(0, 0, t, e), this.scissorTest = !1, this.viewport = new M(0, 0, t, e), n = n || {}, this.texture = new b(void 0, n.mapping, n.wrapS, n.wrapT, n.magFilter, n.minFilter, n.format, n.type, n.anisotropy, n.encoding), this.texture.image = {}, this.texture.image.width = t, this.texture.image.height = e, this.texture.generateMipmaps = void 0 !== n.generateMipmaps && n.generateMipmaps, this.texture.minFilter = void 0 !== n.minFilter ? n.minFilter : 1006, this.depthBuffer = void 0 === n.depthBuffer || n.depthBuffer, this.stencilBuffer = void 0 !== n.stencilBuffer && n.stencilBuffer, this.depthTexture = void 0 !== n.depthTexture ? n.depthTexture : null - } - setSize(t, e) { - this.width === t && this.height === e || (this.width = t, this.height = e, this.texture.image.width = t, this.texture.image.height = e, this.dispose()), this.viewport.set(0, 0, t, e), this.scissor.set(0, 0, t, e) - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.width = t.width, this.height = t.height, this.viewport.copy(t.viewport), this.texture = t.texture.clone(), this.depthBuffer = t.depthBuffer, this.stencilBuffer = t.stencilBuffer, this.depthTexture = t.depthTexture, this - } - dispose() { - this.dispatchEvent({ - type: "dispose" - }) - } - } - class S { - constructor(t = 0, e = 0, n = 0, i = 1) { - Object.defineProperty(this, "isQuaternion", { - value: !0 - }), this._x = t, this._y = e, this._z = n, this._w = i - } - static slerp(t, e, n, i) { - return n.copy(t).slerp(e, i) - } - static slerpFlat(t, e, n, i, r, o, s) { - let a = n[i + 0], - l = n[i + 1], - c = n[i + 2], - h = n[i + 3]; - const u = r[o + 0], - d = r[o + 1], - p = r[o + 2], - f = r[o + 3]; - if (h !== f || a !== u || l !== d || c !== p) { - let t = 1 - s; - const e = a * u + l * d + c * p + h * f, - n = e >= 0 ? 1 : -1, - i = 1 - e * e; - if (i > Number.EPSILON) { - const r = Math.sqrt(i), - o = Math.atan2(r, e * n); - t = Math.sin(t * o) / r, s = Math.sin(s * o) / r - } - const r = s * n; - if (a = a * t + u * r, l = l * t + d * r, c = c * t + p * r, h = h * t + f * r, t === 1 - s) { - const t = 1 / Math.sqrt(a * a + l * l + c * c + h * h); - a *= t, l *= t, c *= t, h *= t - } - } - t[e] = a, t[e + 1] = l, t[e + 2] = c, t[e + 3] = h - } - static multiplyQuaternionsFlat(t, e, n, i, r, o) { - const s = n[i], - a = n[i + 1], - l = n[i + 2], - c = n[i + 3], - h = r[o], - u = r[o + 1], - d = r[o + 2], - p = r[o + 3]; - return t[e] = s * p + c * h + a * d - l * u, t[e + 1] = a * p + c * u + l * h - s * d, t[e + 2] = l * p + c * d + s * u - a * h, t[e + 3] = c * p - s * h - a * u - l * d, t - } - get x() { - return this._x - } - set x(t) { - this._x = t, this._onChangeCallback() - } - get y() { - return this._y - } - set y(t) { - this._y = t, this._onChangeCallback() - } - get z() { - return this._z - } - set z(t) { - this._z = t, this._onChangeCallback() - } - get w() { - return this._w - } - set w(t) { - this._w = t, this._onChangeCallback() - } - set(t, e, n, i) { - return this._x = t, this._y = e, this._z = n, this._w = i, this._onChangeCallback(), this - } - clone() { - return new this.constructor(this._x, this._y, this._z, this._w) - } - copy(t) { - return this._x = t.x, this._y = t.y, this._z = t.z, this._w = t.w, this._onChangeCallback(), this - } - setFromEuler(t, e) { - if (!t || !t.isEuler) throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); - const n = t._x, - i = t._y, - r = t._z, - o = t._order, - s = Math.cos, - a = Math.sin, - l = s(n / 2), - c = s(i / 2), - h = s(r / 2), - u = a(n / 2), - d = a(i / 2), - p = a(r / 2); - switch (o) { - case "XYZ": - this._x = u * c * h + l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h - u * d * p; - break; - case "YXZ": - this._x = u * c * h + l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h + u * d * p; - break; - case "ZXY": - this._x = u * c * h - l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h - u * d * p; - break; - case "ZYX": - this._x = u * c * h - l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h + u * d * p; - break; - case "YZX": - this._x = u * c * h + l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h - u * d * p; - break; - case "XZY": - this._x = u * c * h - l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h + u * d * p; - break; - default: - console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + o) - } - return !1 !== e && this._onChangeCallback(), this - } - setFromAxisAngle(t, e) { - const n = e / 2, - i = Math.sin(n); - return this._x = t.x * i, this._y = t.y * i, this._z = t.z * i, this._w = Math.cos(n), this._onChangeCallback(), this - } - setFromRotationMatrix(t) { - const e = t.elements, - n = e[0], - i = e[4], - r = e[8], - o = e[1], - s = e[5], - a = e[9], - l = e[2], - c = e[6], - h = e[10], - u = n + s + h; - if (u > 0) { - const t = .5 / Math.sqrt(u + 1); - this._w = .25 / t, this._x = (c - a) * t, this._y = (r - l) * t, this._z = (o - i) * t - } else if (n > s && n > h) { - const t = 2 * Math.sqrt(1 + n - s - h); - this._w = (c - a) / t, this._x = .25 * t, this._y = (i + o) / t, this._z = (r + l) / t - } else if (s > h) { - const t = 2 * Math.sqrt(1 + s - n - h); - this._w = (r - l) / t, this._x = (i + o) / t, this._y = .25 * t, this._z = (a + c) / t - } else { - const t = 2 * Math.sqrt(1 + h - n - s); - this._w = (o - i) / t, this._x = (r + l) / t, this._y = (a + c) / t, this._z = .25 * t - } - return this._onChangeCallback(), this - } - setFromUnitVectors(t, e) { - let n = t.dot(e) + 1; - return n < 1e-6 ? (n = 0, Math.abs(t.x) > Math.abs(t.z) ? (this._x = -t.y, this._y = t.x, this._z = 0, this._w = n) : (this._x = 0, this._y = -t.z, this._z = t.y, this._w = n)) : (this._x = t.y * e.z - t.z * e.y, this._y = t.z * e.x - t.x * e.z, this._z = t.x * e.y - t.y * e.x, this._w = n), this.normalize() - } - angleTo(t) { - return 2 * Math.acos(Math.abs(g.clamp(this.dot(t), -1, 1))) - } - rotateTowards(t, e) { - const n = this.angleTo(t); - if (0 === n) return this; - const i = Math.min(1, e / n); - return this.slerp(t, i), this - } - identity() { - return this.set(0, 0, 0, 1) - } - invert() { - return this.conjugate() - } - conjugate() { - return this._x *= -1, this._y *= -1, this._z *= -1, this._onChangeCallback(), this - } - dot(t) { - return this._x * t._x + this._y * t._y + this._z * t._z + this._w * t._w - } - lengthSq() { - return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w - } - length() { - return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) - } - normalize() { - let t = this.length(); - return 0 === t ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (t = 1 / t, this._x = this._x * t, this._y = this._y * t, this._z = this._z * t, this._w = this._w * t), this._onChangeCallback(), this - } - multiply(t, e) { - return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), this.multiplyQuaternions(t, e)) : this.multiplyQuaternions(this, t) - } - premultiply(t) { - return this.multiplyQuaternions(t, this) - } - multiplyQuaternions(t, e) { - const n = t._x, - i = t._y, - r = t._z, - o = t._w, - s = e._x, - a = e._y, - l = e._z, - c = e._w; - return this._x = n * c + o * s + i * l - r * a, this._y = i * c + o * a + r * s - n * l, this._z = r * c + o * l + n * a - i * s, this._w = o * c - n * s - i * a - r * l, this._onChangeCallback(), this - } - slerp(t, e) { - if (0 === e) return this; - if (1 === e) return this.copy(t); - const n = this._x, - i = this._y, - r = this._z, - o = this._w; - let s = o * t._w + n * t._x + i * t._y + r * t._z; - if (s < 0 ? (this._w = -t._w, this._x = -t._x, this._y = -t._y, this._z = -t._z, s = -s) : this.copy(t), s >= 1) return this._w = o, this._x = n, this._y = i, this._z = r, this; - const a = 1 - s * s; - if (a <= Number.EPSILON) { - const t = 1 - e; - return this._w = t * o + e * this._w, this._x = t * n + e * this._x, this._y = t * i + e * this._y, this._z = t * r + e * this._z, this.normalize(), this._onChangeCallback(), this - } - const l = Math.sqrt(a), - c = Math.atan2(l, s), - h = Math.sin((1 - e) * c) / l, - u = Math.sin(e * c) / l; - return this._w = o * h + this._w * u, this._x = n * h + this._x * u, this._y = i * h + this._y * u, this._z = r * h + this._z * u, this._onChangeCallback(), this - } - equals(t) { - return t._x === this._x && t._y === this._y && t._z === this._z && t._w === this._w - } - fromArray(t, e = 0) { - return this._x = t[e], this._y = t[e + 1], this._z = t[e + 2], this._w = t[e + 3], this._onChangeCallback(), this - } - toArray(t = [], e = 0) { - return t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._w, t - } - fromBufferAttribute(t, e) { - return this._x = t.getX(e), this._y = t.getY(e), this._z = t.getZ(e), this._w = t.getW(e), this - } - _onChange(t) { - return this._onChangeCallback = t, this - } - _onChangeCallback() {} - } - class T { - constructor(t = 0, e = 0, n = 0) { - Object.defineProperty(this, "isVector3", { - value: !0 - }), this.x = t, this.y = e, this.z = n - } - set(t, e, n) { - return void 0 === n && (n = this.z), this.x = t, this.y = e, this.z = n, this - } - setScalar(t) { - return this.x = t, this.y = t, this.z = t, this - } - setX(t) { - return this.x = t, this - } - setY(t) { - return this.y = t, this - } - setZ(t) { - return this.z = t, this - } - setComponent(t, e) { - switch (t) { - case 0: - this.x = e; - break; - case 1: - this.y = e; - break; - case 2: - this.z = e; - break; - default: - throw new Error("index is out of range: " + t) - } - return this - } - getComponent(t) { - switch (t) { - case 0: - return this.x; - case 1: - return this.y; - case 2: - return this.z; - default: - throw new Error("index is out of range: " + t) - } - } - clone() { - return new this.constructor(this.x, this.y, this.z) - } - copy(t) { - return this.x = t.x, this.y = t.y, this.z = t.z, this - } - add(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this) - } - addScalar(t) { - return this.x += t, this.y += t, this.z += t, this - } - addVectors(t, e) { - return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this - } - addScaledVector(t, e) { - return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this - } - sub(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this) - } - subScalar(t) { - return this.x -= t, this.y -= t, this.z -= t, this - } - subVectors(t, e) { - return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this - } - multiply(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), this.multiplyVectors(t, e)) : (this.x *= t.x, this.y *= t.y, this.z *= t.z, this) - } - multiplyScalar(t) { - return this.x *= t, this.y *= t, this.z *= t, this - } - multiplyVectors(t, e) { - return this.x = t.x * e.x, this.y = t.y * e.y, this.z = t.z * e.z, this - } - applyEuler(t) { - return t && t.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."), this.applyQuaternion(R.setFromEuler(t)) - } - applyAxisAngle(t, e) { - return this.applyQuaternion(R.setFromAxisAngle(t, e)) - } - applyMatrix3(t) { - const e = this.x, - n = this.y, - i = this.z, - r = t.elements; - return this.x = r[0] * e + r[3] * n + r[6] * i, this.y = r[1] * e + r[4] * n + r[7] * i, this.z = r[2] * e + r[5] * n + r[8] * i, this - } - applyNormalMatrix(t) { - return this.applyMatrix3(t).normalize() - } - applyMatrix4(t) { - const e = this.x, - n = this.y, - i = this.z, - r = t.elements, - o = 1 / (r[3] * e + r[7] * n + r[11] * i + r[15]); - return this.x = (r[0] * e + r[4] * n + r[8] * i + r[12]) * o, this.y = (r[1] * e + r[5] * n + r[9] * i + r[13]) * o, this.z = (r[2] * e + r[6] * n + r[10] * i + r[14]) * o, this - } - applyQuaternion(t) { - const e = this.x, - n = this.y, - i = this.z, - r = t.x, - o = t.y, - s = t.z, - a = t.w, - l = a * e + o * i - s * n, - c = a * n + s * e - r * i, - h = a * i + r * n - o * e, - u = -r * e - o * n - s * i; - return this.x = l * a + u * -r + c * -s - h * -o, this.y = c * a + u * -o + h * -r - l * -s, this.z = h * a + u * -s + l * -o - c * -r, this - } - project(t) { - return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix) - } - unproject(t) { - return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld) - } - transformDirection(t) { - const e = this.x, - n = this.y, - i = this.z, - r = t.elements; - return this.x = r[0] * e + r[4] * n + r[8] * i, this.y = r[1] * e + r[5] * n + r[9] * i, this.z = r[2] * e + r[6] * n + r[10] * i, this.normalize() - } - divide(t) { - return this.x /= t.x, this.y /= t.y, this.z /= t.z, this - } - divideScalar(t) { - return this.multiplyScalar(1 / t) - } - min(t) { - return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this - } - max(t) { - return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this - } - clamp(t, e) { - return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this - } - clampScalar(t, e) { - return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this - } - clampLength(t, e) { - const n = this.length(); - return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) - } - floor() { - return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this - } - ceil() { - return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this - } - round() { - return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this - } - roundToZero() { - return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this - } - negate() { - return this.x = -this.x, this.y = -this.y, this.z = -this.z, this - } - dot(t) { - return this.x * t.x + this.y * t.y + this.z * t.z - } - lengthSq() { - return this.x * this.x + this.y * this.y + this.z * this.z - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) - } - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) - } - normalize() { - return this.divideScalar(this.length() || 1) - } - setLength(t) { - return this.normalize().multiplyScalar(t) - } - lerp(t, e) { - return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this - } - lerpVectors(t, e, n) { - return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this.z = t.z + (e.z - t.z) * n, this - } - cross(t, e) { - return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), this.crossVectors(t, e)) : this.crossVectors(this, t) - } - crossVectors(t, e) { - const n = t.x, - i = t.y, - r = t.z, - o = e.x, - s = e.y, - a = e.z; - return this.x = i * a - r * s, this.y = r * o - n * a, this.z = n * s - i * o, this - } - projectOnVector(t) { - const e = t.lengthSq(); - if (0 === e) return this.set(0, 0, 0); - const n = t.dot(this) / e; - return this.copy(t).multiplyScalar(n) - } - projectOnPlane(t) { - return L.copy(this).projectOnVector(t), this.sub(L) - } - reflect(t) { - return this.sub(L.copy(t).multiplyScalar(2 * this.dot(t))) - } - angleTo(t) { - const e = Math.sqrt(this.lengthSq() * t.lengthSq()); - if (0 === e) return Math.PI / 2; - const n = this.dot(t) / e; - return Math.acos(g.clamp(n, -1, 1)) - } - distanceTo(t) { - return Math.sqrt(this.distanceToSquared(t)) - } - distanceToSquared(t) { - const e = this.x - t.x, - n = this.y - t.y, - i = this.z - t.z; - return e * e + n * n + i * i - } - manhattanDistanceTo(t) { - return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + Math.abs(this.z - t.z) - } - setFromSpherical(t) { - return this.setFromSphericalCoords(t.radius, t.phi, t.theta) - } - setFromSphericalCoords(t, e, n) { - const i = Math.sin(e) * t; - return this.x = i * Math.sin(n), this.y = Math.cos(e) * t, this.z = i * Math.cos(n), this - } - setFromCylindrical(t) { - return this.setFromCylindricalCoords(t.radius, t.theta, t.y) - } - setFromCylindricalCoords(t, e, n) { - return this.x = t * Math.sin(e), this.y = n, this.z = t * Math.cos(e), this - } - setFromMatrixPosition(t) { - const e = t.elements; - return this.x = e[12], this.y = e[13], this.z = e[14], this - } - setFromMatrixScale(t) { - const e = this.setFromMatrixColumn(t, 0).length(), - n = this.setFromMatrixColumn(t, 1).length(), - i = this.setFromMatrixColumn(t, 2).length(); - return this.x = e, this.y = n, this.z = i, this - } - setFromMatrixColumn(t, e) { - return this.fromArray(t.elements, 4 * e) - } - setFromMatrix3Column(t, e) { - return this.fromArray(t.elements, 3 * e) - } - equals(t) { - return t.x === this.x && t.y === this.y && t.z === this.z - } - fromArray(t, e = 0) { - return this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this - } - toArray(t = [], e = 0) { - return t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t - } - fromBufferAttribute(t, e, n) { - return void 0 !== n && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this - } - random() { - return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this - } - } - const L = new T, - R = new S; - class C { - constructor(t, e) { - Object.defineProperty(this, "isBox3", { - value: !0 - }), this.min = void 0 !== t ? t : new T(1 / 0, 1 / 0, 1 / 0), this.max = void 0 !== e ? e : new T(-1 / 0, -1 / 0, -1 / 0) - } - set(t, e) { - return this.min.copy(t), this.max.copy(e), this - } - setFromArray(t) { - let e = 1 / 0, - n = 1 / 0, - i = 1 / 0, - r = -1 / 0, - o = -1 / 0, - s = -1 / 0; - for (let a = 0, l = t.length; a < l; a += 3) { - const l = t[a], - c = t[a + 1], - h = t[a + 2]; - l < e && (e = l), c < n && (n = c), h < i && (i = h), l > r && (r = l), c > o && (o = c), h > s && (s = h) - } - return this.min.set(e, n, i), this.max.set(r, o, s), this - } - setFromBufferAttribute(t) { - let e = 1 / 0, - n = 1 / 0, - i = 1 / 0, - r = -1 / 0, - o = -1 / 0, - s = -1 / 0; - for (let a = 0, l = t.count; a < l; a++) { - const l = t.getX(a), - c = t.getY(a), - h = t.getZ(a); - l < e && (e = l), c < n && (n = c), h < i && (i = h), l > r && (r = l), c > o && (o = c), h > s && (s = h) - } - return this.min.set(e, n, i), this.max.set(r, o, s), this - } - setFromPoints(t) { - this.makeEmpty(); - for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); - return this - } - setFromCenterAndSize(t, e) { - const n = I.copy(e).multiplyScalar(.5); - return this.min.copy(t).sub(n), this.max.copy(t).add(n), this - } - setFromObject(t) { - return this.makeEmpty(), this.expandByObject(t) - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.min.copy(t.min), this.max.copy(t.max), this - } - makeEmpty() { - return this.min.x = this.min.y = this.min.z = 1 / 0, this.max.x = this.max.y = this.max.z = -1 / 0, this - } - isEmpty() { - return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z - } - getCenter(t) { - return void 0 === t && (console.warn("THREE.Box3: .getCenter() target is now required"), t = new T), this.isEmpty() ? t.set(0, 0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5) - } - getSize(t) { - return void 0 === t && (console.warn("THREE.Box3: .getSize() target is now required"), t = new T), this.isEmpty() ? t.set(0, 0, 0) : t.subVectors(this.max, this.min) - } - expandByPoint(t) { - return this.min.min(t), this.max.max(t), this - } - expandByVector(t) { - return this.min.sub(t), this.max.add(t), this - } - expandByScalar(t) { - return this.min.addScalar(-t), this.max.addScalar(t), this - } - expandByObject(t) { - t.updateWorldMatrix(!1, !1); - const e = t.geometry; - void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), O.copy(e.boundingBox), O.applyMatrix4(t.matrixWorld), this.union(O)); - const n = t.children; - for (let t = 0, e = n.length; t < e; t++) this.expandByObject(n[t]); - return this - } - containsPoint(t) { - return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y || t.z < this.min.z || t.z > this.max.z) - } - containsBox(t) { - return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y && this.min.z <= t.min.z && t.max.z <= this.max.z - } - getParameter(t, e) { - return void 0 === e && (console.warn("THREE.Box3: .getParameter() target is now required"), e = new T), e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y), (t.z - this.min.z) / (this.max.z - this.min.z)) - } - intersectsBox(t) { - return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y || t.max.z < this.min.z || t.min.z > this.max.z) - } - intersectsSphere(t) { - return this.clampPoint(t.center, I), I.distanceToSquared(t.center) <= t.radius * t.radius - } - intersectsPlane(t) { - let e, n; - return t.normal.x > 0 ? (e = t.normal.x * this.min.x, n = t.normal.x * this.max.x) : (e = t.normal.x * this.max.x, n = t.normal.x * this.min.x), t.normal.y > 0 ? (e += t.normal.y * this.min.y, n += t.normal.y * this.max.y) : (e += t.normal.y * this.max.y, n += t.normal.y * this.min.y), t.normal.z > 0 ? (e += t.normal.z * this.min.z, n += t.normal.z * this.max.z) : (e += t.normal.z * this.max.z, n += t.normal.z * this.min.z), e <= -t.constant && n >= -t.constant - } - intersectsTriangle(t) { - if (this.isEmpty()) return !1; - this.getCenter(G), V.subVectors(this.max, G), N.subVectors(t.a, G), B.subVectors(t.b, G), F.subVectors(t.c, G), z.subVectors(B, N), U.subVectors(F, B), H.subVectors(N, F); - let e = [0, -z.z, z.y, 0, -U.z, U.y, 0, -H.z, H.y, z.z, 0, -z.x, U.z, 0, -U.x, H.z, 0, -H.x, -z.y, z.x, 0, -U.y, U.x, 0, -H.y, H.x, 0]; - return !!P(e, N, B, F, V) && (e = [1, 0, 0, 0, 1, 0, 0, 0, 1], !!P(e, N, B, F, V) && (k.crossVectors(z, U), e = [k.x, k.y, k.z], P(e, N, B, F, V))) - } - clampPoint(t, e) { - return void 0 === e && (console.warn("THREE.Box3: .clampPoint() target is now required"), e = new T), e.copy(t).clamp(this.min, this.max) - } - distanceToPoint(t) { - return I.copy(t).clamp(this.min, this.max).sub(t).length() - } - getBoundingSphere(t) { - return void 0 === t && console.error("THREE.Box3: .getBoundingSphere() target is now required"), this.getCenter(t.center), t.radius = .5 * this.getSize(I).length(), t - } - intersect(t) { - return this.min.max(t.min), this.max.min(t.max), this.isEmpty() && this.makeEmpty(), this - } - union(t) { - return this.min.min(t.min), this.max.max(t.max), this - } - applyMatrix4(t) { - return this.isEmpty() || (D[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(t), D[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(t), D[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(t), D[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(t), D[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(t), D[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(t), D[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(t), D[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(t), this.setFromPoints(D)), this - } - translate(t) { - return this.min.add(t), this.max.add(t), this - } - equals(t) { - return t.min.equals(this.min) && t.max.equals(this.max) - } - } - - function P(t, e, n, i, r) { - for (let o = 0, s = t.length - 3; o <= s; o += 3) { - W.fromArray(t, o); - const s = r.x * Math.abs(W.x) + r.y * Math.abs(W.y) + r.z * Math.abs(W.z), - a = e.dot(W), - l = n.dot(W), - c = i.dot(W); - if (Math.max(-Math.max(a, l, c), Math.min(a, l, c)) > s) return !1 - } - return !0 - } - const D = [new T, new T, new T, new T, new T, new T, new T, new T], - I = new T, - O = new C, - N = new T, - B = new T, - F = new T, - z = new T, - U = new T, - H = new T, - G = new T, - V = new T, - k = new T, - W = new T, - j = new C; - class X { - constructor(t, e) { - this.center = void 0 !== t ? t : new T, this.radius = void 0 !== e ? e : -1 - } - set(t, e) { - return this.center.copy(t), this.radius = e, this - } - setFromPoints(t, e) { - const n = this.center; - void 0 !== e ? n.copy(e) : j.setFromPoints(t).getCenter(n); - let i = 0; - for (let e = 0, r = t.length; e < r; e++) i = Math.max(i, n.distanceToSquared(t[e])); - return this.radius = Math.sqrt(i), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.center.copy(t.center), this.radius = t.radius, this - } - isEmpty() { - return this.radius < 0 - } - makeEmpty() { - return this.center.set(0, 0, 0), this.radius = -1, this - } - containsPoint(t) { - return t.distanceToSquared(this.center) <= this.radius * this.radius - } - distanceToPoint(t) { - return t.distanceTo(this.center) - this.radius - } - intersectsSphere(t) { - const e = this.radius + t.radius; - return t.center.distanceToSquared(this.center) <= e * e - } - intersectsBox(t) { - return t.intersectsSphere(this) - } - intersectsPlane(t) { - return Math.abs(t.distanceToPoint(this.center)) <= this.radius - } - clampPoint(t, e) { - const n = this.center.distanceToSquared(t); - return void 0 === e && (console.warn("THREE.Sphere: .clampPoint() target is now required"), e = new T), e.copy(t), n > this.radius * this.radius && (e.sub(this.center).normalize(), e.multiplyScalar(this.radius).add(this.center)), e - } - getBoundingBox(t) { - return void 0 === t && (console.warn("THREE.Sphere: .getBoundingBox() target is now required"), t = new C), this.isEmpty() ? (t.makeEmpty(), t) : (t.set(this.center, this.center), t.expandByScalar(this.radius), t) - } - applyMatrix4(t) { - return this.center.applyMatrix4(t), this.radius = this.radius * t.getMaxScaleOnAxis(), this - } - translate(t) { - return this.center.add(t), this - } - equals(t) { - return t.center.equals(this.center) && t.radius === this.radius - } - } - const q = new T, - Y = new T, - Q = new T, - Z = new T, - J = new T, - K = new T, - $ = new T; - class tt { - constructor(t, e) { - this.origin = void 0 !== t ? t : new T, this.direction = void 0 !== e ? e : new T(0, 0, -1) - } - set(t, e) { - return this.origin.copy(t), this.direction.copy(e), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.origin.copy(t.origin), this.direction.copy(t.direction), this - } - at(t, e) { - return void 0 === e && (console.warn("THREE.Ray: .at() target is now required"), e = new T), e.copy(this.direction).multiplyScalar(t).add(this.origin) - } - lookAt(t) { - return this.direction.copy(t).sub(this.origin).normalize(), this - } - recast(t) { - return this.origin.copy(this.at(t, q)), this - } - closestPointToPoint(t, e) { - void 0 === e && (console.warn("THREE.Ray: .closestPointToPoint() target is now required"), e = new T), e.subVectors(t, this.origin); - const n = e.dot(this.direction); - return n < 0 ? e.copy(this.origin) : e.copy(this.direction).multiplyScalar(n).add(this.origin) - } - distanceToPoint(t) { - return Math.sqrt(this.distanceSqToPoint(t)) - } - distanceSqToPoint(t) { - const e = q.subVectors(t, this.origin).dot(this.direction); - return e < 0 ? this.origin.distanceToSquared(t) : (q.copy(this.direction).multiplyScalar(e).add(this.origin), q.distanceToSquared(t)) - } - distanceSqToSegment(t, e, n, i) { - Y.copy(t).add(e).multiplyScalar(.5), Q.copy(e).sub(t).normalize(), Z.copy(this.origin).sub(Y); - const r = .5 * t.distanceTo(e), - o = -this.direction.dot(Q), - s = Z.dot(this.direction), - a = -Z.dot(Q), - l = Z.lengthSq(), - c = Math.abs(1 - o * o); - let h, u, d, p; - if (c > 0) - if (h = o * a - s, u = o * s - a, p = r * c, h >= 0) - if (u >= -p) - if (u <= p) { - const t = 1 / c; - h *= t, u *= t, d = h * (h + o * u + 2 * s) + u * (o * h + u + 2 * a) + l - } else u = r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; - else u = -r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; - else u <= -p ? (h = Math.max(0, -(-o * r + s)), u = h > 0 ? -r : Math.min(Math.max(-r, -a), r), d = -h * h + u * (u + 2 * a) + l) : u <= p ? (h = 0, u = Math.min(Math.max(-r, -a), r), d = u * (u + 2 * a) + l) : (h = Math.max(0, -(o * r + s)), u = h > 0 ? r : Math.min(Math.max(-r, -a), r), d = -h * h + u * (u + 2 * a) + l); - else u = o > 0 ? -r : r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l; - return n && n.copy(this.direction).multiplyScalar(h).add(this.origin), i && i.copy(Q).multiplyScalar(u).add(Y), d - } - intersectSphere(t, e) { - q.subVectors(t.center, this.origin); - const n = q.dot(this.direction), - i = q.dot(q) - n * n, - r = t.radius * t.radius; - if (i > r) return null; - const o = Math.sqrt(r - i), - s = n - o, - a = n + o; - return s < 0 && a < 0 ? null : s < 0 ? this.at(a, e) : this.at(s, e) - } - intersectsSphere(t) { - return this.distanceSqToPoint(t.center) <= t.radius * t.radius - } - distanceToPlane(t) { - const e = t.normal.dot(this.direction); - if (0 === e) return 0 === t.distanceToPoint(this.origin) ? 0 : null; - const n = -(this.origin.dot(t.normal) + t.constant) / e; - return n >= 0 ? n : null - } - intersectPlane(t, e) { - const n = this.distanceToPlane(t); - return null === n ? null : this.at(n, e) - } - intersectsPlane(t) { - const e = t.distanceToPoint(this.origin); - if (0 === e) return !0; - return t.normal.dot(this.direction) * e < 0 - } - intersectBox(t, e) { - let n, i, r, o, s, a; - const l = 1 / this.direction.x, - c = 1 / this.direction.y, - h = 1 / this.direction.z, - u = this.origin; - return l >= 0 ? (n = (t.min.x - u.x) * l, i = (t.max.x - u.x) * l) : (n = (t.max.x - u.x) * l, i = (t.min.x - u.x) * l), c >= 0 ? (r = (t.min.y - u.y) * c, o = (t.max.y - u.y) * c) : (r = (t.max.y - u.y) * c, o = (t.min.y - u.y) * c), n > o || r > i ? null : ((r > n || n != n) && (n = r), (o < i || i != i) && (i = o), h >= 0 ? (s = (t.min.z - u.z) * h, a = (t.max.z - u.z) * h) : (s = (t.max.z - u.z) * h, a = (t.min.z - u.z) * h), n > a || s > i ? null : ((s > n || n != n) && (n = s), (a < i || i != i) && (i = a), i < 0 ? null : this.at(n >= 0 ? n : i, e))) - } - intersectsBox(t) { - return null !== this.intersectBox(t, q) - } - intersectTriangle(t, e, n, i, r) { - J.subVectors(e, t), K.subVectors(n, t), $.crossVectors(J, K); - let o, s = this.direction.dot($); - if (s > 0) { - if (i) return null; - o = 1 - } else { - if (!(s < 0)) return null; - o = -1, s = -s - } - Z.subVectors(this.origin, t); - const a = o * this.direction.dot(K.crossVectors(Z, K)); - if (a < 0) return null; - const l = o * this.direction.dot(J.cross(Z)); - if (l < 0) return null; - if (a + l > s) return null; - const c = -o * Z.dot($); - return c < 0 ? null : this.at(c / s, r) - } - applyMatrix4(t) { - return this.origin.applyMatrix4(t), this.direction.transformDirection(t), this - } - equals(t) { - return t.origin.equals(this.origin) && t.direction.equals(this.direction) - } - } - class et { - constructor() { - Object.defineProperty(this, "isMatrix4", { - value: !0 - }), this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], arguments.length > 0 && console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.") - } - set(t, e, n, i, r, o, s, a, l, c, h, u, d, p, f, m) { - const g = this.elements; - return g[0] = t, g[4] = e, g[8] = n, g[12] = i, g[1] = r, g[5] = o, g[9] = s, g[13] = a, g[2] = l, g[6] = c, g[10] = h, g[14] = u, g[3] = d, g[7] = p, g[11] = f, g[15] = m, this - } - identity() { - return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this - } - clone() { - return (new et).fromArray(this.elements) - } - copy(t) { - const e = this.elements, - n = t.elements; - return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], e[9] = n[9], e[10] = n[10], e[11] = n[11], e[12] = n[12], e[13] = n[13], e[14] = n[14], e[15] = n[15], this - } - copyPosition(t) { - const e = this.elements, - n = t.elements; - return e[12] = n[12], e[13] = n[13], e[14] = n[14], this - } - setFromMatrix3(t) { - const e = t.elements; - return this.set(e[0], e[3], e[6], 0, e[1], e[4], e[7], 0, e[2], e[5], e[8], 0, 0, 0, 0, 1), this - } - extractBasis(t, e, n) { - return t.setFromMatrixColumn(this, 0), e.setFromMatrixColumn(this, 1), n.setFromMatrixColumn(this, 2), this - } - makeBasis(t, e, n) { - return this.set(t.x, e.x, n.x, 0, t.y, e.y, n.y, 0, t.z, e.z, n.z, 0, 0, 0, 0, 1), this - } - extractRotation(t) { - const e = this.elements, - n = t.elements, - i = 1 / nt.setFromMatrixColumn(t, 0).length(), - r = 1 / nt.setFromMatrixColumn(t, 1).length(), - o = 1 / nt.setFromMatrixColumn(t, 2).length(); - return e[0] = n[0] * i, e[1] = n[1] * i, e[2] = n[2] * i, e[3] = 0, e[4] = n[4] * r, e[5] = n[5] * r, e[6] = n[6] * r, e[7] = 0, e[8] = n[8] * o, e[9] = n[9] * o, e[10] = n[10] * o, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this - } - makeRotationFromEuler(t) { - t && t.isEuler || console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); - const e = this.elements, - n = t.x, - i = t.y, - r = t.z, - o = Math.cos(n), - s = Math.sin(n), - a = Math.cos(i), - l = Math.sin(i), - c = Math.cos(r), - h = Math.sin(r); - if ("XYZ" === t.order) { - const t = o * c, - n = o * h, - i = s * c, - r = s * h; - e[0] = a * c, e[4] = -a * h, e[8] = l, e[1] = n + i * l, e[5] = t - r * l, e[9] = -s * a, e[2] = r - t * l, e[6] = i + n * l, e[10] = o * a - } else if ("YXZ" === t.order) { - const t = a * c, - n = a * h, - i = l * c, - r = l * h; - e[0] = t + r * s, e[4] = i * s - n, e[8] = o * l, e[1] = o * h, e[5] = o * c, e[9] = -s, e[2] = n * s - i, e[6] = r + t * s, e[10] = o * a - } else if ("ZXY" === t.order) { - const t = a * c, - n = a * h, - i = l * c, - r = l * h; - e[0] = t - r * s, e[4] = -o * h, e[8] = i + n * s, e[1] = n + i * s, e[5] = o * c, e[9] = r - t * s, e[2] = -o * l, e[6] = s, e[10] = o * a - } else if ("ZYX" === t.order) { - const t = o * c, - n = o * h, - i = s * c, - r = s * h; - e[0] = a * c, e[4] = i * l - n, e[8] = t * l + r, e[1] = a * h, e[5] = r * l + t, e[9] = n * l - i, e[2] = -l, e[6] = s * a, e[10] = o * a - } else if ("YZX" === t.order) { - const t = o * a, - n = o * l, - i = s * a, - r = s * l; - e[0] = a * c, e[4] = r - t * h, e[8] = i * h + n, e[1] = h, e[5] = o * c, e[9] = -s * c, e[2] = -l * c, e[6] = n * h + i, e[10] = t - r * h - } else if ("XZY" === t.order) { - const t = o * a, - n = o * l, - i = s * a, - r = s * l; - e[0] = a * c, e[4] = -h, e[8] = l * c, e[1] = t * h + r, e[5] = o * c, e[9] = n * h - i, e[2] = i * h - n, e[6] = s * c, e[10] = r * h + t - } - return e[3] = 0, e[7] = 0, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this - } - makeRotationFromQuaternion(t) { - return this.compose(rt, t, ot) - } - lookAt(t, e, n) { - const i = this.elements; - return lt.subVectors(t, e), 0 === lt.lengthSq() && (lt.z = 1), lt.normalize(), st.crossVectors(n, lt), 0 === st.lengthSq() && (1 === Math.abs(n.z) ? lt.x += 1e-4 : lt.z += 1e-4, lt.normalize(), st.crossVectors(n, lt)), st.normalize(), at.crossVectors(lt, st), i[0] = st.x, i[4] = at.x, i[8] = lt.x, i[1] = st.y, i[5] = at.y, i[9] = lt.y, i[2] = st.z, i[6] = at.z, i[10] = lt.z, this - } - multiply(t, e) { - return void 0 !== e ? (console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), this.multiplyMatrices(t, e)) : this.multiplyMatrices(this, t) - } - premultiply(t) { - return this.multiplyMatrices(t, this) - } - multiplyMatrices(t, e) { - const n = t.elements, - i = e.elements, - r = this.elements, - o = n[0], - s = n[4], - a = n[8], - l = n[12], - c = n[1], - h = n[5], - u = n[9], - d = n[13], - p = n[2], - f = n[6], - m = n[10], - g = n[14], - v = n[3], - y = n[7], - A = n[11], - x = n[15], - _ = i[0], - b = i[4], - w = i[8], - M = i[12], - E = i[1], - S = i[5], - T = i[9], - L = i[13], - R = i[2], - C = i[6], - P = i[10], - D = i[14], - I = i[3], - O = i[7], - N = i[11], - B = i[15]; - return r[0] = o * _ + s * E + a * R + l * I, r[4] = o * b + s * S + a * C + l * O, r[8] = o * w + s * T + a * P + l * N, r[12] = o * M + s * L + a * D + l * B, r[1] = c * _ + h * E + u * R + d * I, r[5] = c * b + h * S + u * C + d * O, r[9] = c * w + h * T + u * P + d * N, r[13] = c * M + h * L + u * D + d * B, r[2] = p * _ + f * E + m * R + g * I, r[6] = p * b + f * S + m * C + g * O, r[10] = p * w + f * T + m * P + g * N, r[14] = p * M + f * L + m * D + g * B, r[3] = v * _ + y * E + A * R + x * I, r[7] = v * b + y * S + A * C + x * O, r[11] = v * w + y * T + A * P + x * N, r[15] = v * M + y * L + A * D + x * B, this - } - multiplyScalar(t) { - const e = this.elements; - return e[0] *= t, e[4] *= t, e[8] *= t, e[12] *= t, e[1] *= t, e[5] *= t, e[9] *= t, e[13] *= t, e[2] *= t, e[6] *= t, e[10] *= t, e[14] *= t, e[3] *= t, e[7] *= t, e[11] *= t, e[15] *= t, this - } - determinant() { - const t = this.elements, - e = t[0], - n = t[4], - i = t[8], - r = t[12], - o = t[1], - s = t[5], - a = t[9], - l = t[13], - c = t[2], - h = t[6], - u = t[10], - d = t[14]; - return t[3] * (+r * a * h - i * l * h - r * s * u + n * l * u + i * s * d - n * a * d) + t[7] * (+e * a * d - e * l * u + r * o * u - i * o * d + i * l * c - r * a * c) + t[11] * (+e * l * h - e * s * d - r * o * h + n * o * d + r * s * c - n * l * c) + t[15] * (-i * s * c - e * a * h + e * s * u + i * o * h - n * o * u + n * a * c) - } - transpose() { - const t = this.elements; - let e; - return e = t[1], t[1] = t[4], t[4] = e, e = t[2], t[2] = t[8], t[8] = e, e = t[6], t[6] = t[9], t[9] = e, e = t[3], t[3] = t[12], t[12] = e, e = t[7], t[7] = t[13], t[13] = e, e = t[11], t[11] = t[14], t[14] = e, this - } - setPosition(t, e, n) { - const i = this.elements; - return t.isVector3 ? (i[12] = t.x, i[13] = t.y, i[14] = t.z) : (i[12] = t, i[13] = e, i[14] = n), this - } - invert() { - const t = this.elements, - e = t[0], - n = t[1], - i = t[2], - r = t[3], - o = t[4], - s = t[5], - a = t[6], - l = t[7], - c = t[8], - h = t[9], - u = t[10], - d = t[11], - p = t[12], - f = t[13], - m = t[14], - g = t[15], - v = h * m * l - f * u * l + f * a * d - s * m * d - h * a * g + s * u * g, - y = p * u * l - c * m * l - p * a * d + o * m * d + c * a * g - o * u * g, - A = c * f * l - p * h * l + p * s * d - o * f * d - c * s * g + o * h * g, - x = p * h * a - c * f * a - p * s * u + o * f * u + c * s * m - o * h * m, - _ = e * v + n * y + i * A + r * x; - if (0 === _) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - const b = 1 / _; - return t[0] = v * b, t[1] = (f * u * r - h * m * r - f * i * d + n * m * d + h * i * g - n * u * g) * b, t[2] = (s * m * r - f * a * r + f * i * l - n * m * l - s * i * g + n * a * g) * b, t[3] = (h * a * r - s * u * r - h * i * l + n * u * l + s * i * d - n * a * d) * b, t[4] = y * b, t[5] = (c * m * r - p * u * r + p * i * d - e * m * d - c * i * g + e * u * g) * b, t[6] = (p * a * r - o * m * r - p * i * l + e * m * l + o * i * g - e * a * g) * b, t[7] = (o * u * r - c * a * r + c * i * l - e * u * l - o * i * d + e * a * d) * b, t[8] = A * b, t[9] = (p * h * r - c * f * r - p * n * d + e * f * d + c * n * g - e * h * g) * b, t[10] = (o * f * r - p * s * r + p * n * l - e * f * l - o * n * g + e * s * g) * b, t[11] = (c * s * r - o * h * r - c * n * l + e * h * l + o * n * d - e * s * d) * b, t[12] = x * b, t[13] = (c * f * i - p * h * i + p * n * u - e * f * u - c * n * m + e * h * m) * b, t[14] = (p * s * i - o * f * i - p * n * a + e * f * a + o * n * m - e * s * m) * b, t[15] = (o * h * i - c * s * i + c * n * a - e * h * a - o * n * u + e * s * u) * b, this - } - scale(t) { - const e = this.elements, - n = t.x, - i = t.y, - r = t.z; - return e[0] *= n, e[4] *= i, e[8] *= r, e[1] *= n, e[5] *= i, e[9] *= r, e[2] *= n, e[6] *= i, e[10] *= r, e[3] *= n, e[7] *= i, e[11] *= r, this - } - getMaxScaleOnAxis() { - const t = this.elements, - e = t[0] * t[0] + t[1] * t[1] + t[2] * t[2], - n = t[4] * t[4] + t[5] * t[5] + t[6] * t[6], - i = t[8] * t[8] + t[9] * t[9] + t[10] * t[10]; - return Math.sqrt(Math.max(e, n, i)) - } - makeTranslation(t, e, n) { - return this.set(1, 0, 0, t, 0, 1, 0, e, 0, 0, 1, n, 0, 0, 0, 1), this - } - makeRotationX(t) { - const e = Math.cos(t), - n = Math.sin(t); - return this.set(1, 0, 0, 0, 0, e, -n, 0, 0, n, e, 0, 0, 0, 0, 1), this - } - makeRotationY(t) { - const e = Math.cos(t), - n = Math.sin(t); - return this.set(e, 0, n, 0, 0, 1, 0, 0, -n, 0, e, 0, 0, 0, 0, 1), this - } - makeRotationZ(t) { - const e = Math.cos(t), - n = Math.sin(t); - return this.set(e, -n, 0, 0, n, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this - } - makeRotationAxis(t, e) { - const n = Math.cos(e), - i = Math.sin(e), - r = 1 - n, - o = t.x, - s = t.y, - a = t.z, - l = r * o, - c = r * s; - return this.set(l * o + n, l * s - i * a, l * a + i * s, 0, l * s + i * a, c * s + n, c * a - i * o, 0, l * a - i * s, c * a + i * o, r * a * a + n, 0, 0, 0, 0, 1), this - } - makeScale(t, e, n) { - return this.set(t, 0, 0, 0, 0, e, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this - } - makeShear(t, e, n) { - return this.set(1, e, n, 0, t, 1, n, 0, t, e, 1, 0, 0, 0, 0, 1), this - } - compose(t, e, n) { - const i = this.elements, - r = e._x, - o = e._y, - s = e._z, - a = e._w, - l = r + r, - c = o + o, - h = s + s, - u = r * l, - d = r * c, - p = r * h, - f = o * c, - m = o * h, - g = s * h, - v = a * l, - y = a * c, - A = a * h, - x = n.x, - _ = n.y, - b = n.z; - return i[0] = (1 - (f + g)) * x, i[1] = (d + A) * x, i[2] = (p - y) * x, i[3] = 0, i[4] = (d - A) * _, i[5] = (1 - (u + g)) * _, i[6] = (m + v) * _, i[7] = 0, i[8] = (p + y) * b, i[9] = (m - v) * b, i[10] = (1 - (u + f)) * b, i[11] = 0, i[12] = t.x, i[13] = t.y, i[14] = t.z, i[15] = 1, this - } - decompose(t, e, n) { - const i = this.elements; - let r = nt.set(i[0], i[1], i[2]).length(); - const o = nt.set(i[4], i[5], i[6]).length(), - s = nt.set(i[8], i[9], i[10]).length(); - this.determinant() < 0 && (r = -r), t.x = i[12], t.y = i[13], t.z = i[14], it.copy(this); - const a = 1 / r, - l = 1 / o, - c = 1 / s; - return it.elements[0] *= a, it.elements[1] *= a, it.elements[2] *= a, it.elements[4] *= l, it.elements[5] *= l, it.elements[6] *= l, it.elements[8] *= c, it.elements[9] *= c, it.elements[10] *= c, e.setFromRotationMatrix(it), n.x = r, n.y = o, n.z = s, this - } - makePerspective(t, e, n, i, r, o) { - void 0 === o && console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs."); - const s = this.elements, - a = 2 * r / (e - t), - l = 2 * r / (n - i), - c = (e + t) / (e - t), - h = (n + i) / (n - i), - u = -(o + r) / (o - r), - d = -2 * o * r / (o - r); - return s[0] = a, s[4] = 0, s[8] = c, s[12] = 0, s[1] = 0, s[5] = l, s[9] = h, s[13] = 0, s[2] = 0, s[6] = 0, s[10] = u, s[14] = d, s[3] = 0, s[7] = 0, s[11] = -1, s[15] = 0, this - } - makeOrthographic(t, e, n, i, r, o) { - const s = this.elements, - a = 1 / (e - t), - l = 1 / (n - i), - c = 1 / (o - r), - h = (e + t) * a, - u = (n + i) * l, - d = (o + r) * c; - return s[0] = 2 * a, s[4] = 0, s[8] = 0, s[12] = -h, s[1] = 0, s[5] = 2 * l, s[9] = 0, s[13] = -u, s[2] = 0, s[6] = 0, s[10] = -2 * c, s[14] = -d, s[3] = 0, s[7] = 0, s[11] = 0, s[15] = 1, this - } - equals(t) { - const e = this.elements, - n = t.elements; - for (let t = 0; t < 16; t++) - if (e[t] !== n[t]) return !1; - return !0 - } - fromArray(t, e = 0) { - for (let n = 0; n < 16; n++) this.elements[n] = t[n + e]; - return this - } - toArray(t = [], e = 0) { - const n = this.elements; - return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t[e + 9] = n[9], t[e + 10] = n[10], t[e + 11] = n[11], t[e + 12] = n[12], t[e + 13] = n[13], t[e + 14] = n[14], t[e + 15] = n[15], t - } - } - const nt = new T, - it = new et, - rt = new T(0, 0, 0), - ot = new T(1, 1, 1), - st = new T, - at = new T, - lt = new T; - class ct { - constructor(t = 0, e = 0, n = 0, i = ct.DefaultOrder) { - Object.defineProperty(this, "isEuler", { - value: !0 - }), this._x = t, this._y = e, this._z = n, this._order = i - } - get x() { - return this._x - } - set x(t) { - this._x = t, this._onChangeCallback() - } - get y() { - return this._y - } - set y(t) { - this._y = t, this._onChangeCallback() - } - get z() { - return this._z - } - set z(t) { - this._z = t, this._onChangeCallback() - } - get order() { - return this._order - } - set order(t) { - this._order = t, this._onChangeCallback() - } - set(t, e, n, i) { - return this._x = t, this._y = e, this._z = n, this._order = i || this._order, this._onChangeCallback(), this - } - clone() { - return new this.constructor(this._x, this._y, this._z, this._order) - } - copy(t) { - return this._x = t._x, this._y = t._y, this._z = t._z, this._order = t._order, this._onChangeCallback(), this - } - setFromRotationMatrix(t, e, n) { - const i = g.clamp, - r = t.elements, - o = r[0], - s = r[4], - a = r[8], - l = r[1], - c = r[5], - h = r[9], - u = r[2], - d = r[6], - p = r[10]; - switch (e = e || this._order) { - case "XYZ": - this._y = Math.asin(i(a, -1, 1)), Math.abs(a) < .9999999 ? (this._x = Math.atan2(-h, p), this._z = Math.atan2(-s, o)) : (this._x = Math.atan2(d, c), this._z = 0); - break; - case "YXZ": - this._x = Math.asin(-i(h, -1, 1)), Math.abs(h) < .9999999 ? (this._y = Math.atan2(a, p), this._z = Math.atan2(l, c)) : (this._y = Math.atan2(-u, o), this._z = 0); - break; - case "ZXY": - this._x = Math.asin(i(d, -1, 1)), Math.abs(d) < .9999999 ? (this._y = Math.atan2(-u, p), this._z = Math.atan2(-s, c)) : (this._y = 0, this._z = Math.atan2(l, o)); - break; - case "ZYX": - this._y = Math.asin(-i(u, -1, 1)), Math.abs(u) < .9999999 ? (this._x = Math.atan2(d, p), this._z = Math.atan2(l, o)) : (this._x = 0, this._z = Math.atan2(-s, c)); - break; - case "YZX": - this._z = Math.asin(i(l, -1, 1)), Math.abs(l) < .9999999 ? (this._x = Math.atan2(-h, c), this._y = Math.atan2(-u, o)) : (this._x = 0, this._y = Math.atan2(a, p)); - break; - case "XZY": - this._z = Math.asin(-i(s, -1, 1)), Math.abs(s) < .9999999 ? (this._x = Math.atan2(d, c), this._y = Math.atan2(a, o)) : (this._x = Math.atan2(-h, p), this._y = 0); - break; - default: - console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: " + e) - } - return this._order = e, !1 !== n && this._onChangeCallback(), this - } - setFromQuaternion(t, e, n) { - return ht.makeRotationFromQuaternion(t), this.setFromRotationMatrix(ht, e, n) - } - setFromVector3(t, e) { - return this.set(t.x, t.y, t.z, e || this._order) - } - reorder(t) { - return ut.setFromEuler(this), this.setFromQuaternion(ut, t) - } - equals(t) { - return t._x === this._x && t._y === this._y && t._z === this._z && t._order === this._order - } - fromArray(t) { - return this._x = t[0], this._y = t[1], this._z = t[2], void 0 !== t[3] && (this._order = t[3]), this._onChangeCallback(), this - } - toArray(t = [], e = 0) { - return t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._order, t - } - toVector3(t) { - return t ? t.set(this._x, this._y, this._z) : new T(this._x, this._y, this._z) - } - _onChange(t) { - return this._onChangeCallback = t, this - } - _onChangeCallback() {} - } - ct.DefaultOrder = "XYZ", ct.RotationOrders = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"]; - const ht = new et, - ut = new S; - class dt { - constructor() { - this.mask = 1 - } - set(t) { - this.mask = 1 << t | 0 - } - enable(t) { - this.mask |= 1 << t | 0 - } - enableAll() { - this.mask = -1 - } - toggle(t) { - this.mask ^= 1 << t | 0 - } - disable(t) { - this.mask &= ~(1 << t | 0) - } - disableAll() { - this.mask = 0 - } - test(t) { - return 0 != (this.mask & t.mask) - } - } - let pt = 0; - const ft = new T, - mt = new S, - gt = new et, - vt = new T, - yt = new T, - At = new T, - xt = new S, - _t = new T(1, 0, 0), - bt = new T(0, 1, 0), - wt = new T(0, 0, 1), - Mt = { - type: "added" - }, - Et = { - type: "removed" - }; - - function St() { - Object.defineProperty(this, "id", { - value: pt++ - }), this.uuid = g.generateUUID(), this.name = "", this.type = "Object3D", this.parent = null, this.children = [], this.up = St.DefaultUp.clone(); - const t = new T, - e = new ct, - n = new S, - i = new T(1, 1, 1); - e._onChange((function() { - n.setFromEuler(e, !1) - })), n._onChange((function() { - e.setFromQuaternion(n, void 0, !1) - })), Object.defineProperties(this, { - position: { - configurable: !0, - enumerable: !0, - value: t - }, - rotation: { - configurable: !0, - enumerable: !0, - value: e - }, - quaternion: { - configurable: !0, - enumerable: !0, - value: n - }, - scale: { - configurable: !0, - enumerable: !0, - value: i - }, - modelViewMatrix: { - value: new et - }, - normalMatrix: { - value: new y - } - }), this.matrix = new et, this.matrixWorld = new et, this.matrixAutoUpdate = St.DefaultMatrixAutoUpdate, this.matrixWorldNeedsUpdate = !1, this.layers = new dt, this.visible = !0, this.castShadow = !1, this.receiveShadow = !1, this.frustumCulled = !0, this.renderOrder = 0, this.animations = [], this.userData = {} - } - St.DefaultUp = new T(0, 1, 0), St.DefaultMatrixAutoUpdate = !0, St.prototype = Object.assign(Object.create(p.prototype), { - constructor: St, - isObject3D: !0, - onBeforeRender: function() {}, - onAfterRender: function() {}, - applyMatrix4: function(t) { - this.matrixAutoUpdate && this.updateMatrix(), this.matrix.premultiply(t), this.matrix.decompose(this.position, this.quaternion, this.scale) - }, - applyQuaternion: function(t) { - return this.quaternion.premultiply(t), this - }, - setRotationFromAxisAngle: function(t, e) { - this.quaternion.setFromAxisAngle(t, e) - }, - setRotationFromEuler: function(t) { - this.quaternion.setFromEuler(t, !0) - }, - setRotationFromMatrix: function(t) { - this.quaternion.setFromRotationMatrix(t) - }, - setRotationFromQuaternion: function(t) { - this.quaternion.copy(t) - }, - rotateOnAxis: function(t, e) { - return mt.setFromAxisAngle(t, e), this.quaternion.multiply(mt), this - }, - rotateOnWorldAxis: function(t, e) { - return mt.setFromAxisAngle(t, e), this.quaternion.premultiply(mt), this - }, - rotateX: function(t) { - return this.rotateOnAxis(_t, t) - }, - rotateY: function(t) { - return this.rotateOnAxis(bt, t) - }, - rotateZ: function(t) { - return this.rotateOnAxis(wt, t) - }, - translateOnAxis: function(t, e) { - return ft.copy(t).applyQuaternion(this.quaternion), this.position.add(ft.multiplyScalar(e)), this - }, - translateX: function(t) { - return this.translateOnAxis(_t, t) - }, - translateY: function(t) { - return this.translateOnAxis(bt, t) - }, - translateZ: function(t) { - return this.translateOnAxis(wt, t) - }, - localToWorld: function(t) { - return t.applyMatrix4(this.matrixWorld) - }, - worldToLocal: function(t) { - return t.applyMatrix4(gt.copy(this.matrixWorld).invert()) - }, - lookAt: function(t, e, n) { - t.isVector3 ? vt.copy(t) : vt.set(t, e, n); - const i = this.parent; - this.updateWorldMatrix(!0, !1), yt.setFromMatrixPosition(this.matrixWorld), this.isCamera || this.isLight ? gt.lookAt(yt, vt, this.up) : gt.lookAt(vt, yt, this.up), this.quaternion.setFromRotationMatrix(gt), i && (gt.extractRotation(i.matrixWorld), mt.setFromRotationMatrix(gt), this.quaternion.premultiply(mt.invert())) - }, - add: function(t) { - if (arguments.length > 1) { - for (let t = 0; t < arguments.length; t++) this.add(arguments[t]); - return this - } - return t === this ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", t), this) : (t && t.isObject3D ? (null !== t.parent && t.parent.remove(t), t.parent = this, this.children.push(t), t.dispatchEvent(Mt)) : console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", t), this) - }, - remove: function(t) { - if (arguments.length > 1) { - for (let t = 0; t < arguments.length; t++) this.remove(arguments[t]); - return this - } - const e = this.children.indexOf(t); - return -1 !== e && (t.parent = null, this.children.splice(e, 1), t.dispatchEvent(Et)), this - }, - clear: function() { - for (let t = 0; t < this.children.length; t++) { - const e = this.children[t]; - e.parent = null, e.dispatchEvent(Et) - } - return this.children.length = 0, this - }, - attach: function(t) { - return this.updateWorldMatrix(!0, !1), gt.copy(this.matrixWorld).invert(), null !== t.parent && (t.parent.updateWorldMatrix(!0, !1), gt.multiply(t.parent.matrixWorld)), t.applyMatrix4(gt), t.updateWorldMatrix(!1, !1), this.add(t), this - }, - getObjectById: function(t) { - return this.getObjectByProperty("id", t) - }, - getObjectByName: function(t) { - return this.getObjectByProperty("name", t) - }, - getObjectByProperty: function(t, e) { - if (this[t] === e) return this; - for (let n = 0, i = this.children.length; n < i; n++) { - const i = this.children[n].getObjectByProperty(t, e); - if (void 0 !== i) return i - } - }, - getWorldPosition: function(t) { - return void 0 === t && (console.warn("THREE.Object3D: .getWorldPosition() target is now required"), t = new T), this.updateWorldMatrix(!0, !1), t.setFromMatrixPosition(this.matrixWorld) - }, - getWorldQuaternion: function(t) { - return void 0 === t && (console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"), t = new S), this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(yt, t, At), t - }, - getWorldScale: function(t) { - return void 0 === t && (console.warn("THREE.Object3D: .getWorldScale() target is now required"), t = new T), this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(yt, xt, t), t - }, - getWorldDirection: function(t) { - void 0 === t && (console.warn("THREE.Object3D: .getWorldDirection() target is now required"), t = new T), this.updateWorldMatrix(!0, !1); - const e = this.matrixWorld.elements; - return t.set(e[8], e[9], e[10]).normalize() - }, - raycast: function() {}, - traverse: function(t) { - t(this); - const e = this.children; - for (let n = 0, i = e.length; n < i; n++) e[n].traverse(t) - }, - traverseVisible: function(t) { - if (!1 === this.visible) return; - t(this); - const e = this.children; - for (let n = 0, i = e.length; n < i; n++) e[n].traverseVisible(t) - }, - traverseAncestors: function(t) { - const e = this.parent; - null !== e && (t(e), e.traverseAncestors(t)) - }, - updateMatrix: function() { - this.matrix.compose(this.position, this.quaternion, this.scale), this.matrixWorldNeedsUpdate = !0 - }, - updateMatrixWorld: function(t) { - this.matrixAutoUpdate && this.updateMatrix(), (this.matrixWorldNeedsUpdate || t) && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), this.matrixWorldNeedsUpdate = !1, t = !0); - const e = this.children; - for (let n = 0, i = e.length; n < i; n++) e[n].updateMatrixWorld(t) - }, - updateWorldMatrix: function(t, e) { - const n = this.parent; - if (!0 === t && null !== n && n.updateWorldMatrix(!0, !1), this.matrixAutoUpdate && this.updateMatrix(), null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), !0 === e) { - const t = this.children; - for (let e = 0, n = t.length; e < n; e++) t[e].updateWorldMatrix(!1, !0) - } - }, - toJSON: function(t) { - const e = void 0 === t || "string" == typeof t, - n = {}; - e && (t = { - geometries: {}, - materials: {}, - textures: {}, - images: {}, - shapes: {}, - skeletons: {}, - animations: {} - }, n.metadata = { - version: 4.5, - type: "Object", - generator: "Object3D.toJSON" - }); - const i = {}; - - function r(e, n) { - return void 0 === e[n.uuid] && (e[n.uuid] = n.toJSON(t)), n.uuid - } - if (i.uuid = this.uuid, i.type = this.type, "" !== this.name && (i.name = this.name), !0 === this.castShadow && (i.castShadow = !0), !0 === this.receiveShadow && (i.receiveShadow = !0), !1 === this.visible && (i.visible = !1), !1 === this.frustumCulled && (i.frustumCulled = !1), 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), "{}" !== JSON.stringify(this.userData) && (i.userData = this.userData), i.layers = this.layers.mask, i.matrix = this.matrix.toArray(), !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), this.isInstancedMesh && (i.type = "InstancedMesh", i.count = this.count, i.instanceMatrix = this.instanceMatrix.toJSON()), this.isMesh || this.isLine || this.isPoints) { - i.geometry = r(t.geometries, this.geometry); - const e = this.geometry.parameters; - if (void 0 !== e && void 0 !== e.shapes) { - const n = e.shapes; - if (Array.isArray(n)) - for (let e = 0, i = n.length; e < i; e++) { - const i = n[e]; - r(t.shapes, i) - } else r(t.shapes, n) - } - } - if (this.isSkinnedMesh && (i.bindMode = this.bindMode, i.bindMatrix = this.bindMatrix.toArray(), void 0 !== this.skeleton && (r(t.skeletons, this.skeleton), i.skeleton = this.skeleton.uuid)), void 0 !== this.material) - if (Array.isArray(this.material)) { - const e = []; - for (let n = 0, i = this.material.length; n < i; n++) e.push(r(t.materials, this.material[n])); - i.material = e - } else i.material = r(t.materials, this.material); - if (this.children.length > 0) { - i.children = []; - for (let e = 0; e < this.children.length; e++) i.children.push(this.children[e].toJSON(t).object) - } - if (this.animations.length > 0) { - i.animations = []; - for (let e = 0; e < this.animations.length; e++) { - const n = this.animations[e]; - i.animations.push(r(t.animations, n)) - } - } - if (e) { - const e = o(t.geometries), - i = o(t.materials), - r = o(t.textures), - s = o(t.images), - a = o(t.shapes), - l = o(t.skeletons), - c = o(t.animations); - e.length > 0 && (n.geometries = e), i.length > 0 && (n.materials = i), r.length > 0 && (n.textures = r), s.length > 0 && (n.images = s), a.length > 0 && (n.shapes = a), l.length > 0 && (n.skeletons = l), c.length > 0 && (n.animations = c) - } - return n.object = i, n; - - function o(t) { - const e = []; - for (const n in t) { - const i = t[n]; - delete i.metadata, e.push(i) - } - return e - } - }, - clone: function(t) { - return (new this.constructor).copy(this, t) - }, - copy: function(t, e = !0) { - if (this.name = t.name, this.up.copy(t.up), this.position.copy(t.position), this.rotation.order = t.rotation.order, this.quaternion.copy(t.quaternion), this.scale.copy(t.scale), this.matrix.copy(t.matrix), this.matrixWorld.copy(t.matrixWorld), this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrixWorldNeedsUpdate = t.matrixWorldNeedsUpdate, this.layers.mask = t.layers.mask, this.visible = t.visible, this.castShadow = t.castShadow, this.receiveShadow = t.receiveShadow, this.frustumCulled = t.frustumCulled, this.renderOrder = t.renderOrder, this.userData = JSON.parse(JSON.stringify(t.userData)), !0 === e) - for (let e = 0; e < t.children.length; e++) { - const n = t.children[e]; - this.add(n.clone()) - } - return this - } - }); - const Tt = new T, - Lt = new T, - Rt = new y; - class Ct { - constructor(t, e) { - Object.defineProperty(this, "isPlane", { - value: !0 - }), this.normal = void 0 !== t ? t : new T(1, 0, 0), this.constant = void 0 !== e ? e : 0 - } - set(t, e) { - return this.normal.copy(t), this.constant = e, this - } - setComponents(t, e, n, i) { - return this.normal.set(t, e, n), this.constant = i, this - } - setFromNormalAndCoplanarPoint(t, e) { - return this.normal.copy(t), this.constant = -e.dot(this.normal), this - } - setFromCoplanarPoints(t, e, n) { - const i = Tt.subVectors(n, e).cross(Lt.subVectors(t, e)).normalize(); - return this.setFromNormalAndCoplanarPoint(i, t), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.normal.copy(t.normal), this.constant = t.constant, this - } - normalize() { - const t = 1 / this.normal.length(); - return this.normal.multiplyScalar(t), this.constant *= t, this - } - negate() { - return this.constant *= -1, this.normal.negate(), this - } - distanceToPoint(t) { - return this.normal.dot(t) + this.constant - } - distanceToSphere(t) { - return this.distanceToPoint(t.center) - t.radius - } - projectPoint(t, e) { - return void 0 === e && (console.warn("THREE.Plane: .projectPoint() target is now required"), e = new T), e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t) - } - intersectLine(t, e) { - void 0 === e && (console.warn("THREE.Plane: .intersectLine() target is now required"), e = new T); - const n = t.delta(Tt), - i = this.normal.dot(n); - if (0 === i) return 0 === this.distanceToPoint(t.start) ? e.copy(t.start) : void 0; - const r = -(t.start.dot(this.normal) + this.constant) / i; - return r < 0 || r > 1 ? void 0 : e.copy(n).multiplyScalar(r).add(t.start) - } - intersectsLine(t) { - const e = this.distanceToPoint(t.start), - n = this.distanceToPoint(t.end); - return e < 0 && n > 0 || n < 0 && e > 0 - } - intersectsBox(t) { - return t.intersectsPlane(this) - } - intersectsSphere(t) { - return t.intersectsPlane(this) - } - coplanarPoint(t) { - return void 0 === t && (console.warn("THREE.Plane: .coplanarPoint() target is now required"), t = new T), t.copy(this.normal).multiplyScalar(-this.constant) - } - applyMatrix4(t, e) { - const n = e || Rt.getNormalMatrix(t), - i = this.coplanarPoint(Tt).applyMatrix4(t), - r = this.normal.applyMatrix3(n).normalize(); - return this.constant = -i.dot(r), this - } - translate(t) { - return this.constant -= t.dot(this.normal), this - } - equals(t) { - return t.normal.equals(this.normal) && t.constant === this.constant - } - } - const Pt = new T, - Dt = new T, - It = new T, - Ot = new T, - Nt = new T, - Bt = new T, - Ft = new T, - zt = new T, - Ut = new T, - Ht = new T; - class Gt { - constructor(t, e, n) { - this.a = void 0 !== t ? t : new T, this.b = void 0 !== e ? e : new T, this.c = void 0 !== n ? n : new T - } - static getNormal(t, e, n, i) { - void 0 === i && (console.warn("THREE.Triangle: .getNormal() target is now required"), i = new T), i.subVectors(n, e), Pt.subVectors(t, e), i.cross(Pt); - const r = i.lengthSq(); - return r > 0 ? i.multiplyScalar(1 / Math.sqrt(r)) : i.set(0, 0, 0) - } - static getBarycoord(t, e, n, i, r) { - Pt.subVectors(i, e), Dt.subVectors(n, e), It.subVectors(t, e); - const o = Pt.dot(Pt), - s = Pt.dot(Dt), - a = Pt.dot(It), - l = Dt.dot(Dt), - c = Dt.dot(It), - h = o * l - s * s; - if (void 0 === r && (console.warn("THREE.Triangle: .getBarycoord() target is now required"), r = new T), 0 === h) return r.set(-2, -1, -1); - const u = 1 / h, - d = (l * a - s * c) * u, - p = (o * c - s * a) * u; - return r.set(1 - d - p, p, d) - } - static containsPoint(t, e, n, i) { - return this.getBarycoord(t, e, n, i, Ot), Ot.x >= 0 && Ot.y >= 0 && Ot.x + Ot.y <= 1 - } - static getUV(t, e, n, i, r, o, s, a) { - return this.getBarycoord(t, e, n, i, Ot), a.set(0, 0), a.addScaledVector(r, Ot.x), a.addScaledVector(o, Ot.y), a.addScaledVector(s, Ot.z), a - } - static isFrontFacing(t, e, n, i) { - return Pt.subVectors(n, e), Dt.subVectors(t, e), Pt.cross(Dt).dot(i) < 0 - } - set(t, e, n) { - return this.a.copy(t), this.b.copy(e), this.c.copy(n), this - } - setFromPointsAndIndices(t, e, n, i) { - return this.a.copy(t[e]), this.b.copy(t[n]), this.c.copy(t[i]), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.a.copy(t.a), this.b.copy(t.b), this.c.copy(t.c), this - } - getArea() { - return Pt.subVectors(this.c, this.b), Dt.subVectors(this.a, this.b), .5 * Pt.cross(Dt).length() - } - getMidpoint(t) { - return void 0 === t && (console.warn("THREE.Triangle: .getMidpoint() target is now required"), t = new T), t.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3) - } - getNormal(t) { - return Gt.getNormal(this.a, this.b, this.c, t) - } - getPlane(t) { - return void 0 === t && (console.warn("THREE.Triangle: .getPlane() target is now required"), t = new Ct), t.setFromCoplanarPoints(this.a, this.b, this.c) - } - getBarycoord(t, e) { - return Gt.getBarycoord(t, this.a, this.b, this.c, e) - } - getUV(t, e, n, i, r) { - return Gt.getUV(t, this.a, this.b, this.c, e, n, i, r) - } - containsPoint(t) { - return Gt.containsPoint(t, this.a, this.b, this.c) - } - isFrontFacing(t) { - return Gt.isFrontFacing(this.a, this.b, this.c, t) - } - intersectsBox(t) { - return t.intersectsTriangle(this) - } - closestPointToPoint(t, e) { - void 0 === e && (console.warn("THREE.Triangle: .closestPointToPoint() target is now required"), e = new T); - const n = this.a, - i = this.b, - r = this.c; - let o, s; - Nt.subVectors(i, n), Bt.subVectors(r, n), zt.subVectors(t, n); - const a = Nt.dot(zt), - l = Bt.dot(zt); - if (a <= 0 && l <= 0) return e.copy(n); - Ut.subVectors(t, i); - const c = Nt.dot(Ut), - h = Bt.dot(Ut); - if (c >= 0 && h <= c) return e.copy(i); - const u = a * h - c * l; - if (u <= 0 && a >= 0 && c <= 0) return o = a / (a - c), e.copy(n).addScaledVector(Nt, o); - Ht.subVectors(t, r); - const d = Nt.dot(Ht), - p = Bt.dot(Ht); - if (p >= 0 && d <= p) return e.copy(r); - const f = d * l - a * p; - if (f <= 0 && l >= 0 && p <= 0) return s = l / (l - p), e.copy(n).addScaledVector(Bt, s); - const m = c * p - d * h; - if (m <= 0 && h - c >= 0 && d - p >= 0) return Ft.subVectors(r, i), s = (h - c) / (h - c + (d - p)), e.copy(i).addScaledVector(Ft, s); - const g = 1 / (m + f + u); - return o = f * g, s = u * g, e.copy(n).addScaledVector(Nt, o).addScaledVector(Bt, s) - } - equals(t) { - return t.a.equals(this.a) && t.b.equals(this.b) && t.c.equals(this.c) - } - } - const Vt = { - aliceblue: 15792383, - antiquewhite: 16444375, - aqua: 65535, - aquamarine: 8388564, - azure: 15794175, - beige: 16119260, - bisque: 16770244, - black: 0, - blanchedalmond: 16772045, - blue: 255, - blueviolet: 9055202, - brown: 10824234, - burlywood: 14596231, - cadetblue: 6266528, - chartreuse: 8388352, - chocolate: 13789470, - coral: 16744272, - cornflowerblue: 6591981, - cornsilk: 16775388, - crimson: 14423100, - cyan: 65535, - darkblue: 139, - darkcyan: 35723, - darkgoldenrod: 12092939, - darkgray: 11119017, - darkgreen: 25600, - darkgrey: 11119017, - darkkhaki: 12433259, - darkmagenta: 9109643, - darkolivegreen: 5597999, - darkorange: 16747520, - darkorchid: 10040012, - darkred: 9109504, - darksalmon: 15308410, - darkseagreen: 9419919, - darkslateblue: 4734347, - darkslategray: 3100495, - darkslategrey: 3100495, - darkturquoise: 52945, - darkviolet: 9699539, - deeppink: 16716947, - deepskyblue: 49151, - dimgray: 6908265, - dimgrey: 6908265, - dodgerblue: 2003199, - firebrick: 11674146, - floralwhite: 16775920, - forestgreen: 2263842, - fuchsia: 16711935, - gainsboro: 14474460, - ghostwhite: 16316671, - gold: 16766720, - goldenrod: 14329120, - gray: 8421504, - green: 32768, - greenyellow: 11403055, - grey: 8421504, - honeydew: 15794160, - hotpink: 16738740, - indianred: 13458524, - indigo: 4915330, - ivory: 16777200, - khaki: 15787660, - lavender: 15132410, - lavenderblush: 16773365, - lawngreen: 8190976, - lemonchiffon: 16775885, - lightblue: 11393254, - lightcoral: 15761536, - lightcyan: 14745599, - lightgoldenrodyellow: 16448210, - lightgray: 13882323, - lightgreen: 9498256, - lightgrey: 13882323, - lightpink: 16758465, - lightsalmon: 16752762, - lightseagreen: 2142890, - lightskyblue: 8900346, - lightslategray: 7833753, - lightslategrey: 7833753, - lightsteelblue: 11584734, - lightyellow: 16777184, - lime: 65280, - limegreen: 3329330, - linen: 16445670, - magenta: 16711935, - maroon: 8388608, - mediumaquamarine: 6737322, - mediumblue: 205, - mediumorchid: 12211667, - mediumpurple: 9662683, - mediumseagreen: 3978097, - mediumslateblue: 8087790, - mediumspringgreen: 64154, - mediumturquoise: 4772300, - mediumvioletred: 13047173, - midnightblue: 1644912, - mintcream: 16121850, - mistyrose: 16770273, - moccasin: 16770229, - navajowhite: 16768685, - navy: 128, - oldlace: 16643558, - olive: 8421376, - olivedrab: 7048739, - orange: 16753920, - orangered: 16729344, - orchid: 14315734, - palegoldenrod: 15657130, - palegreen: 10025880, - paleturquoise: 11529966, - palevioletred: 14381203, - papayawhip: 16773077, - peachpuff: 16767673, - peru: 13468991, - pink: 16761035, - plum: 14524637, - powderblue: 11591910, - purple: 8388736, - rebeccapurple: 6697881, - red: 16711680, - rosybrown: 12357519, - royalblue: 4286945, - saddlebrown: 9127187, - salmon: 16416882, - sandybrown: 16032864, - seagreen: 3050327, - seashell: 16774638, - sienna: 10506797, - silver: 12632256, - skyblue: 8900331, - slateblue: 6970061, - slategray: 7372944, - slategrey: 7372944, - snow: 16775930, - springgreen: 65407, - steelblue: 4620980, - tan: 13808780, - teal: 32896, - thistle: 14204888, - tomato: 16737095, - turquoise: 4251856, - violet: 15631086, - wheat: 16113331, - white: 16777215, - whitesmoke: 16119285, - yellow: 16776960, - yellowgreen: 10145074 - }, - kt = { - h: 0, - s: 0, - l: 0 - }, - Wt = { - h: 0, - s: 0, - l: 0 - }; - - function jt(t, e, n) { - return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? t + 6 * (e - t) * n : n < .5 ? e : n < 2 / 3 ? t + 6 * (e - t) * (2 / 3 - n) : t - } - - function Xt(t) { - return t < .04045 ? .0773993808 * t : Math.pow(.9478672986 * t + .0521327014, 2.4) - } - - function qt(t) { - return t < .0031308 ? 12.92 * t : 1.055 * Math.pow(t, .41666) - .055 - } - class Yt { - constructor(t, e, n) { - return Object.defineProperty(this, "isColor", { - value: !0 - }), void 0 === e && void 0 === n ? this.set(t) : this.setRGB(t, e, n) - } - set(t) { - return t && t.isColor ? this.copy(t) : "number" == typeof t ? this.setHex(t) : "string" == typeof t && this.setStyle(t), this - } - setScalar(t) { - return this.r = t, this.g = t, this.b = t, this - } - setHex(t) { - return t = Math.floor(t), this.r = (t >> 16 & 255) / 255, this.g = (t >> 8 & 255) / 255, this.b = (255 & t) / 255, this - } - setRGB(t, e, n) { - return this.r = t, this.g = e, this.b = n, this - } - setHSL(t, e, n) { - if (t = g.euclideanModulo(t, 1), e = g.clamp(e, 0, 1), n = g.clamp(n, 0, 1), 0 === e) this.r = this.g = this.b = n; - else { - const i = n <= .5 ? n * (1 + e) : n + e - n * e, - r = 2 * n - i; - this.r = jt(r, i, t + 1 / 3), this.g = jt(r, i, t), this.b = jt(r, i, t - 1 / 3) - } - return this - } - setStyle(t) { - function e(e) { - void 0 !== e && parseFloat(e) < 1 && console.warn("THREE.Color: Alpha component of " + t + " will be ignored.") - } - let n; - if (n = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)) { - let t; - const i = n[1], - r = n[2]; - switch (i) { - case "rgb": - case "rgba": - if (t = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) return this.r = Math.min(255, parseInt(t[1], 10)) / 255, this.g = Math.min(255, parseInt(t[2], 10)) / 255, this.b = Math.min(255, parseInt(t[3], 10)) / 255, e(t[4]), this; - if (t = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) return this.r = Math.min(100, parseInt(t[1], 10)) / 100, this.g = Math.min(100, parseInt(t[2], 10)) / 100, this.b = Math.min(100, parseInt(t[3], 10)) / 100, e(t[4]), this; - break; - case "hsl": - case "hsla": - if (t = /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) { - const n = parseFloat(t[1]) / 360, - i = parseInt(t[2], 10) / 100, - r = parseInt(t[3], 10) / 100; - return e(t[4]), this.setHSL(n, i, r) - } - } - } else if (n = /^\#([A-Fa-f\d]+)$/.exec(t)) { - const t = n[1], - e = t.length; - if (3 === e) return this.r = parseInt(t.charAt(0) + t.charAt(0), 16) / 255, this.g = parseInt(t.charAt(1) + t.charAt(1), 16) / 255, this.b = parseInt(t.charAt(2) + t.charAt(2), 16) / 255, this; - if (6 === e) return this.r = parseInt(t.charAt(0) + t.charAt(1), 16) / 255, this.g = parseInt(t.charAt(2) + t.charAt(3), 16) / 255, this.b = parseInt(t.charAt(4) + t.charAt(5), 16) / 255, this - } - return t && t.length > 0 ? this.setColorName(t) : this - } - setColorName(t) { - const e = Vt[t]; - return void 0 !== e ? this.setHex(e) : console.warn("THREE.Color: Unknown color " + t), this - } - clone() { - return new this.constructor(this.r, this.g, this.b) - } - copy(t) { - return this.r = t.r, this.g = t.g, this.b = t.b, this - } - copyGammaToLinear(t, e = 2) { - return this.r = Math.pow(t.r, e), this.g = Math.pow(t.g, e), this.b = Math.pow(t.b, e), this - } - copyLinearToGamma(t, e = 2) { - const n = e > 0 ? 1 / e : 1; - return this.r = Math.pow(t.r, n), this.g = Math.pow(t.g, n), this.b = Math.pow(t.b, n), this - } - convertGammaToLinear(t) { - return this.copyGammaToLinear(this, t), this - } - convertLinearToGamma(t) { - return this.copyLinearToGamma(this, t), this - } - copySRGBToLinear(t) { - return this.r = Xt(t.r), this.g = Xt(t.g), this.b = Xt(t.b), this - } - copyLinearToSRGB(t) { - return this.r = qt(t.r), this.g = qt(t.g), this.b = qt(t.b), this - } - convertSRGBToLinear() { - return this.copySRGBToLinear(this), this - } - convertLinearToSRGB() { - return this.copyLinearToSRGB(this), this - } - getHex() { - return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0 - } - getHexString() { - return ("000000" + this.getHex().toString(16)).slice(-6) - } - getHSL(t) { - void 0 === t && (console.warn("THREE.Color: .getHSL() target is now required"), t = { - h: 0, - s: 0, - l: 0 - }); - const e = this.r, - n = this.g, - i = this.b, - r = Math.max(e, n, i), - o = Math.min(e, n, i); - let s, a; - const l = (o + r) / 2; - if (o === r) s = 0, a = 0; - else { - const t = r - o; - switch (a = l <= .5 ? t / (r + o) : t / (2 - r - o), r) { - case e: - s = (n - i) / t + (n < i ? 6 : 0); - break; - case n: - s = (i - e) / t + 2; - break; - case i: - s = (e - n) / t + 4 - } - s /= 6 - } - return t.h = s, t.s = a, t.l = l, t - } - getStyle() { - return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" - } - offsetHSL(t, e, n) { - return this.getHSL(kt), kt.h += t, kt.s += e, kt.l += n, this.setHSL(kt.h, kt.s, kt.l), this - } - add(t) { - return this.r += t.r, this.g += t.g, this.b += t.b, this - } - addColors(t, e) { - return this.r = t.r + e.r, this.g = t.g + e.g, this.b = t.b + e.b, this - } - addScalar(t) { - return this.r += t, this.g += t, this.b += t, this - } - sub(t) { - return this.r = Math.max(0, this.r - t.r), this.g = Math.max(0, this.g - t.g), this.b = Math.max(0, this.b - t.b), this - } - multiply(t) { - return this.r *= t.r, this.g *= t.g, this.b *= t.b, this - } - multiplyScalar(t) { - return this.r *= t, this.g *= t, this.b *= t, this - } - lerp(t, e) { - return this.r += (t.r - this.r) * e, this.g += (t.g - this.g) * e, this.b += (t.b - this.b) * e, this - } - lerpColors(t, e, n) { - return this.r = t.r + (e.r - t.r) * n, this.g = t.g + (e.g - t.g) * n, this.b = t.b + (e.b - t.b) * n, this - } - lerpHSL(t, e) { - this.getHSL(kt), t.getHSL(Wt); - const n = g.lerp(kt.h, Wt.h, e), - i = g.lerp(kt.s, Wt.s, e), - r = g.lerp(kt.l, Wt.l, e); - return this.setHSL(n, i, r), this - } - equals(t) { - return t.r === this.r && t.g === this.g && t.b === this.b - } - fromArray(t, e = 0) { - return this.r = t[e], this.g = t[e + 1], this.b = t[e + 2], this - } - toArray(t = [], e = 0) { - return t[e] = this.r, t[e + 1] = this.g, t[e + 2] = this.b, t - } - fromBufferAttribute(t, e) { - return this.r = t.getX(e), this.g = t.getY(e), this.b = t.getZ(e), !0 === t.normalized && (this.r /= 255, this.g /= 255, this.b /= 255), this - } - toJSON() { - return this.getHex() - } - } - Yt.NAMES = Vt, Yt.prototype.r = 1, Yt.prototype.g = 1, Yt.prototype.b = 1; - class Qt { - constructor(t, e, n, i, r, o = 0) { - this.a = t, this.b = e, this.c = n, this.normal = i && i.isVector3 ? i : new T, this.vertexNormals = Array.isArray(i) ? i : [], this.color = r && r.isColor ? r : new Yt, this.vertexColors = Array.isArray(r) ? r : [], this.materialIndex = o - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - this.a = t.a, this.b = t.b, this.c = t.c, this.normal.copy(t.normal), this.color.copy(t.color), this.materialIndex = t.materialIndex; - for (let e = 0, n = t.vertexNormals.length; e < n; e++) this.vertexNormals[e] = t.vertexNormals[e].clone(); - for (let e = 0, n = t.vertexColors.length; e < n; e++) this.vertexColors[e] = t.vertexColors[e].clone(); - return this - } - } - let Zt = 0; - - function Jt() { - Object.defineProperty(this, "id", { - value: Zt++ - }), this.uuid = g.generateUUID(), this.name = "", this.type = "Material", this.fog = !0, this.blending = 1, this.side = 0, this.flatShading = !1, this.vertexColors = !1, this.opacity = 1, this.transparent = !1, this.blendSrc = 204, this.blendDst = 205, this.blendEquation = 100, this.blendSrcAlpha = null, this.blendDstAlpha = null, this.blendEquationAlpha = null, this.depthFunc = 3, this.depthTest = !0, this.depthWrite = !0, this.stencilWriteMask = 255, this.stencilFunc = 519, this.stencilRef = 0, this.stencilFuncMask = 255, this.stencilFail = 7680, this.stencilZFail = 7680, this.stencilZPass = 7680, this.stencilWrite = !1, this.clippingPlanes = null, this.clipIntersection = !1, this.clipShadows = !1, this.shadowSide = null, this.colorWrite = !0, this.precision = null, this.polygonOffset = !1, this.polygonOffsetFactor = 0, this.polygonOffsetUnits = 0, this.dithering = !1, this.alphaTest = 0, this.premultipliedAlpha = !1, this.visible = !0, this.toneMapped = !0, this.userData = {}, this.version = 0 - } - - function Kt(t) { - Jt.call(this), this.type = "MeshBasicMaterial", this.color = new Yt(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.setValues(t) - } - Jt.prototype = Object.assign(Object.create(p.prototype), { - constructor: Jt, - isMaterial: !0, - onBeforeCompile: function() {}, - customProgramCacheKey: function() { - return this.onBeforeCompile.toString() - }, - setValues: function(t) { - if (void 0 !== t) - for (const e in t) { - const n = t[e]; - if (void 0 === n) { - console.warn("THREE.Material: '" + e + "' parameter is undefined."); - continue - } - if ("shading" === e) { - console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === n; - continue - } - const i = this[e]; - void 0 !== i ? i && i.isColor ? i.set(n) : i && i.isVector3 && n && n.isVector3 ? i.copy(n) : this[e] = n : console.warn("THREE." + this.type + ": '" + e + "' is not a property of this material.") - } - }, - toJSON: function(t) { - const e = void 0 === t || "string" == typeof t; - e && (t = { - textures: {}, - images: {} - }); - const n = { - metadata: { - version: 4.5, - type: "Material", - generator: "Material.toJSON" - } - }; - - function i(t) { - const e = []; - for (const n in t) { - const i = t[n]; - delete i.metadata, e.push(i) - } - return e - } - if (n.uuid = this.uuid, n.type = this.type, "" !== this.name && (n.name = this.name), this.color && this.color.isColor && (n.color = this.color.getHex()), void 0 !== this.roughness && (n.roughness = this.roughness), void 0 !== this.metalness && (n.metalness = this.metalness), this.sheen && this.sheen.isColor && (n.sheen = this.sheen.getHex()), this.emissive && this.emissive.isColor && (n.emissive = this.emissive.getHex()), this.emissiveIntensity && 1 !== this.emissiveIntensity && (n.emissiveIntensity = this.emissiveIntensity), this.specular && this.specular.isColor && (n.specular = this.specular.getHex()), void 0 !== this.shininess && (n.shininess = this.shininess), void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat), void 0 !== this.clearcoatRoughness && (n.clearcoatRoughness = this.clearcoatRoughness), this.clearcoatMap && this.clearcoatMap.isTexture && (n.clearcoatMap = this.clearcoatMap.toJSON(t).uuid), this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture && (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(t).uuid), this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(t).uuid, n.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), this.map && this.map.isTexture && (n.map = this.map.toJSON(t).uuid), this.matcap && this.matcap.isTexture && (n.matcap = this.matcap.toJSON(t).uuid), this.alphaMap && this.alphaMap.isTexture && (n.alphaMap = this.alphaMap.toJSON(t).uuid), this.lightMap && this.lightMap.isTexture && (n.lightMap = this.lightMap.toJSON(t).uuid), this.aoMap && this.aoMap.isTexture && (n.aoMap = this.aoMap.toJSON(t).uuid, n.aoMapIntensity = this.aoMapIntensity), this.bumpMap && this.bumpMap.isTexture && (n.bumpMap = this.bumpMap.toJSON(t).uuid, n.bumpScale = this.bumpScale), this.normalMap && this.normalMap.isTexture && (n.normalMap = this.normalMap.toJSON(t).uuid, n.normalMapType = this.normalMapType, n.normalScale = this.normalScale.toArray()), this.displacementMap && this.displacementMap.isTexture && (n.displacementMap = this.displacementMap.toJSON(t).uuid, n.displacementScale = this.displacementScale, n.displacementBias = this.displacementBias), this.roughnessMap && this.roughnessMap.isTexture && (n.roughnessMap = this.roughnessMap.toJSON(t).uuid), this.metalnessMap && this.metalnessMap.isTexture && (n.metalnessMap = this.metalnessMap.toJSON(t).uuid), this.emissiveMap && this.emissiveMap.isTexture && (n.emissiveMap = this.emissiveMap.toJSON(t).uuid), this.specularMap && this.specularMap.isTexture && (n.specularMap = this.specularMap.toJSON(t).uuid), this.envMap && this.envMap.isTexture && (n.envMap = this.envMap.toJSON(t).uuid, n.reflectivity = this.reflectivity, n.refractionRatio = this.refractionRatio, void 0 !== this.combine && (n.combine = this.combine), void 0 !== this.envMapIntensity && (n.envMapIntensity = this.envMapIntensity)), this.gradientMap && this.gradientMap.isTexture && (n.gradientMap = this.gradientMap.toJSON(t).uuid), void 0 !== this.size && (n.size = this.size), void 0 !== this.sizeAttenuation && (n.sizeAttenuation = this.sizeAttenuation), 1 !== this.blending && (n.blending = this.blending), !0 === this.flatShading && (n.flatShading = this.flatShading), 0 !== this.side && (n.side = this.side), this.vertexColors && (n.vertexColors = !0), this.opacity < 1 && (n.opacity = this.opacity), !0 === this.transparent && (n.transparent = this.transparent), n.depthFunc = this.depthFunc, n.depthTest = this.depthTest, n.depthWrite = this.depthWrite, n.stencilWrite = this.stencilWrite, n.stencilWriteMask = this.stencilWriteMask, n.stencilFunc = this.stencilFunc, n.stencilRef = this.stencilRef, n.stencilFuncMask = this.stencilFuncMask, n.stencilFail = this.stencilFail, n.stencilZFail = this.stencilZFail, n.stencilZPass = this.stencilZPass, this.rotation && 0 !== this.rotation && (n.rotation = this.rotation), !0 === this.polygonOffset && (n.polygonOffset = !0), 0 !== this.polygonOffsetFactor && (n.polygonOffsetFactor = this.polygonOffsetFactor), 0 !== this.polygonOffsetUnits && (n.polygonOffsetUnits = this.polygonOffsetUnits), this.linewidth && 1 !== this.linewidth && (n.linewidth = this.linewidth), void 0 !== this.dashSize && (n.dashSize = this.dashSize), void 0 !== this.gapSize && (n.gapSize = this.gapSize), void 0 !== this.scale && (n.scale = this.scale), !0 === this.dithering && (n.dithering = !0), this.alphaTest > 0 && (n.alphaTest = this.alphaTest), !0 === this.premultipliedAlpha && (n.premultipliedAlpha = this.premultipliedAlpha), !0 === this.wireframe && (n.wireframe = this.wireframe), this.wireframeLinewidth > 1 && (n.wireframeLinewidth = this.wireframeLinewidth), "round" !== this.wireframeLinecap && (n.wireframeLinecap = this.wireframeLinecap), "round" !== this.wireframeLinejoin && (n.wireframeLinejoin = this.wireframeLinejoin), !0 === this.morphTargets && (n.morphTargets = !0), !0 === this.morphNormals && (n.morphNormals = !0), !0 === this.skinning && (n.skinning = !0), !1 === this.visible && (n.visible = !1), !1 === this.toneMapped && (n.toneMapped = !1), "{}" !== JSON.stringify(this.userData) && (n.userData = this.userData), e) { - const e = i(t.textures), - r = i(t.images); - e.length > 0 && (n.textures = e), r.length > 0 && (n.images = r) - } - return n - }, - clone: function() { - return (new this.constructor).copy(this) - }, - copy: function(t) { - this.name = t.name, this.fog = t.fog, this.blending = t.blending, this.side = t.side, this.flatShading = t.flatShading, this.vertexColors = t.vertexColors, this.opacity = t.opacity, this.transparent = t.transparent, this.blendSrc = t.blendSrc, this.blendDst = t.blendDst, this.blendEquation = t.blendEquation, this.blendSrcAlpha = t.blendSrcAlpha, this.blendDstAlpha = t.blendDstAlpha, this.blendEquationAlpha = t.blendEquationAlpha, this.depthFunc = t.depthFunc, this.depthTest = t.depthTest, this.depthWrite = t.depthWrite, this.stencilWriteMask = t.stencilWriteMask, this.stencilFunc = t.stencilFunc, this.stencilRef = t.stencilRef, this.stencilFuncMask = t.stencilFuncMask, this.stencilFail = t.stencilFail, this.stencilZFail = t.stencilZFail, this.stencilZPass = t.stencilZPass, this.stencilWrite = t.stencilWrite; - const e = t.clippingPlanes; - let n = null; - if (null !== e) { - const t = e.length; - n = new Array(t); - for (let i = 0; i !== t; ++i) n[i] = e[i].clone() - } - return this.clippingPlanes = n, this.clipIntersection = t.clipIntersection, this.clipShadows = t.clipShadows, this.shadowSide = t.shadowSide, this.colorWrite = t.colorWrite, this.precision = t.precision, this.polygonOffset = t.polygonOffset, this.polygonOffsetFactor = t.polygonOffsetFactor, this.polygonOffsetUnits = t.polygonOffsetUnits, this.dithering = t.dithering, this.alphaTest = t.alphaTest, this.premultipliedAlpha = t.premultipliedAlpha, this.visible = t.visible, this.toneMapped = t.toneMapped, this.userData = JSON.parse(JSON.stringify(t.userData)), this - }, - dispose: function() { - this.dispatchEvent({ - type: "dispose" - }) - } - }), Object.defineProperty(Jt.prototype, "needsUpdate", { - set: function(t) { - !0 === t && this.version++ - } - }), Kt.prototype = Object.create(Jt.prototype), Kt.prototype.constructor = Kt, Kt.prototype.isMeshBasicMaterial = !0, Kt.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this - }; - const $t = new T, - te = new v; - - function ee(t, e, n) { - if (Array.isArray(t)) throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); - this.name = "", this.array = t, this.itemSize = e, this.count = void 0 !== t ? t.length / e : 0, this.normalized = !0 === n, this.usage = 35044, this.updateRange = { - offset: 0, - count: -1 - }, this.version = 0 - } - - function ne(t, e, n) { - ee.call(this, new Int8Array(t), e, n) - } - - function ie(t, e, n) { - ee.call(this, new Uint8Array(t), e, n) - } - - function re(t, e, n) { - ee.call(this, new Uint8ClampedArray(t), e, n) - } - - function oe(t, e, n) { - ee.call(this, new Int16Array(t), e, n) - } - - function se(t, e, n) { - ee.call(this, new Uint16Array(t), e, n) - } - - function ae(t, e, n) { - ee.call(this, new Int32Array(t), e, n) - } - - function le(t, e, n) { - ee.call(this, new Uint32Array(t), e, n) - } - - function ce(t, e, n) { - ee.call(this, new Uint16Array(t), e, n) - } - - function he(t, e, n) { - ee.call(this, new Float32Array(t), e, n) - } - - function ue(t, e, n) { - ee.call(this, new Float64Array(t), e, n) - } - - function de(t) { - if (0 === t.length) return -1 / 0; - let e = t[0]; - for (let n = 1, i = t.length; n < i; ++n) t[n] > e && (e = t[n]); - return e - } - Object.defineProperty(ee.prototype, "needsUpdate", { - set: function(t) { - !0 === t && this.version++ - } - }), Object.assign(ee.prototype, { - isBufferAttribute: !0, - onUploadCallback: function() {}, - setUsage: function(t) { - return this.usage = t, this - }, - copy: function(t) { - return this.name = t.name, this.array = new t.array.constructor(t.array), this.itemSize = t.itemSize, this.count = t.count, this.normalized = t.normalized, this.usage = t.usage, this - }, - copyAt: function(t, e, n) { - t *= this.itemSize, n *= e.itemSize; - for (let i = 0, r = this.itemSize; i < r; i++) this.array[t + i] = e.array[n + i]; - return this - }, - copyArray: function(t) { - return this.array.set(t), this - }, - copyColorsArray: function(t) { - const e = this.array; - let n = 0; - for (let i = 0, r = t.length; i < r; i++) { - let r = t[i]; - void 0 === r && (console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined", i), r = new Yt), e[n++] = r.r, e[n++] = r.g, e[n++] = r.b - } - return this - }, - copyVector2sArray: function(t) { - const e = this.array; - let n = 0; - for (let i = 0, r = t.length; i < r; i++) { - let r = t[i]; - void 0 === r && (console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined", i), r = new v), e[n++] = r.x, e[n++] = r.y - } - return this - }, - copyVector3sArray: function(t) { - const e = this.array; - let n = 0; - for (let i = 0, r = t.length; i < r; i++) { - let r = t[i]; - void 0 === r && (console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined", i), r = new T), e[n++] = r.x, e[n++] = r.y, e[n++] = r.z - } - return this - }, - copyVector4sArray: function(t) { - const e = this.array; - let n = 0; - for (let i = 0, r = t.length; i < r; i++) { - let r = t[i]; - void 0 === r && (console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined", i), r = new M), e[n++] = r.x, e[n++] = r.y, e[n++] = r.z, e[n++] = r.w - } - return this - }, - applyMatrix3: function(t) { - if (2 === this.itemSize) - for (let e = 0, n = this.count; e < n; e++) te.fromBufferAttribute(this, e), te.applyMatrix3(t), this.setXY(e, te.x, te.y); - else if (3 === this.itemSize) - for (let e = 0, n = this.count; e < n; e++) $t.fromBufferAttribute(this, e), $t.applyMatrix3(t), this.setXYZ(e, $t.x, $t.y, $t.z); - return this - }, - applyMatrix4: function(t) { - for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.applyMatrix4(t), this.setXYZ(e, $t.x, $t.y, $t.z); - return this - }, - applyNormalMatrix: function(t) { - for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.applyNormalMatrix(t), this.setXYZ(e, $t.x, $t.y, $t.z); - return this - }, - transformDirection: function(t) { - for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.transformDirection(t), this.setXYZ(e, $t.x, $t.y, $t.z); - return this - }, - set: function(t, e = 0) { - return this.array.set(t, e), this - }, - getX: function(t) { - return this.array[t * this.itemSize] - }, - setX: function(t, e) { - return this.array[t * this.itemSize] = e, this - }, - getY: function(t) { - return this.array[t * this.itemSize + 1] - }, - setY: function(t, e) { - return this.array[t * this.itemSize + 1] = e, this - }, - getZ: function(t) { - return this.array[t * this.itemSize + 2] - }, - setZ: function(t, e) { - return this.array[t * this.itemSize + 2] = e, this - }, - getW: function(t) { - return this.array[t * this.itemSize + 3] - }, - setW: function(t, e) { - return this.array[t * this.itemSize + 3] = e, this - }, - setXY: function(t, e, n) { - return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this - }, - setXYZ: function(t, e, n, i) { - return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this - }, - setXYZW: function(t, e, n, i, r) { - return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this.array[t + 3] = r, this - }, - onUpload: function(t) { - return this.onUploadCallback = t, this - }, - clone: function() { - return new this.constructor(this.array, this.itemSize).copy(this) - }, - toJSON: function() { - return { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: Array.prototype.slice.call(this.array), - normalized: this.normalized - } - } - }), ne.prototype = Object.create(ee.prototype), ne.prototype.constructor = ne, ie.prototype = Object.create(ee.prototype), ie.prototype.constructor = ie, re.prototype = Object.create(ee.prototype), re.prototype.constructor = re, oe.prototype = Object.create(ee.prototype), oe.prototype.constructor = oe, se.prototype = Object.create(ee.prototype), se.prototype.constructor = se, ae.prototype = Object.create(ee.prototype), ae.prototype.constructor = ae, le.prototype = Object.create(ee.prototype), le.prototype.constructor = le, ce.prototype = Object.create(ee.prototype), ce.prototype.constructor = ce, ce.prototype.isFloat16BufferAttribute = !0, he.prototype = Object.create(ee.prototype), he.prototype.constructor = he, ue.prototype = Object.create(ee.prototype), ue.prototype.constructor = ue; - const pe = { - Int8Array: Int8Array, - Uint8Array: Uint8Array, - Uint8ClampedArray: "undefined" != typeof Uint8ClampedArray ? Uint8ClampedArray : Uint8Array, - Int16Array: Int16Array, - Uint16Array: Uint16Array, - Int32Array: Int32Array, - Uint32Array: Uint32Array, - Float32Array: Float32Array, - Float64Array: Float64Array - }; - - function fe(t, e) { - return new pe[t](e) - } - let me = 0; - const ge = new et, - ve = new St, - ye = new T, - Ae = new C, - xe = new C, - _e = new T; - - function be() { - Object.defineProperty(this, "id", { - value: me++ - }), this.uuid = g.generateUUID(), this.name = "", this.type = "BufferGeometry", this.index = null, this.attributes = {}, this.morphAttributes = {}, this.morphTargetsRelative = !1, this.groups = [], this.boundingBox = null, this.boundingSphere = null, this.drawRange = { - start: 0, - count: 1 / 0 - }, this.userData = {} - } - be.prototype = Object.assign(Object.create(p.prototype), { - constructor: be, - isBufferGeometry: !0, - getIndex: function() { - return this.index - }, - setIndex: function(t) { - return Array.isArray(t) ? this.index = new(de(t) > 65535 ? le : se)(t, 1) : this.index = t, this - }, - getAttribute: function(t) { - return this.attributes[t] - }, - setAttribute: function(t, e) { - return this.attributes[t] = e, this - }, - deleteAttribute: function(t) { - return delete this.attributes[t], this - }, - hasAttribute: function(t) { - return void 0 !== this.attributes[t] - }, - addGroup: function(t, e, n = 0) { - this.groups.push({ - start: t, - count: e, - materialIndex: n - }) - }, - clearGroups: function() { - this.groups = [] - }, - setDrawRange: function(t, e) { - this.drawRange.start = t, this.drawRange.count = e - }, - applyMatrix4: function(t) { - const e = this.attributes.position; - void 0 !== e && (e.applyMatrix4(t), e.needsUpdate = !0); - const n = this.attributes.normal; - if (void 0 !== n) { - const e = (new y).getNormalMatrix(t); - n.applyNormalMatrix(e), n.needsUpdate = !0 - } - const i = this.attributes.tangent; - return void 0 !== i && (i.transformDirection(t), i.needsUpdate = !0), null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this - }, - rotateX: function(t) { - return ge.makeRotationX(t), this.applyMatrix4(ge), this - }, - rotateY: function(t) { - return ge.makeRotationY(t), this.applyMatrix4(ge), this - }, - rotateZ: function(t) { - return ge.makeRotationZ(t), this.applyMatrix4(ge), this - }, - translate: function(t, e, n) { - return ge.makeTranslation(t, e, n), this.applyMatrix4(ge), this - }, - scale: function(t, e, n) { - return ge.makeScale(t, e, n), this.applyMatrix4(ge), this - }, - lookAt: function(t) { - return ve.lookAt(t), ve.updateMatrix(), this.applyMatrix4(ve.matrix), this - }, - center: function() { - return this.computeBoundingBox(), this.boundingBox.getCenter(ye).negate(), this.translate(ye.x, ye.y, ye.z), this - }, - setFromPoints: function(t) { - const e = []; - for (let n = 0, i = t.length; n < i; n++) { - const i = t[n]; - e.push(i.x, i.y, i.z || 0) - } - return this.setAttribute("position", new he(e, 3)), this - }, - computeBoundingBox: function() { - null === this.boundingBox && (this.boundingBox = new C); - const t = this.attributes.position, - e = this.morphAttributes.position; - if (t && t.isGLBufferAttribute) return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this), void this.boundingBox.set(new T(-1 / 0, -1 / 0, -1 / 0), new T(1 / 0, 1 / 0, 1 / 0)); - if (void 0 !== t) { - if (this.boundingBox.setFromBufferAttribute(t), e) - for (let t = 0, n = e.length; t < n; t++) { - const n = e[t]; - Ae.setFromBufferAttribute(n), this.morphTargetsRelative ? (_e.addVectors(this.boundingBox.min, Ae.min), this.boundingBox.expandByPoint(_e), _e.addVectors(this.boundingBox.max, Ae.max), this.boundingBox.expandByPoint(_e)) : (this.boundingBox.expandByPoint(Ae.min), this.boundingBox.expandByPoint(Ae.max)) - } - } else 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() { - null === this.boundingSphere && (this.boundingSphere = new X); - const t = this.attributes.position, - e = this.morphAttributes.position; - if (t && t.isGLBufferAttribute) return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this), void this.boundingSphere.set(new T, 1 / 0); - if (t) { - const n = this.boundingSphere.center; - if (Ae.setFromBufferAttribute(t), e) - for (let t = 0, n = e.length; t < n; t++) { - const n = e[t]; - xe.setFromBufferAttribute(n), this.morphTargetsRelative ? (_e.addVectors(Ae.min, xe.min), Ae.expandByPoint(_e), _e.addVectors(Ae.max, xe.max), Ae.expandByPoint(_e)) : (Ae.expandByPoint(xe.min), Ae.expandByPoint(xe.max)) - } - Ae.getCenter(n); - let i = 0; - for (let e = 0, r = t.count; e < r; e++) _e.fromBufferAttribute(t, e), i = Math.max(i, n.distanceToSquared(_e)); - if (e) - for (let r = 0, o = e.length; r < o; r++) { - const o = e[r], - s = this.morphTargetsRelative; - for (let e = 0, r = o.count; e < r; e++) _e.fromBufferAttribute(o, e), s && (ye.fromBufferAttribute(t, e), _e.add(ye)), i = Math.max(i, n.distanceToSquared(_e)) - } - this.boundingSphere.radius = Math.sqrt(i), 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() {}, - computeTangents: function() { - const t = this.index, - e = this.attributes; - if (null === t || void 0 === e.position || void 0 === e.normal || void 0 === e.uv) return void console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)"); - const n = t.array, - i = e.position.array, - r = e.normal.array, - o = e.uv.array, - s = i.length / 3; - void 0 === e.tangent && this.setAttribute("tangent", new ee(new Float32Array(4 * s), 4)); - const a = e.tangent.array, - l = [], - c = []; - for (let t = 0; t < s; t++) l[t] = new T, c[t] = new T; - const h = new T, - u = new T, - d = new T, - p = new v, - f = new v, - m = new v, - g = new T, - y = new T; - - function A(t, e, n) { - h.fromArray(i, 3 * t), u.fromArray(i, 3 * e), d.fromArray(i, 3 * n), p.fromArray(o, 2 * t), f.fromArray(o, 2 * e), m.fromArray(o, 2 * n), u.sub(h), d.sub(h), f.sub(p), m.sub(p); - const r = 1 / (f.x * m.y - m.x * f.y); - isFinite(r) && (g.copy(u).multiplyScalar(m.y).addScaledVector(d, -f.y).multiplyScalar(r), y.copy(d).multiplyScalar(f.x).addScaledVector(u, -m.x).multiplyScalar(r), l[t].add(g), l[e].add(g), l[n].add(g), c[t].add(y), c[e].add(y), c[n].add(y)) - } - let x = this.groups; - 0 === x.length && (x = [{ - start: 0, - count: n.length - }]); - for (let t = 0, e = x.length; t < e; ++t) { - const e = x[t], - i = e.start; - for (let t = i, r = i + e.count; t < r; t += 3) A(n[t + 0], n[t + 1], n[t + 2]) - } - const _ = new T, - b = new T, - w = new T, - M = new T; - - function E(t) { - w.fromArray(r, 3 * t), M.copy(w); - const e = l[t]; - _.copy(e), _.sub(w.multiplyScalar(w.dot(e))).normalize(), b.crossVectors(M, e); - const n = b.dot(c[t]) < 0 ? -1 : 1; - a[4 * t] = _.x, a[4 * t + 1] = _.y, a[4 * t + 2] = _.z, a[4 * t + 3] = n - } - for (let t = 0, e = x.length; t < e; ++t) { - const e = x[t], - i = e.start; - for (let t = i, r = i + e.count; t < r; t += 3) E(n[t + 0]), E(n[t + 1]), E(n[t + 2]) - } - }, - computeVertexNormals: function() { - const t = this.index, - e = this.getAttribute("position"); - if (void 0 !== e) { - let n = this.getAttribute("normal"); - if (void 0 === n) n = new ee(new Float32Array(3 * e.count), 3), this.setAttribute("normal", n); - else - for (let t = 0, e = n.count; t < e; t++) n.setXYZ(t, 0, 0, 0); - const i = new T, - r = new T, - o = new T, - s = new T, - a = new T, - l = new T, - c = new T, - h = new T; - if (t) - for (let u = 0, d = t.count; u < d; u += 3) { - const d = t.getX(u + 0), - p = t.getX(u + 1), - f = t.getX(u + 2); - i.fromBufferAttribute(e, d), r.fromBufferAttribute(e, p), o.fromBufferAttribute(e, f), c.subVectors(o, r), h.subVectors(i, r), c.cross(h), s.fromBufferAttribute(n, d), a.fromBufferAttribute(n, p), l.fromBufferAttribute(n, f), s.add(c), a.add(c), l.add(c), n.setXYZ(d, s.x, s.y, s.z), n.setXYZ(p, a.x, a.y, a.z), n.setXYZ(f, l.x, l.y, l.z) - } else - for (let t = 0, s = e.count; t < s; t += 3) i.fromBufferAttribute(e, t + 0), r.fromBufferAttribute(e, t + 1), o.fromBufferAttribute(e, t + 2), c.subVectors(o, r), h.subVectors(i, r), c.cross(h), n.setXYZ(t + 0, c.x, c.y, c.z), n.setXYZ(t + 1, c.x, c.y, c.z), n.setXYZ(t + 2, c.x, c.y, c.z); - this.normalizeNormals(), n.needsUpdate = !0 - } - }, - merge: function(t, e) { - if (!t || !t.isBufferGeometry) return void console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.", t); - void 0 === e && (e = 0, console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.")); - const n = this.attributes; - for (const i in n) { - if (void 0 === t.attributes[i]) continue; - const r = n[i].array, - o = t.attributes[i], - s = o.array, - a = o.itemSize * e, - l = Math.min(s.length, r.length - a); - for (let t = 0, e = a; t < l; t++, e++) r[e] = s[t] - } - return this - }, - normalizeNormals: function() { - const t = this.attributes.normal; - for (let e = 0, n = t.count; e < n; e++) _e.fromBufferAttribute(t, e), _e.normalize(), t.setXYZ(e, _e.x, _e.y, _e.z) - }, - toNonIndexed: function() { - function t(t, e) { - const n = t.array, - i = t.itemSize, - r = t.normalized, - o = new n.constructor(e.length * i); - let s = 0, - a = 0; - for (let t = 0, r = e.length; t < r; t++) { - s = e[t] * i; - for (let t = 0; t < i; t++) o[a++] = n[s++] - } - return new ee(o, i, r) - } - if (null === this.index) return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."), this; - const e = new be, - n = this.index.array, - i = this.attributes; - for (const r in i) { - const o = t(i[r], n); - e.setAttribute(r, o) - } - const r = this.morphAttributes; - for (const i in r) { - const o = [], - s = r[i]; - for (let e = 0, i = s.length; e < i; e++) { - const i = t(s[e], n); - o.push(i) - } - e.morphAttributes[i] = o - } - e.morphTargetsRelative = this.morphTargetsRelative; - const o = this.groups; - for (let t = 0, n = o.length; t < n; t++) { - const n = o[t]; - e.addGroup(n.start, n.count, n.materialIndex) - } - return e - }, - toJSON: function() { - const t = { - metadata: { - version: 4.5, - type: "BufferGeometry", - generator: "BufferGeometry.toJSON" - } - }; - if (t.uuid = this.uuid, t.type = this.type, "" !== this.name && (t.name = this.name), Object.keys(this.userData).length > 0 && (t.userData = this.userData), void 0 !== this.parameters) { - const e = this.parameters; - for (const n in e) void 0 !== e[n] && (t[n] = e[n]); - return t - } - t.data = { - attributes: {} - }; - const e = this.index; - null !== e && (t.data.index = { - type: e.array.constructor.name, - array: Array.prototype.slice.call(e.array) - }); - const n = this.attributes; - for (const e in n) { - const i = n[e], - r = i.toJSON(t.data); - "" !== i.name && (r.name = i.name), t.data.attributes[e] = r - } - const i = {}; - let r = !1; - for (const e in this.morphAttributes) { - const n = this.morphAttributes[e], - o = []; - for (let e = 0, i = n.length; e < i; e++) { - const i = n[e], - r = i.toJSON(t.data); - "" !== i.name && (r.name = i.name), o.push(r) - } - o.length > 0 && (i[e] = o, r = !0) - } - r && (t.data.morphAttributes = i, t.data.morphTargetsRelative = this.morphTargetsRelative); - const o = this.groups; - o.length > 0 && (t.data.groups = JSON.parse(JSON.stringify(o))); - const s = this.boundingSphere; - return null !== s && (t.data.boundingSphere = { - center: s.center.toArray(), - radius: s.radius - }), t - }, - clone: function() { - return (new be).copy(this) - }, - copy: function(t) { - this.index = null, this.attributes = {}, this.morphAttributes = {}, this.groups = [], this.boundingBox = null, this.boundingSphere = null; - const e = {}; - this.name = t.name; - const n = t.index; - null !== n && this.setIndex(n.clone(e)); - const i = t.attributes; - for (const t in i) { - const n = i[t]; - this.setAttribute(t, n.clone(e)) - } - const r = t.morphAttributes; - for (const t in r) { - const n = [], - i = r[t]; - for (let t = 0, r = i.length; t < r; t++) n.push(i[t].clone(e)); - this.morphAttributes[t] = n - } - this.morphTargetsRelative = t.morphTargetsRelative; - const o = t.groups; - for (let t = 0, e = o.length; t < e; t++) { - const e = o[t]; - this.addGroup(e.start, e.count, e.materialIndex) - } - const s = t.boundingBox; - null !== s && (this.boundingBox = s.clone()); - const a = t.boundingSphere; - return null !== a && (this.boundingSphere = a.clone()), this.drawRange.start = t.drawRange.start, this.drawRange.count = t.drawRange.count, this.userData = t.userData, this - }, - dispose: function() { - this.dispatchEvent({ - type: "dispose" - }) - } - }); - const we = new et, - Me = new tt, - Ee = new X, - Se = new T, - Te = new T, - Le = new T, - Re = new T, - Ce = new T, - Pe = new T, - De = new T, - Ie = new T, - Oe = new T, - Ne = new v, - Be = new v, - Fe = new v, - ze = new T, - Ue = new T; - - function He(t = new be, e = new Kt) { - St.call(this), this.type = "Mesh", this.geometry = t, this.material = e, this.updateMorphTargets() - } - - function Ge(t, e, n, i, r, o, s, a, l, c, h, u) { - Se.fromBufferAttribute(r, c), Te.fromBufferAttribute(r, h), Le.fromBufferAttribute(r, u); - const d = t.morphTargetInfluences; - if (e.morphTargets && o && d) { - De.set(0, 0, 0), Ie.set(0, 0, 0), Oe.set(0, 0, 0); - for (let t = 0, e = o.length; t < e; t++) { - const e = d[t], - n = o[t]; - 0 !== e && (Re.fromBufferAttribute(n, c), Ce.fromBufferAttribute(n, h), Pe.fromBufferAttribute(n, u), s ? (De.addScaledVector(Re, e), Ie.addScaledVector(Ce, e), Oe.addScaledVector(Pe, e)) : (De.addScaledVector(Re.sub(Se), e), Ie.addScaledVector(Ce.sub(Te), e), Oe.addScaledVector(Pe.sub(Le), e))) - } - Se.add(De), Te.add(Ie), Le.add(Oe) - } - t.isSkinnedMesh && (t.boneTransform(c, Se), t.boneTransform(h, Te), t.boneTransform(u, Le)); - const p = function(t, e, n, i, r, o, s, a) { - let l; - if (l = 1 === e.side ? i.intersectTriangle(s, o, r, !0, a) : i.intersectTriangle(r, o, s, 2 !== e.side, a), null === l) return null; - Ue.copy(a), Ue.applyMatrix4(t.matrixWorld); - const c = n.ray.origin.distanceTo(Ue); - return c < n.near || c > n.far ? null : { - distance: c, - point: Ue.clone(), - object: t - } - }(t, e, n, i, Se, Te, Le, ze); - if (p) { - a && (Ne.fromBufferAttribute(a, c), Be.fromBufferAttribute(a, h), Fe.fromBufferAttribute(a, u), p.uv = Gt.getUV(ze, Se, Te, Le, Ne, Be, Fe, new v)), l && (Ne.fromBufferAttribute(l, c), Be.fromBufferAttribute(l, h), Fe.fromBufferAttribute(l, u), p.uv2 = Gt.getUV(ze, Se, Te, Le, Ne, Be, Fe, new v)); - const t = new Qt(c, h, u); - Gt.getNormal(Se, Te, Le, t.normal), p.face = t - } - return p - } - He.prototype = Object.assign(Object.create(St.prototype), { - constructor: He, - isMesh: !0, - copy: function(t) { - return St.prototype.copy.call(this, t), void 0 !== t.morphTargetInfluences && (this.morphTargetInfluences = t.morphTargetInfluences.slice()), void 0 !== t.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, t.morphTargetDictionary)), this.material = t.material, this.geometry = t.geometry, this - }, - updateMorphTargets: function() { - const t = this.geometry; - if (t.isBufferGeometry) { - const e = t.morphAttributes, - n = Object.keys(e); - if (n.length > 0) { - const t = e[n[0]]; - if (void 0 !== t) { - this.morphTargetInfluences = [], this.morphTargetDictionary = {}; - for (let e = 0, n = t.length; e < n; e++) { - const n = t[e].name || String(e); - this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e - } - } - } - } else { - const e = t.morphTargets; - void 0 !== e && e.length > 0 && console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") - } - }, - raycast: function(t, e) { - const n = this.geometry, - i = this.material, - r = this.matrixWorld; - if (void 0 === i) return; - if (null === n.boundingSphere && n.computeBoundingSphere(), Ee.copy(n.boundingSphere), Ee.applyMatrix4(r), !1 === t.ray.intersectsSphere(Ee)) return; - if (we.copy(r).invert(), Me.copy(t.ray).applyMatrix4(we), null !== n.boundingBox && !1 === Me.intersectsBox(n.boundingBox)) return; - let o; - if (n.isBufferGeometry) { - const r = n.index, - s = n.attributes.position, - a = n.morphAttributes.position, - l = n.morphTargetsRelative, - c = n.attributes.uv, - h = n.attributes.uv2, - u = n.groups, - d = n.drawRange; - if (null !== r) - if (Array.isArray(i)) - for (let n = 0, p = u.length; n < p; n++) { - const p = u[n], - f = i[p.materialIndex]; - for (let n = Math.max(p.start, d.start), i = Math.min(p.start + p.count, d.start + d.count); n < i; n += 3) { - const i = r.getX(n), - u = r.getX(n + 1), - d = r.getX(n + 2); - o = Ge(this, f, t, Me, s, a, l, c, h, i, u, d), o && (o.faceIndex = Math.floor(n / 3), o.face.materialIndex = p.materialIndex, e.push(o)) - } - } else { - for (let n = Math.max(0, d.start), u = Math.min(r.count, d.start + d.count); n < u; n += 3) { - const u = r.getX(n), - d = r.getX(n + 1), - p = r.getX(n + 2); - o = Ge(this, i, t, Me, s, a, l, c, h, u, d, p), o && (o.faceIndex = Math.floor(n / 3), e.push(o)) - } - } else if (void 0 !== s) - if (Array.isArray(i)) - for (let n = 0, r = u.length; n < r; n++) { - const r = u[n], - p = i[r.materialIndex]; - for (let n = Math.max(r.start, d.start), i = Math.min(r.start + r.count, d.start + d.count); n < i; n += 3) { - o = Ge(this, p, t, Me, s, a, l, c, h, n, n + 1, n + 2), o && (o.faceIndex = Math.floor(n / 3), o.face.materialIndex = r.materialIndex, e.push(o)) - } - } else { - for (let n = Math.max(0, d.start), r = Math.min(s.count, d.start + d.count); n < r; n += 3) { - o = Ge(this, i, t, Me, s, a, l, c, h, n, n + 1, n + 2), o && (o.faceIndex = Math.floor(n / 3), e.push(o)) - } - } - } else n.isGeometry && console.error("THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") - } - }); - class Ve extends be { - constructor(t = 1, e = 1, n = 1, i = 1, r = 1, o = 1) { - super(), this.type = "BoxGeometry", this.parameters = { - width: t, - height: e, - depth: n, - widthSegments: i, - heightSegments: r, - depthSegments: o - }; - const s = this; - i = Math.floor(i), r = Math.floor(r), o = Math.floor(o); - const a = [], - l = [], - c = [], - h = []; - let u = 0, - d = 0; - - function p(t, e, n, i, r, o, p, f, m, g, v) { - const y = o / m, - A = p / g, - x = o / 2, - _ = p / 2, - b = f / 2, - w = m + 1, - M = g + 1; - let E = 0, - S = 0; - const L = new T; - for (let o = 0; o < M; o++) { - const s = o * A - _; - for (let a = 0; a < w; a++) { - const u = a * y - x; - L[t] = u * i, L[e] = s * r, L[n] = b, l.push(L.x, L.y, L.z), L[t] = 0, L[e] = 0, L[n] = f > 0 ? 1 : -1, c.push(L.x, L.y, L.z), h.push(a / m), h.push(1 - o / g), E += 1 - } - } - for (let t = 0; t < g; t++) - for (let e = 0; e < m; e++) { - const n = u + e + w * t, - i = u + e + w * (t + 1), - r = u + (e + 1) + w * (t + 1), - o = u + (e + 1) + w * t; - a.push(n, i, o), a.push(i, r, o), S += 6 - } - s.addGroup(d, S, v), d += S, u += E - } - p("z", "y", "x", -1, -1, n, e, t, o, r, 0), p("z", "y", "x", 1, -1, n, e, -t, o, r, 1), p("x", "z", "y", 1, 1, t, n, e, i, o, 2), p("x", "z", "y", 1, -1, t, n, -e, i, o, 3), p("x", "y", "z", 1, -1, t, e, n, i, r, 4), p("x", "y", "z", -1, -1, t, e, -n, i, r, 5), this.setIndex(a), this.setAttribute("position", new he(l, 3)), this.setAttribute("normal", new he(c, 3)), this.setAttribute("uv", new he(h, 2)) - } - } - - function ke(t) { - const e = {}; - for (const n in t) { - e[n] = {}; - for (const i in t[n]) { - const r = t[n][i]; - r && (r.isColor || r.isMatrix3 || r.isMatrix4 || r.isVector2 || r.isVector3 || r.isVector4 || r.isTexture) ? e[n][i] = r.clone() : Array.isArray(r) ? e[n][i] = r.slice() : e[n][i] = r - } - } - return e - } - - function We(t) { - const e = {}; - for (let n = 0; n < t.length; n++) { - const i = ke(t[n]); - for (const t in i) e[t] = i[t] - } - return e - } - const je = { - clone: ke, - merge: We - }; - - function Xe(t) { - Jt.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.fog = !1, this.lights = !1, this.clipping = !1, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !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, this.uniformsNeedUpdate = !1, this.glslVersion = null, void 0 !== t && (void 0 !== t.attributes && console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."), this.setValues(t)) - } - - function qe() { - St.call(this), this.type = "Camera", this.matrixWorldInverse = new et, this.projectionMatrix = new et, this.projectionMatrixInverse = new et - } - - function Ye(t = 50, e = 1, n = .1, i = 2e3) { - qe.call(this), this.type = "PerspectiveCamera", this.fov = t, this.zoom = 1, this.near = n, this.far = i, this.focus = 10, this.aspect = e, this.view = null, this.filmGauge = 35, this.filmOffset = 0, this.updateProjectionMatrix() - } - Xe.prototype = Object.create(Jt.prototype), Xe.prototype.constructor = Xe, Xe.prototype.isShaderMaterial = !0, Xe.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.fragmentShader = t.fragmentShader, this.vertexShader = t.vertexShader, this.uniforms = ke(t.uniforms), this.defines = Object.assign({}, t.defines), this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.lights = t.lights, this.clipping = t.clipping, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this.extensions = Object.assign({}, t.extensions), this.glslVersion = t.glslVersion, this - }, Xe.prototype.toJSON = function(t) { - const e = Jt.prototype.toJSON.call(this, t); - e.glslVersion = this.glslVersion, e.uniforms = {}; - for (const n in this.uniforms) { - const i = this.uniforms[n].value; - i && i.isTexture ? e.uniforms[n] = { - type: "t", - value: i.toJSON(t).uuid - } : i && i.isColor ? e.uniforms[n] = { - type: "c", - value: i.getHex() - } : i && i.isVector2 ? e.uniforms[n] = { - type: "v2", - value: i.toArray() - } : i && i.isVector3 ? e.uniforms[n] = { - type: "v3", - value: i.toArray() - } : i && i.isVector4 ? e.uniforms[n] = { - type: "v4", - value: i.toArray() - } : i && i.isMatrix3 ? e.uniforms[n] = { - type: "m3", - value: i.toArray() - } : i && i.isMatrix4 ? e.uniforms[n] = { - type: "m4", - value: i.toArray() - } : e.uniforms[n] = { - value: i - } - } - Object.keys(this.defines).length > 0 && (e.defines = this.defines), e.vertexShader = this.vertexShader, e.fragmentShader = this.fragmentShader; - const n = {}; - for (const t in this.extensions) !0 === this.extensions[t] && (n[t] = !0); - return Object.keys(n).length > 0 && (e.extensions = n), e - }, qe.prototype = Object.assign(Object.create(St.prototype), { - constructor: qe, - isCamera: !0, - copy: function(t, e) { - return St.prototype.copy.call(this, t, e), this.matrixWorldInverse.copy(t.matrixWorldInverse), this.projectionMatrix.copy(t.projectionMatrix), this.projectionMatrixInverse.copy(t.projectionMatrixInverse), this - }, - getWorldDirection: function(t) { - void 0 === t && (console.warn("THREE.Camera: .getWorldDirection() target is now required"), t = new T), this.updateWorldMatrix(!0, !1); - const e = this.matrixWorld.elements; - return t.set(-e[8], -e[9], -e[10]).normalize() - }, - updateMatrixWorld: function(t) { - St.prototype.updateMatrixWorld.call(this, t), this.matrixWorldInverse.copy(this.matrixWorld).invert() - }, - updateWorldMatrix: function(t, e) { - St.prototype.updateWorldMatrix.call(this, t, e), this.matrixWorldInverse.copy(this.matrixWorld).invert() - }, - clone: function() { - return (new this.constructor).copy(this) - } - }), Ye.prototype = Object.assign(Object.create(qe.prototype), { - constructor: Ye, - isPerspectiveCamera: !0, - copy: function(t, e) { - return qe.prototype.copy.call(this, t, e), this.fov = t.fov, this.zoom = t.zoom, this.near = t.near, this.far = t.far, this.focus = t.focus, this.aspect = t.aspect, this.view = null === t.view ? null : Object.assign({}, t.view), this.filmGauge = t.filmGauge, this.filmOffset = t.filmOffset, this - }, - setFocalLength: function(t) { - const e = .5 * this.getFilmHeight() / t; - this.fov = 2 * g.RAD2DEG * Math.atan(e), this.updateProjectionMatrix() - }, - getFocalLength: function() { - const t = Math.tan(.5 * g.DEG2RAD * this.fov); - return .5 * this.getFilmHeight() / t - }, - getEffectiveFOV: function() { - return 2 * g.RAD2DEG * Math.atan(Math.tan(.5 * g.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(t, e, n, i, r, o) { - this.aspect = t / e, null === this.view && (this.view = { - enabled: !0, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1 - }), this.view.enabled = !0, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix() - }, - clearViewOffset: function() { - null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() - }, - updateProjectionMatrix: function() { - const t = this.near; - let e = t * Math.tan(.5 * g.DEG2RAD * this.fov) / this.zoom, - n = 2 * e, - i = this.aspect * n, - r = -.5 * i; - const o = this.view; - if (null !== this.view && this.view.enabled) { - const t = o.fullWidth, - s = o.fullHeight; - r += o.offsetX * i / t, e -= o.offsetY * n / s, i *= o.width / t, n *= o.height / s - } - const s = this.filmOffset; - 0 !== s && (r += t * s / this.getFilmWidth()), this.projectionMatrix.makePerspective(r, r + i, e, e - n, t, this.far), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() - }, - toJSON: function(t) { - const e = St.prototype.toJSON.call(this, t); - return e.object.fov = this.fov, e.object.zoom = this.zoom, e.object.near = this.near, e.object.far = this.far, e.object.focus = this.focus, e.object.aspect = this.aspect, null !== this.view && (e.object.view = Object.assign({}, this.view)), e.object.filmGauge = this.filmGauge, e.object.filmOffset = this.filmOffset, e - } - }); - - function Qe(t, e, n) { - if (St.call(this), this.type = "CubeCamera", !0 !== n.isWebGLCubeRenderTarget) return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter."); - this.renderTarget = n; - const i = new Ye(90, 1, t, e); - i.layers = this.layers, i.up.set(0, -1, 0), i.lookAt(new T(1, 0, 0)), this.add(i); - const r = new Ye(90, 1, t, e); - r.layers = this.layers, r.up.set(0, -1, 0), r.lookAt(new T(-1, 0, 0)), this.add(r); - const o = new Ye(90, 1, t, e); - o.layers = this.layers, o.up.set(0, 0, 1), o.lookAt(new T(0, 1, 0)), this.add(o); - const s = new Ye(90, 1, t, e); - s.layers = this.layers, s.up.set(0, 0, -1), s.lookAt(new T(0, -1, 0)), this.add(s); - const a = new Ye(90, 1, t, e); - a.layers = this.layers, a.up.set(0, -1, 0), a.lookAt(new T(0, 0, 1)), this.add(a); - const l = new Ye(90, 1, t, e); - l.layers = this.layers, l.up.set(0, -1, 0), l.lookAt(new T(0, 0, -1)), this.add(l), this.update = function(t, e) { - null === this.parent && this.updateMatrixWorld(); - const c = t.xr.enabled, - h = t.getRenderTarget(); - t.xr.enabled = !1; - const u = n.texture.generateMipmaps; - n.texture.generateMipmaps = !1, t.setRenderTarget(n, 0), t.render(e, i), t.setRenderTarget(n, 1), t.render(e, r), t.setRenderTarget(n, 2), t.render(e, o), t.setRenderTarget(n, 3), t.render(e, s), t.setRenderTarget(n, 4), t.render(e, a), n.texture.generateMipmaps = u, t.setRenderTarget(n, 5), t.render(e, l), t.setRenderTarget(h), t.xr.enabled = c - } - } - - function Ze(t, e, n, i, r, o, s, a, l, c) { - t = void 0 !== t ? t : [], e = void 0 !== e ? e : 301, s = void 0 !== s ? s : 1022, b.call(this, t, e, n, i, r, o, s, a, l, c), this.flipY = !1, this._needsFlipEnvMap = !0 - } - Qe.prototype = Object.create(St.prototype), Qe.prototype.constructor = Qe, Ze.prototype = Object.create(b.prototype), Ze.prototype.constructor = Ze, Ze.prototype.isCubeTexture = !0, Object.defineProperty(Ze.prototype, "images", { - get: function() { - return this.image - }, - set: function(t) { - this.image = t - } - }); - class Je extends E { - constructor(t, e, n) { - Number.isInteger(e) && (console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"), e = n), super(t, t, e), Object.defineProperty(this, "isWebGLCubeRenderTarget", { - value: !0 - }), e = e || {}, this.texture = new Ze(void 0, e.mapping, e.wrapS, e.wrapT, e.magFilter, e.minFilter, e.format, e.type, e.anisotropy, e.encoding), this.texture._needsFlipEnvMap = !1 - } - fromEquirectangularTexture(t, e) { - this.texture.type = e.type, this.texture.format = 1023, this.texture.encoding = e.encoding, this.texture.generateMipmaps = e.generateMipmaps, this.texture.minFilter = e.minFilter, this.texture.magFilter = e.magFilter; - const n = { - uniforms: { - tEquirect: { - value: null - } - }, - vertexShader: "\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t", - fragmentShader: "\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t" - }, - i = new Ve(5, 5, 5), - r = new Xe({ - name: "CubemapFromEquirect", - uniforms: ke(n.uniforms), - vertexShader: n.vertexShader, - fragmentShader: n.fragmentShader, - side: 1, - blending: 0 - }); - r.uniforms.tEquirect.value = e; - const o = new He(i, r), - s = e.minFilter; - 1008 === e.minFilter && (e.minFilter = 1006); - return new Qe(1, 10, this).update(t, o), e.minFilter = s, o.geometry.dispose(), o.material.dispose(), this - } - clear(t, e, n, i) { - const r = t.getRenderTarget(); - for (let r = 0; r < 6; r++) t.setRenderTarget(this, r), t.clear(e, n, i); - t.setRenderTarget(r) - } - } - - function Ke(t, e, n, i, r, o, s, a, l, c, h, u) { - b.call(this, null, o, s, a, l, c, i, r, h, u), this.image = { - data: t || null, - width: e || 1, - height: n || 1 - }, this.magFilter = void 0 !== l ? l : 1003, this.minFilter = void 0 !== c ? c : 1003, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1, this.needsUpdate = !0 - } - Ke.prototype = Object.create(b.prototype), Ke.prototype.constructor = Ke, Ke.prototype.isDataTexture = !0; - const $e = new X, - tn = new T; - class en { - constructor(t, e, n, i, r, o) { - this.planes = [void 0 !== t ? t : new Ct, void 0 !== e ? e : new Ct, void 0 !== n ? n : new Ct, void 0 !== i ? i : new Ct, void 0 !== r ? r : new Ct, void 0 !== o ? o : new Ct] - } - set(t, e, n, i, r, o) { - const s = this.planes; - return s[0].copy(t), s[1].copy(e), s[2].copy(n), s[3].copy(i), s[4].copy(r), s[5].copy(o), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - const e = this.planes; - for (let n = 0; n < 6; n++) e[n].copy(t.planes[n]); - return this - } - setFromProjectionMatrix(t) { - const e = this.planes, - n = t.elements, - i = n[0], - r = n[1], - o = n[2], - s = n[3], - a = n[4], - l = n[5], - c = n[6], - h = n[7], - u = n[8], - d = n[9], - p = n[10], - f = n[11], - m = n[12], - g = n[13], - v = n[14], - y = n[15]; - return e[0].setComponents(s - i, h - a, f - u, y - m).normalize(), e[1].setComponents(s + i, h + a, f + u, y + m).normalize(), e[2].setComponents(s + r, h + l, f + d, y + g).normalize(), e[3].setComponents(s - r, h - l, f - d, y - g).normalize(), e[4].setComponents(s - o, h - c, f - p, y - v).normalize(), e[5].setComponents(s + o, h + c, f + p, y + v).normalize(), this - } - intersectsObject(t) { - const e = t.geometry; - return null === e.boundingSphere && e.computeBoundingSphere(), $e.copy(e.boundingSphere).applyMatrix4(t.matrixWorld), this.intersectsSphere($e) - } - intersectsSprite(t) { - return $e.center.set(0, 0, 0), $e.radius = .7071067811865476, $e.applyMatrix4(t.matrixWorld), this.intersectsSphere($e) - } - intersectsSphere(t) { - const e = this.planes, - n = t.center, - i = -t.radius; - for (let t = 0; t < 6; t++) { - if (e[t].distanceToPoint(n) < i) return !1 - } - return !0 - } - intersectsBox(t) { - const e = this.planes; - for (let n = 0; n < 6; n++) { - const i = e[n]; - if (tn.x = i.normal.x > 0 ? t.max.x : t.min.x, tn.y = i.normal.y > 0 ? t.max.y : t.min.y, tn.z = i.normal.z > 0 ? t.max.z : t.min.z, i.distanceToPoint(tn) < 0) return !1 - } - return !0 - } - containsPoint(t) { - const e = this.planes; - for (let n = 0; n < 6; n++) - if (e[n].distanceToPoint(t) < 0) return !1; - return !0 - } - } - - function nn() { - let t = null, - e = !1, - n = null, - i = null; - - function r(e, o) { - n(e, o), i = t.requestAnimationFrame(r) - } - return { - start: function() { - !0 !== e && null !== n && (i = t.requestAnimationFrame(r), e = !0) - }, - stop: function() { - t.cancelAnimationFrame(i), e = !1 - }, - setAnimationLoop: function(t) { - n = t - }, - setContext: function(e) { - t = e - } - } - } - - function rn(t, e) { - const n = e.isWebGL2, - i = new WeakMap; - return { - get: function(t) { - return t.isInterleavedBufferAttribute && (t = t.data), i.get(t) - }, - remove: function(e) { - e.isInterleavedBufferAttribute && (e = e.data); - const n = i.get(e); - n && (t.deleteBuffer(n.buffer), i.delete(e)) - }, - update: function(e, r) { - if (e.isGLBufferAttribute) { - const t = i.get(e); - return void((!t || t.version < e.version) && i.set(e, { - buffer: e.buffer, - type: e.type, - bytesPerElement: e.elementSize, - version: e.version - })) - } - e.isInterleavedBufferAttribute && (e = e.data); - const o = i.get(e); - void 0 === o ? i.set(e, function(e, i) { - const r = e.array, - o = e.usage, - s = t.createBuffer(); - t.bindBuffer(i, s), t.bufferData(i, r, o), e.onUploadCallback(); - let a = 5126; - return r instanceof Float32Array ? a = 5126 : r instanceof Float64Array ? console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.") : r instanceof Uint16Array ? e.isFloat16BufferAttribute ? n ? a = 5131 : console.warn("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.") : a = 5123 : r instanceof Int16Array ? a = 5122 : r instanceof Uint32Array ? a = 5125 : r instanceof Int32Array ? a = 5124 : r instanceof Int8Array ? a = 5120 : r instanceof Uint8Array && (a = 5121), { - buffer: s, - type: a, - bytesPerElement: r.BYTES_PER_ELEMENT, - version: e.version - } - }(e, r)) : o.version < e.version && (! function(e, i, r) { - const o = i.array, - s = i.updateRange; - t.bindBuffer(r, e), -1 === s.count ? t.bufferSubData(r, 0, o) : (n ? t.bufferSubData(r, s.offset * o.BYTES_PER_ELEMENT, o, s.offset, s.count) : t.bufferSubData(r, s.offset * o.BYTES_PER_ELEMENT, o.subarray(s.offset, s.offset + s.count)), s.count = -1) - }(o.buffer, e, r), o.version = e.version) - } - } - } - class on extends be { - constructor(t = 1, e = 1, n = 1, i = 1) { - super(), this.type = "PlaneGeometry", this.parameters = { - width: t, - height: e, - widthSegments: n, - heightSegments: i - }; - const r = t / 2, - o = e / 2, - s = Math.floor(n), - a = Math.floor(i), - l = s + 1, - c = a + 1, - h = t / s, - u = e / a, - d = [], - p = [], - f = [], - m = []; - for (let t = 0; t < c; t++) { - const e = t * u - o; - for (let n = 0; n < l; n++) { - const i = n * h - r; - p.push(i, -e, 0), f.push(0, 0, 1), m.push(n / s), m.push(1 - t / a) - } - } - for (let t = 0; t < a; t++) - for (let e = 0; e < s; e++) { - const n = e + l * t, - i = e + l * (t + 1), - r = e + 1 + l * (t + 1), - o = e + 1 + l * t; - d.push(n, i, o), d.push(i, r, o) - } - this.setIndex(d), this.setAttribute("position", new he(p, 3)), this.setAttribute("normal", new he(f, 3)), this.setAttribute("uv", new he(m, 2)) - } - } - const sn = { - alphamap_fragment: "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif", - alphamap_pars_fragment: "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", - alphatest_fragment: "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif", - aomap_fragment: "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", - aomap_pars_fragment: "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", - begin_vertex: "vec3 transformed = vec3( position );", - beginnormal_vertex: "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif", - bsdfs: "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", - bumpmap_pars_fragment: "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", - clipping_planes_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", - clipping_planes_pars_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif", - clipping_planes_pars_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif", - clipping_planes_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif", - color_fragment: "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif", - color_pars_fragment: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", - color_pars_vertex: "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif", - color_vertex: "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif", - common: "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}", - cube_uv_reflection_fragment: "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif", - defaultnormal_vertex: "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", - displacementmap_pars_vertex: "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif", - displacementmap_vertex: "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif", - emissivemap_fragment: "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", - emissivemap_pars_fragment: "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif", - encodings_fragment: "gl_FragColor = linearToOutputTexel( gl_FragColor );", - encodings_pars_fragment: "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", - envmap_fragment: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", - envmap_common_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif", - envmap_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", - envmap_pars_vertex: "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif", - envmap_physical_pars_fragment: "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", - envmap_vertex: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", - fog_vertex: "#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif", - fog_pars_vertex: "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif", - fog_fragment: "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif", - fog_pars_fragment: "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", - gradientmap_pars_fragment: "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}", - lightmap_fragment: "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", - lightmap_pars_fragment: "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif", - lights_lambert_vertex: "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", - lights_pars_begin: "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", - lights_toon_fragment: "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;", - lights_toon_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", - lights_phong_fragment: "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", - lights_phong_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", - lights_physical_fragment: "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", - lights_physical_pars_fragment: "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", - lights_fragment_begin: "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", - lights_fragment_maps: "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", - lights_fragment_end: "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif", - logdepthbuf_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif", - logdepthbuf_pars_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", - logdepthbuf_pars_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif", - logdepthbuf_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", - map_fragment: "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif", - map_pars_fragment: "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif", - map_particle_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", - map_particle_pars_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", - metalnessmap_fragment: "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif", - metalnessmap_pars_fragment: "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", - morphnormal_vertex: "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif", - morphtarget_pars_vertex: "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", - morphtarget_vertex: "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", - normal_fragment_begin: "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", - normal_fragment_maps: "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", - normalmap_pars_fragment: "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", - clearcoat_normal_fragment_begin: "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif", - clearcoat_normal_fragment_maps: "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif", - clearcoat_pars_fragment: "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", - packing: "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", - premultiplied_alpha_fragment: "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif", - project_vertex: "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;", - dithering_fragment: "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif", - dithering_pars_fragment: "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", - roughnessmap_fragment: "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif", - roughnessmap_pars_fragment: "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif", - shadowmap_pars_fragment: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", - shadowmap_pars_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", - shadowmap_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", - shadowmask_pars_fragment: "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", - skinbase_vertex: "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif", - skinning_pars_vertex: "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", - skinning_vertex: "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif", - skinnormal_vertex: "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", - specularmap_fragment: "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif", - specularmap_pars_fragment: "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif", - tonemapping_fragment: "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif", - tonemapping_pars_fragment: "#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }", - transmissionmap_fragment: "#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif", - transmissionmap_pars_fragment: "#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif", - uv_pars_fragment: "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif", - uv_pars_vertex: "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif", - uv_vertex: "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif", - uv2_pars_fragment: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif", - uv2_pars_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif", - uv2_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif", - worldpos_vertex: "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif", - background_frag: "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", - background_vert: "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}", - cube_frag: "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", - cube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", - depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", - depth_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", - distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", - distanceRGBA_vert: "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", - equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", - equirect_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", - linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", - linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshbasic_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshlambert_frag: "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshlambert_vert: "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshmatcap_frag: "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", - meshtoon_frag: "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshtoon_vert: "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", - meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - meshphysical_vert: "#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", - normal_frag: "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", - normal_vert: "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", - points_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", - points_vert: "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", - shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}", - shadow_vert: "#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", - sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", - sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}" - }, - an = { - common: { - diffuse: { - value: new Yt(15658734) - }, - opacity: { - value: 1 - }, - map: { - value: null - }, - uvTransform: { - value: new y - }, - uv2Transform: { - value: new y - }, - alphaMap: { - value: null - } - }, - specularmap: { - specularMap: { - value: null - } - }, - envmap: { - envMap: { - value: null - }, - flipEnvMap: { - value: -1 - }, - reflectivity: { - value: 1 - }, - refractionRatio: { - value: .98 - }, - maxMipLevel: { - value: 0 - } - }, - aomap: { - aoMap: { - value: null - }, - aoMapIntensity: { - value: 1 - } - }, - lightmap: { - lightMap: { - value: null - }, - lightMapIntensity: { - value: 1 - } - }, - emissivemap: { - emissiveMap: { - value: null - } - }, - bumpmap: { - bumpMap: { - value: null - }, - bumpScale: { - value: 1 - } - }, - normalmap: { - normalMap: { - value: null - }, - normalScale: { - value: new v(1, 1) - } - }, - displacementmap: { - displacementMap: { - value: null - }, - displacementScale: { - value: 1 - }, - displacementBias: { - value: 0 - } - }, - roughnessmap: { - roughnessMap: { - value: null - } - }, - metalnessmap: { - metalnessMap: { - value: null - } - }, - gradientmap: { - gradientMap: { - value: null - } - }, - fog: { - fogDensity: { - value: 25e-5 - }, - fogNear: { - value: 1 - }, - fogFar: { - value: 2e3 - }, - fogColor: { - value: new Yt(16777215) - } - }, - lights: { - ambientLightColor: { - value: [] - }, - lightProbe: { - value: [] - }, - directionalLights: { - value: [], - properties: { - direction: {}, - color: {} - } - }, - directionalLightShadows: { - value: [], - properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } - }, - directionalShadowMap: { - value: [] - }, - directionalShadowMatrix: { - value: [] - }, - spotLights: { - value: [], - properties: { - color: {}, - position: {}, - direction: {}, - distance: {}, - coneCos: {}, - penumbraCos: {}, - decay: {} - } - }, - spotLightShadows: { - value: [], - properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } - }, - spotShadowMap: { - value: [] - }, - spotShadowMatrix: { - value: [] - }, - pointLights: { - value: [], - properties: { - color: {}, - position: {}, - decay: {}, - distance: {} - } - }, - pointLightShadows: { - value: [], - properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {}, - shadowCameraNear: {}, - shadowCameraFar: {} - } - }, - pointShadowMap: { - value: [] - }, - pointShadowMatrix: { - value: [] - }, - hemisphereLights: { - value: [], - properties: { - direction: {}, - skyColor: {}, - groundColor: {} - } - }, - rectAreaLights: { - value: [], - properties: { - color: {}, - position: {}, - width: {}, - height: {} - } - }, - ltc_1: { - value: null - }, - ltc_2: { - value: null - } - }, - points: { - diffuse: { - value: new Yt(15658734) - }, - opacity: { - value: 1 - }, - size: { - value: 1 - }, - scale: { - value: 1 - }, - map: { - value: null - }, - alphaMap: { - value: null - }, - uvTransform: { - value: new y - } - }, - sprite: { - diffuse: { - value: new Yt(15658734) - }, - opacity: { - value: 1 - }, - center: { - value: new v(.5, .5) - }, - rotation: { - value: 0 - }, - map: { - value: null - }, - alphaMap: { - value: null - }, - uvTransform: { - value: new y - } - } - }, - ln = { - basic: { - uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.fog]), - vertexShader: sn.meshbasic_vert, - fragmentShader: sn.meshbasic_frag - }, - lambert: { - uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.fog, an.lights, { - emissive: { - value: new Yt(0) - } - }]), - vertexShader: sn.meshlambert_vert, - fragmentShader: sn.meshlambert_frag - }, - phong: { - uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.fog, an.lights, { - emissive: { - value: new Yt(0) - }, - specular: { - value: new Yt(1118481) - }, - shininess: { - value: 30 - } - }]), - vertexShader: sn.meshphong_vert, - fragmentShader: sn.meshphong_frag - }, - standard: { - uniforms: We([an.common, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.roughnessmap, an.metalnessmap, an.fog, an.lights, { - emissive: { - value: new Yt(0) - }, - roughness: { - value: 1 - }, - metalness: { - value: 0 - }, - envMapIntensity: { - value: 1 - } - }]), - vertexShader: sn.meshphysical_vert, - fragmentShader: sn.meshphysical_frag - }, - toon: { - uniforms: We([an.common, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.gradientmap, an.fog, an.lights, { - emissive: { - value: new Yt(0) - } - }]), - vertexShader: sn.meshtoon_vert, - fragmentShader: sn.meshtoon_frag - }, - matcap: { - uniforms: We([an.common, an.bumpmap, an.normalmap, an.displacementmap, an.fog, { - matcap: { - value: null - } - }]), - vertexShader: sn.meshmatcap_vert, - fragmentShader: sn.meshmatcap_frag - }, - points: { - uniforms: We([an.points, an.fog]), - vertexShader: sn.points_vert, - fragmentShader: sn.points_frag - }, - dashed: { - uniforms: We([an.common, an.fog, { - scale: { - value: 1 - }, - dashSize: { - value: 1 - }, - totalSize: { - value: 2 - } - }]), - vertexShader: sn.linedashed_vert, - fragmentShader: sn.linedashed_frag - }, - depth: { - uniforms: We([an.common, an.displacementmap]), - vertexShader: sn.depth_vert, - fragmentShader: sn.depth_frag - }, - normal: { - uniforms: We([an.common, an.bumpmap, an.normalmap, an.displacementmap, { - opacity: { - value: 1 - } - }]), - vertexShader: sn.normal_vert, - fragmentShader: sn.normal_frag - }, - sprite: { - uniforms: We([an.sprite, an.fog]), - vertexShader: sn.sprite_vert, - fragmentShader: sn.sprite_frag - }, - background: { - uniforms: { - uvTransform: { - value: new y - }, - t2D: { - value: null - } - }, - vertexShader: sn.background_vert, - fragmentShader: sn.background_frag - }, - cube: { - uniforms: We([an.envmap, { - opacity: { - value: 1 - } - }]), - vertexShader: sn.cube_vert, - fragmentShader: sn.cube_frag - }, - equirect: { - uniforms: { - tEquirect: { - value: null - } - }, - vertexShader: sn.equirect_vert, - fragmentShader: sn.equirect_frag - }, - distanceRGBA: { - uniforms: We([an.common, an.displacementmap, { - referencePosition: { - value: new T - }, - nearDistance: { - value: 1 - }, - farDistance: { - value: 1e3 - } - }]), - vertexShader: sn.distanceRGBA_vert, - fragmentShader: sn.distanceRGBA_frag - }, - shadow: { - uniforms: We([an.lights, an.fog, { - color: { - value: new Yt(0) - }, - opacity: { - value: 1 - } - }]), - vertexShader: sn.shadow_vert, - fragmentShader: sn.shadow_frag - } - }; - - function cn(t, e, n, i, r) { - const o = new Yt(0); - let s, a, l = 0, - c = null, - h = 0, - u = null; - - function d(t, e) { - n.buffers.color.setClear(t.r, t.g, t.b, e, r) - } - return { - getClearColor: function() { - return o - }, - setClearColor: function(t, e = 1) { - o.set(t), l = e, d(o, l) - }, - getClearAlpha: function() { - return l - }, - setClearAlpha: function(t) { - l = t, d(o, l) - }, - render: function(n, r, p, f) { - let m = !0 === r.isScene ? r.background : null; - m && m.isTexture && (m = e.get(m)); - const g = t.xr, - v = g.getSession && g.getSession(); - v && "additive" === v.environmentBlendMode && (m = null), null === m ? d(o, l) : m && m.isColor && (d(m, 1), f = !0), (t.autoClear || f) && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), m && (m.isCubeTexture || m.isWebGLCubeRenderTarget || 306 === m.mapping) ? (void 0 === a && (a = new He(new Ve(1, 1, 1), new Xe({ - name: "BackgroundCubeMaterial", - uniforms: ke(ln.cube.uniforms), - vertexShader: ln.cube.vertexShader, - fragmentShader: ln.cube.fragmentShader, - side: 1, - depthTest: !1, - depthWrite: !1, - fog: !1 - })), a.geometry.deleteAttribute("normal"), a.geometry.deleteAttribute("uv"), a.onBeforeRender = function(t, e, n) { - this.matrixWorld.copyPosition(n.matrixWorld) - }, Object.defineProperty(a.material, "envMap", { - get: function() { - return this.uniforms.envMap.value - } - }), i.update(a)), m.isWebGLCubeRenderTarget && (m = m.texture), a.material.uniforms.envMap.value = m, a.material.uniforms.flipEnvMap.value = m.isCubeTexture && m._needsFlipEnvMap ? -1 : 1, c === m && h === m.version && u === t.toneMapping || (a.material.needsUpdate = !0, c = m, h = m.version, u = t.toneMapping), n.unshift(a, a.geometry, a.material, 0, 0, null)) : m && m.isTexture && (void 0 === s && (s = new He(new on(2, 2), new Xe({ - name: "BackgroundMaterial", - uniforms: ke(ln.background.uniforms), - vertexShader: ln.background.vertexShader, - fragmentShader: ln.background.fragmentShader, - side: 0, - depthTest: !1, - depthWrite: !1, - fog: !1 - })), s.geometry.deleteAttribute("normal"), Object.defineProperty(s.material, "map", { - get: function() { - return this.uniforms.t2D.value - } - }), i.update(s)), s.material.uniforms.t2D.value = m, !0 === m.matrixAutoUpdate && m.updateMatrix(), s.material.uniforms.uvTransform.value.copy(m.matrix), c === m && h === m.version && u === t.toneMapping || (s.material.needsUpdate = !0, c = m, h = m.version, u = t.toneMapping), n.unshift(s, s.geometry, s.material, 0, 0, null)) - } - } - } - - function hn(t, e, n, i) { - const r = t.getParameter(34921), - o = i.isWebGL2 ? null : e.get("OES_vertex_array_object"), - s = i.isWebGL2 || null !== o, - a = {}, - l = d(null); - let c = l; - - function h(e) { - return i.isWebGL2 ? t.bindVertexArray(e) : o.bindVertexArrayOES(e) - } - - function u(e) { - return i.isWebGL2 ? t.deleteVertexArray(e) : o.deleteVertexArrayOES(e) - } - - function d(t) { - const e = [], - n = [], - i = []; - for (let t = 0; t < r; t++) e[t] = 0, n[t] = 0, i[t] = 0; - return { - geometry: null, - program: null, - wireframe: !1, - newAttributes: e, - enabledAttributes: n, - attributeDivisors: i, - object: t, - attributes: {}, - index: null - } - } - - function p() { - const t = c.newAttributes; - for (let e = 0, n = t.length; e < n; e++) t[e] = 0 - } - - function f(t) { - m(t, 0) - } - - function m(n, r) { - const o = c.newAttributes, - s = c.enabledAttributes, - a = c.attributeDivisors; - if (o[n] = 1, 0 === s[n] && (t.enableVertexAttribArray(n), s[n] = 1), a[n] !== r) { - (i.isWebGL2 ? t : e.get("ANGLE_instanced_arrays"))[i.isWebGL2 ? "vertexAttribDivisor" : "vertexAttribDivisorANGLE"](n, r), a[n] = r - } - } - - function g() { - const e = c.newAttributes, - n = c.enabledAttributes; - for (let i = 0, r = n.length; i < r; i++) n[i] !== e[i] && (t.disableVertexAttribArray(i), n[i] = 0) - } - - function v(e, n, r, o, s, a) { - !0 !== i.isWebGL2 || 5124 !== r && 5125 !== r ? t.vertexAttribPointer(e, n, r, o, s, a) : t.vertexAttribIPointer(e, n, r, s, a) - } - - function y() { - A(), c !== l && (c = l, h(c.object)) - } - - function A() { - l.geometry = null, l.program = null, l.wireframe = !1 - } - return { - setup: function(r, l, u, y, A) { - let x = !1; - if (s) { - const e = function(e, n, r) { - const s = !0 === r.wireframe; - let l = a[e.id]; - void 0 === l && (l = {}, a[e.id] = l); - let c = l[n.id]; - void 0 === c && (c = {}, l[n.id] = c); - let h = c[s]; - void 0 === h && (h = d(i.isWebGL2 ? t.createVertexArray() : o.createVertexArrayOES()), c[s] = h); - return h - }(y, u, l); - c !== e && (c = e, h(c.object)), x = function(t, e) { - const n = c.attributes, - i = t.attributes; - let r = 0; - for (const t in i) { - const e = n[t], - o = i[t]; - if (void 0 === e) return !0; - if (e.attribute !== o) return !0; - if (e.data !== o.data) return !0; - r++ - } - return c.attributesNum !== r || c.index !== e - }(y, A), x && function(t, e) { - const n = {}, - i = t.attributes; - let r = 0; - for (const t in i) { - const e = i[t], - o = {}; - o.attribute = e, e.data && (o.data = e.data), n[t] = o, r++ - } - c.attributes = n, c.attributesNum = r, c.index = e - }(y, A) - } else { - const t = !0 === l.wireframe; - c.geometry === y.id && c.program === u.id && c.wireframe === t || (c.geometry = y.id, c.program = u.id, c.wireframe = t, x = !0) - }!0 === r.isInstancedMesh && (x = !0), null !== A && n.update(A, 34963), x && (! function(r, o, s, a) { - if (!1 === i.isWebGL2 && (r.isInstancedMesh || a.isInstancedBufferGeometry) && null === e.get("ANGLE_instanced_arrays")) return; - p(); - const l = a.attributes, - c = s.getAttributes(), - h = o.defaultAttributeValues; - for (const e in c) { - const i = c[e]; - if (i >= 0) { - const o = l[e]; - if (void 0 !== o) { - const e = o.normalized, - r = o.itemSize, - s = n.get(o); - if (void 0 === s) continue; - const l = s.buffer, - c = s.type, - h = s.bytesPerElement; - if (o.isInterleavedBufferAttribute) { - const n = o.data, - s = n.stride, - u = o.offset; - n && n.isInstancedInterleavedBuffer ? (m(i, n.meshPerAttribute), void 0 === a._maxInstanceCount && (a._maxInstanceCount = n.meshPerAttribute * n.count)) : f(i), t.bindBuffer(34962, l), v(i, r, c, e, s * h, u * h) - } else o.isInstancedBufferAttribute ? (m(i, o.meshPerAttribute), void 0 === a._maxInstanceCount && (a._maxInstanceCount = o.meshPerAttribute * o.count)) : f(i), t.bindBuffer(34962, l), v(i, r, c, e, 0, 0) - } else if ("instanceMatrix" === e) { - const e = n.get(r.instanceMatrix); - if (void 0 === e) continue; - const o = e.buffer, - s = e.type; - m(i + 0, 1), m(i + 1, 1), m(i + 2, 1), m(i + 3, 1), t.bindBuffer(34962, o), t.vertexAttribPointer(i + 0, 4, s, !1, 64, 0), t.vertexAttribPointer(i + 1, 4, s, !1, 64, 16), t.vertexAttribPointer(i + 2, 4, s, !1, 64, 32), t.vertexAttribPointer(i + 3, 4, s, !1, 64, 48) - } else if ("instanceColor" === e) { - const e = n.get(r.instanceColor); - if (void 0 === e) continue; - const o = e.buffer, - s = e.type; - m(i, 1), t.bindBuffer(34962, o), t.vertexAttribPointer(i, 3, s, !1, 12, 0) - } else if (void 0 !== h) { - const n = h[e]; - if (void 0 !== n) switch (n.length) { - case 2: - t.vertexAttrib2fv(i, n); - break; - case 3: - t.vertexAttrib3fv(i, n); - break; - case 4: - t.vertexAttrib4fv(i, n); - break; - default: - t.vertexAttrib1fv(i, n) - } - } - } - } - g() - }(r, l, u, y), null !== A && t.bindBuffer(34963, n.get(A).buffer)) - }, - reset: y, - resetDefaultState: A, - dispose: function() { - y(); - for (const t in a) { - const e = a[t]; - for (const t in e) { - const n = e[t]; - for (const t in n) u(n[t].object), delete n[t]; - delete e[t] - } - delete a[t] - } - }, - releaseStatesOfGeometry: function(t) { - if (void 0 === a[t.id]) return; - const e = a[t.id]; - for (const t in e) { - const n = e[t]; - for (const t in n) u(n[t].object), delete n[t]; - delete e[t] - } - delete a[t.id] - }, - releaseStatesOfProgram: function(t) { - for (const e in a) { - const n = a[e]; - if (void 0 === n[t.id]) continue; - const i = n[t.id]; - for (const t in i) u(i[t].object), delete i[t]; - delete n[t.id] - } - }, - initAttributes: p, - enableAttribute: f, - disableUnusedAttributes: g - } - } - - function un(t, e, n, i) { - const r = i.isWebGL2; - let o; - this.setMode = function(t) { - o = t - }, this.render = function(e, i) { - t.drawArrays(o, e, i), n.update(i, o, 1) - }, this.renderInstances = function(i, s, a) { - if (0 === a) return; - let l, c; - if (r) l = t, c = "drawArraysInstanced"; - else if (l = e.get("ANGLE_instanced_arrays"), c = "drawArraysInstancedANGLE", null === l) return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); - l[c](o, i, s, a), n.update(s, o, a) - } - } - - function dn(t, e, n) { - let i; - - function r(e) { - if ("highp" === e) { - if (t.getShaderPrecisionFormat(35633, 36338).precision > 0 && t.getShaderPrecisionFormat(35632, 36338).precision > 0) return "highp"; - e = "mediump" - } - return "mediump" === e && t.getShaderPrecisionFormat(35633, 36337).precision > 0 && t.getShaderPrecisionFormat(35632, 36337).precision > 0 ? "mediump" : "lowp" - } - const o = "undefined" != typeof WebGL2RenderingContext && t instanceof WebGL2RenderingContext || "undefined" != typeof WebGL2ComputeRenderingContext && t instanceof WebGL2ComputeRenderingContext; - let s = void 0 !== n.precision ? n.precision : "highp"; - const a = r(s); - a !== s && (console.warn("THREE.WebGLRenderer:", s, "not supported, using", a, "instead."), s = a); - const l = !0 === n.logarithmicDepthBuffer, - c = t.getParameter(34930), - h = t.getParameter(35660), - u = t.getParameter(3379), - d = t.getParameter(34076), - p = t.getParameter(34921), - f = t.getParameter(36347), - m = t.getParameter(36348), - g = t.getParameter(36349), - v = h > 0, - y = o || !!e.get("OES_texture_float"); - return { - isWebGL2: o, - getMaxAnisotropy: function() { - if (void 0 !== i) return i; - const n = e.get("EXT_texture_filter_anisotropic"); - return i = null !== n ? t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0, i - }, - getMaxPrecision: r, - precision: s, - logarithmicDepthBuffer: l, - maxTextures: c, - maxVertexTextures: h, - maxTextureSize: u, - maxCubemapSize: d, - maxAttributes: p, - maxVertexUniforms: f, - maxVaryings: m, - maxFragmentUniforms: g, - vertexTextures: v, - floatFragmentTextures: y, - floatVertexTextures: v && y, - maxSamples: o ? t.getParameter(36183) : 0 - } - } - - function pn(t) { - const e = this; - let n = null, - i = 0, - r = !1, - o = !1; - const s = new Ct, - a = new y, - l = { - value: null, - needsUpdate: !1 - }; - - function c() { - l.value !== n && (l.value = n, l.needsUpdate = i > 0), e.numPlanes = i, e.numIntersection = 0 - } - - function h(t, n, i, r) { - const o = null !== t ? t.length : 0; - let c = null; - if (0 !== o) { - if (c = l.value, !0 !== r || null === c) { - const e = i + 4 * o, - r = n.matrixWorldInverse; - a.getNormalMatrix(r), (null === c || c.length < e) && (c = new Float32Array(e)); - for (let e = 0, n = i; e !== o; ++e, n += 4) s.copy(t[e]).applyMatrix4(r, a), s.normal.toArray(c, n), c[n + 3] = s.constant - } - l.value = c, l.needsUpdate = !0 - } - return e.numPlanes = o, e.numIntersection = 0, c - } - this.uniform = l, this.numPlanes = 0, this.numIntersection = 0, this.init = function(t, e, o) { - const s = 0 !== t.length || e || 0 !== i || r; - return r = e, n = h(t, o, 0), i = t.length, s - }, this.beginShadows = function() { - o = !0, h(null) - }, this.endShadows = function() { - o = !1, c() - }, this.setState = function(e, s, a) { - const u = e.clippingPlanes, - d = e.clipIntersection, - p = e.clipShadows, - f = t.get(e); - if (!r || null === u || 0 === u.length || o && !p) o ? h(null) : c(); - else { - const t = o ? 0 : i, - e = 4 * t; - let r = f.clippingState || null; - l.value = r, r = h(u, s, e, a); - for (let t = 0; t !== e; ++t) r[t] = n[t]; - f.clippingState = r, this.numIntersection = d ? this.numPlanes : 0, this.numPlanes += t - } - } - } - - function fn(t) { - let e = new WeakMap; - - function n(t, e) { - return 303 === e ? t.mapping = 301 : 304 === e && (t.mapping = 302), t - } - - function i(t) { - const n = t.target; - n.removeEventListener("dispose", i); - const r = e.get(n); - void 0 !== r && (e.delete(n), r.dispose()) - } - return { - get: function(r) { - if (r && r.isTexture) { - const o = r.mapping; - if (303 === o || 304 === o) { - if (e.has(r)) { - return n(e.get(r).texture, r.mapping) - } { - const o = r.image; - if (o && o.height > 0) { - const s = t.getRenderList(), - a = t.getRenderTarget(), - l = new Je(o.height / 2); - return l.fromEquirectangularTexture(t, r), e.set(r, l), t.setRenderTarget(a), t.setRenderList(s), r.addEventListener("dispose", i), n(l.texture, r.mapping) - } - return null - } - } - } - return r - }, - dispose: function() { - e = new WeakMap - } - } - } - - function mn(t) { - const e = {}; - - function n(n) { - if (void 0 !== e[n]) return e[n]; - let i; - switch (n) { - case "WEBGL_depth_texture": - i = t.getExtension("WEBGL_depth_texture") || t.getExtension("MOZ_WEBGL_depth_texture") || t.getExtension("WEBKIT_WEBGL_depth_texture"); - break; - case "EXT_texture_filter_anisotropic": - i = t.getExtension("EXT_texture_filter_anisotropic") || t.getExtension("MOZ_EXT_texture_filter_anisotropic") || t.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); - break; - case "WEBGL_compressed_texture_s3tc": - i = t.getExtension("WEBGL_compressed_texture_s3tc") || t.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); - break; - case "WEBGL_compressed_texture_pvrtc": - i = t.getExtension("WEBGL_compressed_texture_pvrtc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); - break; - default: - i = t.getExtension(n) - } - return e[n] = i, i - } - return { - has: function(t) { - return null !== n(t) - }, - init: function(t) { - t.isWebGL2 ? n("EXT_color_buffer_float") : (n("WEBGL_depth_texture"), n("OES_texture_float"), n("OES_texture_half_float"), n("OES_texture_half_float_linear"), n("OES_standard_derivatives"), n("OES_element_index_uint"), n("OES_vertex_array_object"), n("ANGLE_instanced_arrays")), n("OES_texture_float_linear"), n("EXT_color_buffer_half_float") - }, - get: function(t) { - const e = n(t); - return null === e && console.warn("THREE.WebGLRenderer: " + t + " extension not supported."), e - } - } - } - - function gn(t, e, n, i) { - const r = {}, - o = new WeakMap; - - function s(t) { - const a = t.target; - null !== a.index && e.remove(a.index); - for (const t in a.attributes) e.remove(a.attributes[t]); - a.removeEventListener("dispose", s), delete r[a.id]; - const l = o.get(a); - l && (e.remove(l), o.delete(a)), i.releaseStatesOfGeometry(a), !0 === a.isInstancedBufferGeometry && delete a._maxInstanceCount, n.memory.geometries-- - } - - function a(t) { - const n = [], - i = t.index, - r = t.attributes.position; - let s = 0; - if (null !== i) { - const t = i.array; - s = i.version; - for (let e = 0, i = t.length; e < i; e += 3) { - const i = t[e + 0], - r = t[e + 1], - o = t[e + 2]; - n.push(i, r, r, o, o, i) - } - } else { - const t = r.array; - s = r.version; - for (let e = 0, i = t.length / 3 - 1; e < i; e += 3) { - const t = e + 0, - i = e + 1, - r = e + 2; - n.push(t, i, i, r, r, t) - } - } - const a = new(de(n) > 65535 ? le : se)(n, 1); - a.version = s; - const l = o.get(t); - l && e.remove(l), o.set(t, a) - } - return { - get: function(t, e) { - return !0 === r[e.id] || (e.addEventListener("dispose", s), r[e.id] = !0, n.memory.geometries++), e - }, - update: function(t) { - const n = t.attributes; - for (const t in n) e.update(n[t], 34962); - const i = t.morphAttributes; - for (const t in i) { - const n = i[t]; - for (let t = 0, i = n.length; t < i; t++) e.update(n[t], 34962) - } - }, - getWireframeAttribute: function(t) { - const e = o.get(t); - if (e) { - const n = t.index; - null !== n && e.version < n.version && a(t) - } else a(t); - return o.get(t) - } - } - } - - function vn(t, e, n, i) { - const r = i.isWebGL2; - let o, s, a; - this.setMode = function(t) { - o = t - }, this.setIndex = function(t) { - s = t.type, a = t.bytesPerElement - }, this.render = function(e, i) { - t.drawElements(o, i, s, e * a), n.update(i, o, 1) - }, this.renderInstances = function(i, l, c) { - if (0 === c) return; - let h, u; - if (r) h = t, u = "drawElementsInstanced"; - else if (h = e.get("ANGLE_instanced_arrays"), u = "drawElementsInstancedANGLE", null === h) return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); - h[u](o, l, s, i * a, c), n.update(l, o, c) - } - } - - function yn(t) { - const e = { - frame: 0, - calls: 0, - triangles: 0, - points: 0, - lines: 0 - }; - return { - memory: { - geometries: 0, - textures: 0 - }, - render: e, - programs: null, - autoReset: !0, - reset: function() { - e.frame++, e.calls = 0, e.triangles = 0, e.points = 0, e.lines = 0 - }, - update: function(t, n, i) { - switch (e.calls++, n) { - case 4: - e.triangles += i * (t / 3); - break; - case 1: - e.lines += i * (t / 2); - break; - case 3: - e.lines += i * (t - 1); - break; - case 2: - e.lines += i * t; - break; - case 0: - e.points += i * t; - break; - default: - console.error("THREE.WebGLInfo: Unknown draw mode:", n) - } - } - } - } - - function An(t, e) { - return t[0] - e[0] - } - - function xn(t, e) { - return Math.abs(e[1]) - Math.abs(t[1]) - } - - function _n(t) { - const e = {}, - n = new Float32Array(8), - i = []; - for (let t = 0; t < 8; t++) i[t] = [t, 0]; - return { - update: function(r, o, s, a) { - const l = r.morphTargetInfluences, - c = void 0 === l ? 0 : l.length; - let h = e[o.id]; - if (void 0 === h) { - h = []; - for (let t = 0; t < c; t++) h[t] = [t, 0]; - e[o.id] = h - } - for (let t = 0; t < c; t++) { - const e = h[t]; - e[0] = t, e[1] = l[t] - } - h.sort(xn); - for (let t = 0; t < 8; t++) t < c && h[t][1] ? (i[t][0] = h[t][0], i[t][1] = h[t][1]) : (i[t][0] = Number.MAX_SAFE_INTEGER, i[t][1] = 0); - i.sort(An); - const u = s.morphTargets && o.morphAttributes.position, - d = s.morphNormals && o.morphAttributes.normal; - let p = 0; - for (let t = 0; t < 8; t++) { - const e = i[t], - r = e[0], - s = e[1]; - r !== Number.MAX_SAFE_INTEGER && s ? (u && o.getAttribute("morphTarget" + t) !== u[r] && o.setAttribute("morphTarget" + t, u[r]), d && o.getAttribute("morphNormal" + t) !== d[r] && o.setAttribute("morphNormal" + t, d[r]), n[t] = s, p += s) : (u && !0 === o.hasAttribute("morphTarget" + t) && o.deleteAttribute("morphTarget" + t), d && !0 === o.hasAttribute("morphNormal" + t) && o.deleteAttribute("morphNormal" + t), n[t] = 0) - } - const f = o.morphTargetsRelative ? 1 : 1 - p; - a.getUniforms().setValue(t, "morphTargetBaseInfluence", f), a.getUniforms().setValue(t, "morphTargetInfluences", n) - } - } - } - - function bn(t, e, n, i) { - let r = new WeakMap; - - function o(t) { - const e = t.target; - e.removeEventListener("dispose", o), n.remove(e.instanceMatrix), null !== e.instanceColor && n.remove(e.instanceColor) - } - return { - update: function(t) { - const s = i.render.frame, - a = t.geometry, - l = e.get(t, a); - return r.get(l) !== s && (e.update(l), r.set(l, s)), t.isInstancedMesh && (!1 === t.hasEventListener("dispose", o) && t.addEventListener("dispose", o), n.update(t.instanceMatrix, 34962), null !== t.instanceColor && n.update(t.instanceColor, 34962)), l - }, - dispose: function() { - r = new WeakMap - } - } - } - - function wn(t = null, e = 1, n = 1, i = 1) { - b.call(this, null), this.image = { - data: t, - width: e, - height: n, - depth: i - }, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0 - } - - function Mn(t = null, e = 1, n = 1, i = 1) { - b.call(this, null), this.image = { - data: t, - width: e, - height: n, - depth: i - }, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0 - } - ln.physical = { - uniforms: We([ln.standard.uniforms, { - clearcoat: { - value: 0 - }, - clearcoatMap: { - value: null - }, - clearcoatRoughness: { - value: 0 - }, - clearcoatRoughnessMap: { - value: null - }, - clearcoatNormalScale: { - value: new v(1, 1) - }, - clearcoatNormalMap: { - value: null - }, - sheen: { - value: new Yt(0) - }, - transmission: { - value: 0 - }, - transmissionMap: { - value: null - } - }]), - vertexShader: sn.meshphysical_vert, - fragmentShader: sn.meshphysical_frag - }, wn.prototype = Object.create(b.prototype), wn.prototype.constructor = wn, wn.prototype.isDataTexture2DArray = !0, Mn.prototype = Object.create(b.prototype), Mn.prototype.constructor = Mn, Mn.prototype.isDataTexture3D = !0; - const En = new b, - Sn = new wn, - Tn = new Mn, - Ln = new Ze, - Rn = [], - Cn = [], - Pn = new Float32Array(16), - Dn = new Float32Array(9), - In = new Float32Array(4); - - function On(t, e, n) { - const i = t[0]; - if (i <= 0 || i > 0) return t; - const r = e * n; - let o = Rn[r]; - if (void 0 === o && (o = new Float32Array(r), Rn[r] = o), 0 !== e) { - i.toArray(o, 0); - for (let i = 1, r = 0; i !== e; ++i) r += n, t[i].toArray(o, r) - } - return o - } - - function Nn(t, e) { - if (t.length !== e.length) return !1; - for (let n = 0, i = t.length; n < i; n++) - if (t[n] !== e[n]) return !1; - return !0 - } - - function Bn(t, e) { - for (let n = 0, i = e.length; n < i; n++) t[n] = e[n] - } - - function Fn(t, e) { - let n = Cn[e]; - void 0 === n && (n = new Int32Array(e), Cn[e] = n); - for (let i = 0; i !== e; ++i) n[i] = t.allocateTextureUnit(); - return n - } - - function zn(t, e) { - const n = this.cache; - n[0] !== e && (t.uniform1f(this.addr, e), n[0] = e) - } - - function Un(t, e) { - const n = this.cache; - if (void 0 !== e.x) n[0] === e.x && n[1] === e.y || (t.uniform2f(this.addr, e.x, e.y), n[0] = e.x, n[1] = e.y); - else { - if (Nn(n, e)) return; - t.uniform2fv(this.addr, e), Bn(n, e) - } - } - - function Hn(t, e) { - const n = this.cache; - if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z || (t.uniform3f(this.addr, e.x, e.y, e.z), n[0] = e.x, n[1] = e.y, n[2] = e.z); - else if (void 0 !== e.r) n[0] === e.r && n[1] === e.g && n[2] === e.b || (t.uniform3f(this.addr, e.r, e.g, e.b), n[0] = e.r, n[1] = e.g, n[2] = e.b); - else { - if (Nn(n, e)) return; - t.uniform3fv(this.addr, e), Bn(n, e) - } - } - - function Gn(t, e) { - const n = this.cache; - if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z && n[3] === e.w || (t.uniform4f(this.addr, e.x, e.y, e.z, e.w), n[0] = e.x, n[1] = e.y, n[2] = e.z, n[3] = e.w); - else { - if (Nn(n, e)) return; - t.uniform4fv(this.addr, e), Bn(n, e) - } - } - - function Vn(t, e) { - const n = this.cache, - i = e.elements; - if (void 0 === i) { - if (Nn(n, e)) return; - t.uniformMatrix2fv(this.addr, !1, e), Bn(n, e) - } else { - if (Nn(n, i)) return; - In.set(i), t.uniformMatrix2fv(this.addr, !1, In), Bn(n, i) - } - } - - function kn(t, e) { - const n = this.cache, - i = e.elements; - if (void 0 === i) { - if (Nn(n, e)) return; - t.uniformMatrix3fv(this.addr, !1, e), Bn(n, e) - } else { - if (Nn(n, i)) return; - Dn.set(i), t.uniformMatrix3fv(this.addr, !1, Dn), Bn(n, i) - } - } - - function Wn(t, e) { - const n = this.cache, - i = e.elements; - if (void 0 === i) { - if (Nn(n, e)) return; - t.uniformMatrix4fv(this.addr, !1, e), Bn(n, e) - } else { - if (Nn(n, i)) return; - Pn.set(i), t.uniformMatrix4fv(this.addr, !1, Pn), Bn(n, i) - } - } - - function jn(t, e, n) { - const i = this.cache, - r = n.allocateTextureUnit(); - i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTexture2D(e || En, r) - } - - function Xn(t, e, n) { - const i = this.cache, - r = n.allocateTextureUnit(); - i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture2DArray(e || Sn, r) - } - - function qn(t, e, n) { - const i = this.cache, - r = n.allocateTextureUnit(); - i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture3D(e || Tn, r) - } - - function Yn(t, e, n) { - const i = this.cache, - r = n.allocateTextureUnit(); - i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTextureCube(e || Ln, r) - } - - function Qn(t, e) { - const n = this.cache; - n[0] !== e && (t.uniform1i(this.addr, e), n[0] = e) - } - - function Zn(t, e) { - const n = this.cache; - Nn(n, e) || (t.uniform2iv(this.addr, e), Bn(n, e)) - } - - function Jn(t, e) { - const n = this.cache; - Nn(n, e) || (t.uniform3iv(this.addr, e), Bn(n, e)) - } - - function Kn(t, e) { - const n = this.cache; - Nn(n, e) || (t.uniform4iv(this.addr, e), Bn(n, e)) - } - - function $n(t, e) { - const n = this.cache; - n[0] !== e && (t.uniform1ui(this.addr, e), n[0] = e) - } - - function ti(t, e) { - t.uniform1fv(this.addr, e) - } - - function ei(t, e) { - t.uniform1iv(this.addr, e) - } - - function ni(t, e) { - t.uniform2iv(this.addr, e) - } - - function ii(t, e) { - t.uniform3iv(this.addr, e) - } - - function ri(t, e) { - t.uniform4iv(this.addr, e) - } - - function oi(t, e) { - const n = On(e, this.size, 2); - t.uniform2fv(this.addr, n) - } - - function si(t, e) { - const n = On(e, this.size, 3); - t.uniform3fv(this.addr, n) - } - - function ai(t, e) { - const n = On(e, this.size, 4); - t.uniform4fv(this.addr, n) - } - - function li(t, e) { - const n = On(e, this.size, 4); - t.uniformMatrix2fv(this.addr, !1, n) - } - - function ci(t, e) { - const n = On(e, this.size, 9); - t.uniformMatrix3fv(this.addr, !1, n) - } - - function hi(t, e) { - const n = On(e, this.size, 16); - t.uniformMatrix4fv(this.addr, !1, n) - } - - function ui(t, e, n) { - const i = e.length, - r = Fn(n, i); - t.uniform1iv(this.addr, r); - for (let t = 0; t !== i; ++t) n.safeSetTexture2D(e[t] || En, r[t]) - } - - function di(t, e, n) { - const i = e.length, - r = Fn(n, i); - t.uniform1iv(this.addr, r); - for (let t = 0; t !== i; ++t) n.safeSetTextureCube(e[t] || Ln, r[t]) - } - - function pi(t, e, n) { - this.id = t, this.addr = n, this.cache = [], this.setValue = function(t) { - switch (t) { - case 5126: - return zn; - case 35664: - return Un; - case 35665: - return Hn; - case 35666: - return Gn; - case 35674: - return Vn; - case 35675: - return kn; - case 35676: - return Wn; - case 5124: - case 35670: - return Qn; - case 35667: - case 35671: - return Zn; - case 35668: - case 35672: - return Jn; - case 35669: - case 35673: - return Kn; - case 5125: - return $n; - case 35678: - case 36198: - case 36298: - case 36306: - case 35682: - return jn; - case 35679: - case 36299: - case 36307: - return qn; - case 35680: - case 36300: - case 36308: - case 36293: - return Yn; - case 36289: - case 36303: - case 36311: - case 36292: - return Xn - } - }(e.type) - } - - function fi(t, e, n) { - this.id = t, this.addr = n, this.cache = [], this.size = e.size, this.setValue = function(t) { - switch (t) { - case 5126: - return ti; - case 35664: - return oi; - case 35665: - return si; - case 35666: - return ai; - case 35674: - return li; - case 35675: - return ci; - case 35676: - return hi; - case 5124: - case 35670: - return ei; - case 35667: - case 35671: - return ni; - case 35668: - case 35672: - return ii; - case 35669: - case 35673: - return ri; - case 35678: - case 36198: - case 36298: - case 36306: - case 35682: - return ui; - case 35680: - case 36300: - case 36308: - case 36293: - return di - } - }(e.type) - } - - function mi(t) { - this.id = t, this.seq = [], this.map = {} - } - fi.prototype.updateCache = function(t) { - const e = this.cache; - t instanceof Float32Array && e.length !== t.length && (this.cache = new Float32Array(t.length)), Bn(e, t) - }, mi.prototype.setValue = function(t, e, n) { - const i = this.seq; - for (let r = 0, o = i.length; r !== o; ++r) { - const o = i[r]; - o.setValue(t, e[o.id], n) - } - }; - const gi = /(\w+)(\])?(\[|\.)?/g; - - function vi(t, e) { - t.seq.push(e), t.map[e.id] = e - } - - function yi(t, e, n) { - const i = t.name, - r = i.length; - for (gi.lastIndex = 0;;) { - const o = gi.exec(i), - s = gi.lastIndex; - let a = o[1]; - const l = "]" === o[2], - c = o[3]; - if (l && (a |= 0), void 0 === c || "[" === c && s + 2 === r) { - vi(n, void 0 === c ? new pi(a, t, e) : new fi(a, t, e)); - break - } { - let t = n.map[a]; - void 0 === t && (t = new mi(a), vi(n, t)), n = t - } - } - } - - function Ai(t, e) { - this.seq = [], this.map = {}; - const n = t.getProgramParameter(e, 35718); - for (let i = 0; i < n; ++i) { - const n = t.getActiveUniform(e, i); - yi(n, t.getUniformLocation(e, n.name), this) - } - } - - function xi(t, e, n) { - const i = t.createShader(e); - return t.shaderSource(i, n), t.compileShader(i), i - } - Ai.prototype.setValue = function(t, e, n, i) { - const r = this.map[e]; - void 0 !== r && r.setValue(t, n, i) - }, Ai.prototype.setOptional = function(t, e, n) { - const i = e[n]; - void 0 !== i && this.setValue(t, n, i) - }, Ai.upload = function(t, e, n, i) { - for (let r = 0, o = e.length; r !== o; ++r) { - const o = e[r], - s = n[o.id]; - !1 !== s.needsUpdate && o.setValue(t, s.value, i) - } - }, Ai.seqWithValue = function(t, e) { - const n = []; - for (let i = 0, r = t.length; i !== r; ++i) { - const r = t[i]; - r.id in e && n.push(r) - } - return n - }; - let _i = 0; - - function bi(t) { - switch (t) { - 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 ) )"]; - case 3003: - return ["LogLuv", "( value )"]; - default: - return console.warn("THREE.WebGLProgram: Unsupported encoding:", t), ["Linear", "( value )"] - } - } - - function wi(t, e, n) { - const i = t.getShaderParameter(e, 35713), - r = t.getShaderInfoLog(e).trim(); - if (i && "" === r) return ""; - return "THREE.WebGLShader: gl.getShaderInfoLog() " + n + "\n" + r + function(t) { - const e = t.split("\n"); - for (let t = 0; t < e.length; t++) e[t] = t + 1 + ": " + e[t]; - return e.join("\n") - }(t.getShaderSource(e)) - } - - function Mi(t, e) { - const n = bi(e); - return "vec4 " + t + "( vec4 value ) { return " + n[0] + "ToLinear" + n[1] + "; }" - } - - function Ei(t, e) { - const n = bi(e); - return "vec4 " + t + "( vec4 value ) { return LinearTo" + n[0] + n[1] + "; }" - } - - function Si(t, e) { - let n; - switch (e) { - case 1: - n = "Linear"; - break; - case 2: - n = "Reinhard"; - break; - case 3: - n = "OptimizedCineon"; - break; - case 4: - n = "ACESFilmic"; - break; - case 5: - n = "Custom"; - break; - default: - console.warn("THREE.WebGLProgram: Unsupported toneMapping:", e), n = "Linear" - } - return "vec3 " + t + "( vec3 color ) { return " + n + "ToneMapping( color ); }" - } - - function Ti(t) { - return "" !== t - } - - function Li(t, e) { - return t.replace(/NUM_DIR_LIGHTS/g, e.numDirLights).replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, e.numPointLights).replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows) - } - - function Ri(t, e) { - return t.replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, e.numClippingPlanes - e.numClipIntersection) - } - const Ci = /^[ \t]*#include +<([\w\d./]+)>/gm; - - function Pi(t) { - return t.replace(Ci, Di) - } - - function Di(t, e) { - const n = sn[e]; - if (void 0 === n) throw new Error("Can not resolve #include <" + e + ">"); - return Pi(n) - } - const Ii = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g, - Oi = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; - - function Ni(t) { - return t.replace(Oi, Fi).replace(Ii, Bi) - } - - function Bi(t, e, n, i) { - return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."), Fi(t, e, n, i) - } - - function Fi(t, e, n, i) { - let r = ""; - for (let t = parseInt(e); t < parseInt(n); t++) r += i.replace(/\[\s*i\s*\]/g, "[ " + t + " ]").replace(/UNROLLED_LOOP_INDEX/g, t); - return r - } - - function zi(t) { - let e = "precision " + t.precision + " float;\nprecision " + t.precision + " int;"; - return "highp" === t.precision ? e += "\n#define HIGH_PRECISION" : "mediump" === t.precision ? e += "\n#define MEDIUM_PRECISION" : "lowp" === t.precision && (e += "\n#define LOW_PRECISION"), e - } - - function Ui(t, e, n, i) { - const r = t.getContext(), - o = n.defines; - let s = n.vertexShader, - a = n.fragmentShader; - const l = function(t) { - let e = "SHADOWMAP_TYPE_BASIC"; - return 1 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF" : 2 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === t.shadowMapType && (e = "SHADOWMAP_TYPE_VSM"), e - }(n), - c = function(t) { - let e = "ENVMAP_TYPE_CUBE"; - if (t.envMap) switch (t.envMapMode) { - case 301: - case 302: - e = "ENVMAP_TYPE_CUBE"; - break; - case 306: - case 307: - e = "ENVMAP_TYPE_CUBE_UV" - } - return e - }(n), - h = function(t) { - let e = "ENVMAP_MODE_REFLECTION"; - if (t.envMap) switch (t.envMapMode) { - case 302: - case 307: - e = "ENVMAP_MODE_REFRACTION" - } - return e - }(n), - u = function(t) { - let e = "ENVMAP_BLENDING_NONE"; - if (t.envMap) switch (t.combine) { - case 0: - e = "ENVMAP_BLENDING_MULTIPLY"; - break; - case 1: - e = "ENVMAP_BLENDING_MIX"; - break; - case 2: - e = "ENVMAP_BLENDING_ADD" - } - return e - }(n), - d = t.gammaFactor > 0 ? t.gammaFactor : 1, - p = n.isWebGL2 ? "" : function(t) { - return [t.extensionDerivatives || t.envMapCubeUV || t.bumpMap || t.tangentSpaceNormalMap || t.clearcoatNormalMap || t.flatShading || "physical" === t.shaderID ? "#extension GL_OES_standard_derivatives : enable" : "", (t.extensionFragDepth || t.logarithmicDepthBuffer) && t.rendererExtensionFragDepth ? "#extension GL_EXT_frag_depth : enable" : "", t.extensionDrawBuffers && t.rendererExtensionDrawBuffers ? "#extension GL_EXT_draw_buffers : require" : "", (t.extensionShaderTextureLOD || t.envMap) && t.rendererExtensionShaderTextureLod ? "#extension GL_EXT_shader_texture_lod : enable" : ""].filter(Ti).join("\n") - }(n), - f = function(t) { - const e = []; - for (const n in t) { - const i = t[n]; - !1 !== i && e.push("#define " + n + " " + i) - } - return e.join("\n") - }(o), - m = r.createProgram(); - let g, v, y = n.glslVersion ? "#version " + n.glslVersion + "\n" : ""; - n.isRawShaderMaterial ? (g = [f].filter(Ti).join("\n"), g.length > 0 && (g += "\n"), v = [p, f].filter(Ti).join("\n"), v.length > 0 && (v += "\n")) : (g = [zi(n), "#define SHADER_NAME " + n.shaderName, f, n.instancing ? "#define USE_INSTANCING" : "", n.instancingColor ? "#define USE_INSTANCING_COLOR" : "", n.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", "#define GAMMA_FACTOR " + d, "#define MAX_BONES " + n.maxBones, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + h : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.displacementMap && n.supportsVertexTextures ? "#define USE_DISPLACEMENTMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors ? "#define USE_COLOR" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.skinning ? "#define USE_SKINNING" : "", n.useVertexTexture ? "#define BONE_TEXTURE" : "", n.morphTargets ? "#define USE_MORPHTARGETS" : "", n.morphNormals && !1 === n.flatShading ? "#define USE_MORPHNORMALS" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", "#ifdef USE_INSTANCING", "\tattribute mat4 instanceMatrix;", "#endif", "#ifdef USE_INSTANCING_COLOR", "\tattribute vec3 instanceColor;", "#endif", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "#ifdef USE_TANGENT", "\tattribute vec4 tangent;", "#endif", "#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;", "\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(Ti).join("\n"), v = [p, zi(n), "#define SHADER_NAME " + n.shaderName, f, n.alphaTest ? "#define ALPHATEST " + n.alphaTest + (n.alphaTest % 1 ? "" : ".0") : "", "#define GAMMA_FACTOR " + d, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.matcap ? "#define USE_MATCAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + c : "", n.envMap ? "#define " + h : "", n.envMap ? "#define " + u : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.sheen ? "#define USE_SHEEN" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors || n.instancingColor ? "#define USE_COLOR" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.gradientMap ? "#define USE_GRADIENTMAP" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", n.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", (n.extensionShaderTextureLOD || n.envMap) && n.rendererExtensionShaderTextureLod ? "#define TEXTURE_LOD_EXT" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", 0 !== n.toneMapping ? "#define TONE_MAPPING" : "", 0 !== n.toneMapping ? sn.tonemapping_pars_fragment : "", 0 !== n.toneMapping ? Si("toneMapping", n.toneMapping) : "", n.dithering ? "#define DITHERING" : "", sn.encodings_pars_fragment, n.map ? Mi("mapTexelToLinear", n.mapEncoding) : "", n.matcap ? Mi("matcapTexelToLinear", n.matcapEncoding) : "", n.envMap ? Mi("envMapTexelToLinear", n.envMapEncoding) : "", n.emissiveMap ? Mi("emissiveMapTexelToLinear", n.emissiveMapEncoding) : "", n.lightMap ? Mi("lightMapTexelToLinear", n.lightMapEncoding) : "", Ei("linearToOutputTexel", n.outputEncoding), n.depthPacking ? "#define DEPTH_PACKING " + n.depthPacking : "", "\n"].filter(Ti).join("\n")), s = Pi(s), s = Li(s, n), s = Ri(s, n), a = Pi(a), a = Li(a, n), a = Ri(a, n), s = Ni(s), a = Ni(a), n.isWebGL2 && !0 !== n.isRawShaderMaterial && (y = "#version 300 es\n", g = ["#define attribute in", "#define varying out", "#define texture2D texture"].join("\n") + "\n" + g, v = ["#define varying in", "300 es" === n.glslVersion ? "" : "out highp vec4 pc_fragColor;", "300 es" === n.glslVersion ? "" : "#define gl_FragColor pc_fragColor", "#define gl_FragDepthEXT gl_FragDepth", "#define texture2D texture", "#define textureCube texture", "#define texture2DProj textureProj", "#define texture2DLodEXT textureLod", "#define texture2DProjLodEXT textureProjLod", "#define textureCubeLodEXT textureLod", "#define texture2DGradEXT textureGrad", "#define texture2DProjGradEXT textureProjGrad", "#define textureCubeGradEXT textureGrad"].join("\n") + "\n" + v); - const A = y + v + a, - x = xi(r, 35633, y + g + s), - _ = xi(r, 35632, A); - if (r.attachShader(m, x), r.attachShader(m, _), void 0 !== n.index0AttributeName ? r.bindAttribLocation(m, 0, n.index0AttributeName) : !0 === n.morphTargets && r.bindAttribLocation(m, 0, "position"), r.linkProgram(m), t.debug.checkShaderErrors) { - const t = r.getProgramInfoLog(m).trim(), - e = r.getShaderInfoLog(x).trim(), - n = r.getShaderInfoLog(_).trim(); - let i = !0, - o = !0; - if (!1 === r.getProgramParameter(m, 35714)) { - i = !1; - const e = wi(r, x, "vertex"), - n = wi(r, _, "fragment"); - console.error("THREE.WebGLProgram: shader error: ", r.getError(), "35715", r.getProgramParameter(m, 35715), "gl.getProgramInfoLog", t, e, n) - } else "" !== t ? console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()", t) : "" !== e && "" !== n || (o = !1); - o && (this.diagnostics = { - runnable: i, - programLog: t, - vertexShader: { - log: e, - prefix: g - }, - fragmentShader: { - log: n, - prefix: v - } - }) - } - let b, w; - return r.deleteShader(x), r.deleteShader(_), this.getUniforms = function() { - return void 0 === b && (b = new Ai(r, m)), b - }, this.getAttributes = function() { - return void 0 === w && (w = function(t, e) { - const n = {}, - i = t.getProgramParameter(e, 35721); - for (let r = 0; r < i; r++) { - const i = t.getActiveAttrib(e, r).name; - n[i] = t.getAttribLocation(e, i) - } - return n - }(r, m)), w - }, this.destroy = function() { - i.releaseStatesOfProgram(this), r.deleteProgram(m), this.program = void 0 - }, this.name = n.shaderName, this.id = _i++, this.cacheKey = e, this.usedTimes = 1, this.program = m, this.vertexShader = x, this.fragmentShader = _, this - } - - function Hi(t, e, n, i, r, o) { - const s = [], - a = i.isWebGL2, - l = i.logarithmicDepthBuffer, - c = i.floatVertexTextures, - h = i.maxVertexUniforms, - u = i.vertexTextures; - let d = i.precision; - const p = { - MeshDepthMaterial: "depth", - MeshDistanceMaterial: "distanceRGBA", - MeshNormalMaterial: "normal", - MeshBasicMaterial: "basic", - MeshLambertMaterial: "lambert", - MeshPhongMaterial: "phong", - MeshToonMaterial: "toon", - MeshStandardMaterial: "physical", - MeshPhysicalMaterial: "physical", - MeshMatcapMaterial: "matcap", - LineBasicMaterial: "basic", - LineDashedMaterial: "dashed", - PointsMaterial: "points", - ShadowMaterial: "shadow", - SpriteMaterial: "sprite" - }, - f = ["precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "instancingColor", "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "envMapCubeUV", "lightMap", "lightMapEncoding", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "displacementMap", "specularMap", "roughnessMap", "metalnessMap", "gradientMap", "alphaMap", "combine", "vertexColors", "vertexTangents", "vertexUvs", "uvsVertexOnly", "fog", "useFog", "fogExp2", "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", "maxBones", "useVertexTexture", "morphTargets", "morphNormals", "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", "numDirLightShadows", "numPointLightShadows", "numSpotLightShadows", "shadowMapEnabled", "shadowMapType", "toneMapping", "physicallyCorrectLights", "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", "sheen", "transmissionMap"]; - - function m(t) { - let e; - return t && t.isTexture ? e = t.encoding : t && t.isWebGLRenderTarget ? (console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."), e = t.texture.encoding) : e = 3e3, e - } - return { - getParameters: function(r, s, f, g, v) { - const y = g.fog, - A = r.isMeshStandardMaterial ? g.environment : null, - x = e.get(r.envMap || A), - _ = p[r.type], - b = v.isSkinnedMesh ? function(t) { - const e = t.skeleton.bones; - if (c) return 1024; { - const t = h, - n = Math.floor((t - 20) / 4), - i = Math.min(n, e.length); - return i < e.length ? (console.warn("THREE.WebGLRenderer: Skeleton has " + e.length + " bones. This GPU supports " + i + "."), 0) : i - } - }(v) : 0; - let w, M; - if (null !== r.precision && (d = i.getMaxPrecision(r.precision), d !== r.precision && console.warn("THREE.WebGLProgram.getParameters:", r.precision, "not supported, using", d, "instead.")), _) { - const t = ln[_]; - w = t.vertexShader, M = t.fragmentShader - } else w = r.vertexShader, M = r.fragmentShader; - const E = t.getRenderTarget(); - return { - isWebGL2: a, - shaderID: _, - shaderName: r.type, - vertexShader: w, - fragmentShader: M, - defines: r.defines, - isRawShaderMaterial: !0 === r.isRawShaderMaterial, - glslVersion: r.glslVersion, - precision: d, - instancing: !0 === v.isInstancedMesh, - instancingColor: !0 === v.isInstancedMesh && null !== v.instanceColor, - supportsVertexTextures: u, - outputEncoding: null !== E ? m(E.texture) : t.outputEncoding, - map: !!r.map, - mapEncoding: m(r.map), - matcap: !!r.matcap, - matcapEncoding: m(r.matcap), - envMap: !!x, - envMapMode: x && x.mapping, - envMapEncoding: m(x), - envMapCubeUV: !!x && (306 === x.mapping || 307 === x.mapping), - lightMap: !!r.lightMap, - lightMapEncoding: m(r.lightMap), - aoMap: !!r.aoMap, - emissiveMap: !!r.emissiveMap, - emissiveMapEncoding: m(r.emissiveMap), - bumpMap: !!r.bumpMap, - normalMap: !!r.normalMap, - objectSpaceNormalMap: 1 === r.normalMapType, - tangentSpaceNormalMap: 0 === r.normalMapType, - clearcoatMap: !!r.clearcoatMap, - clearcoatRoughnessMap: !!r.clearcoatRoughnessMap, - clearcoatNormalMap: !!r.clearcoatNormalMap, - displacementMap: !!r.displacementMap, - roughnessMap: !!r.roughnessMap, - metalnessMap: !!r.metalnessMap, - specularMap: !!r.specularMap, - alphaMap: !!r.alphaMap, - gradientMap: !!r.gradientMap, - sheen: !!r.sheen, - transmissionMap: !!r.transmissionMap, - combine: r.combine, - vertexTangents: r.normalMap && r.vertexTangents, - vertexColors: r.vertexColors, - vertexUvs: !!(r.map || r.bumpMap || r.normalMap || r.specularMap || r.alphaMap || r.emissiveMap || r.roughnessMap || r.metalnessMap || r.clearcoatMap || r.clearcoatRoughnessMap || r.clearcoatNormalMap || r.displacementMap || r.transmissionMap), - uvsVertexOnly: !(r.map || r.bumpMap || r.normalMap || r.specularMap || r.alphaMap || r.emissiveMap || r.roughnessMap || r.metalnessMap || r.clearcoatNormalMap || r.transmissionMap || !r.displacementMap), - fog: !!y, - useFog: r.fog, - fogExp2: y && y.isFogExp2, - flatShading: r.flatShading, - sizeAttenuation: r.sizeAttenuation, - logarithmicDepthBuffer: l, - skinning: r.skinning && b > 0, - maxBones: b, - useVertexTexture: c, - morphTargets: r.morphTargets, - morphNormals: r.morphNormals, - maxMorphTargets: t.maxMorphTargets, - maxMorphNormals: t.maxMorphNormals, - numDirLights: s.directional.length, - numPointLights: s.point.length, - numSpotLights: s.spot.length, - numRectAreaLights: s.rectArea.length, - numHemiLights: s.hemi.length, - numDirLightShadows: s.directionalShadowMap.length, - numPointLightShadows: s.pointShadowMap.length, - numSpotLightShadows: s.spotShadowMap.length, - numClippingPlanes: o.numPlanes, - numClipIntersection: o.numIntersection, - dithering: r.dithering, - shadowMapEnabled: t.shadowMap.enabled && f.length > 0, - shadowMapType: t.shadowMap.type, - toneMapping: r.toneMapped ? t.toneMapping : 0, - physicallyCorrectLights: t.physicallyCorrectLights, - premultipliedAlpha: r.premultipliedAlpha, - alphaTest: r.alphaTest, - doubleSided: 2 === r.side, - flipSided: 1 === r.side, - depthPacking: void 0 !== r.depthPacking && r.depthPacking, - index0AttributeName: r.index0AttributeName, - extensionDerivatives: r.extensions && r.extensions.derivatives, - extensionFragDepth: r.extensions && r.extensions.fragDepth, - extensionDrawBuffers: r.extensions && r.extensions.drawBuffers, - extensionShaderTextureLOD: r.extensions && r.extensions.shaderTextureLOD, - rendererExtensionFragDepth: a || n.has("EXT_frag_depth"), - rendererExtensionDrawBuffers: a || n.has("WEBGL_draw_buffers"), - rendererExtensionShaderTextureLod: a || n.has("EXT_shader_texture_lod"), - customProgramCacheKey: r.customProgramCacheKey() - } - }, - getProgramCacheKey: function(e) { - const n = []; - if (e.shaderID ? n.push(e.shaderID) : (n.push(e.fragmentShader), n.push(e.vertexShader)), void 0 !== e.defines) - for (const t in e.defines) n.push(t), n.push(e.defines[t]); - if (!1 === e.isRawShaderMaterial) { - for (let t = 0; t < f.length; t++) n.push(e[f[t]]); - n.push(t.outputEncoding), n.push(t.gammaFactor) - } - return n.push(e.customProgramCacheKey), n.join() - }, - getUniforms: function(t) { - const e = p[t.type]; - let n; - if (e) { - const t = ln[e]; - n = je.clone(t.uniforms) - } else n = t.uniforms; - return n - }, - acquireProgram: function(e, n) { - let i; - for (let t = 0, e = s.length; t < e; t++) { - const e = s[t]; - if (e.cacheKey === n) { - i = e, ++i.usedTimes; - break - } - } - return void 0 === i && (i = new Ui(t, n, e, r), s.push(i)), i - }, - releaseProgram: function(t) { - if (0 == --t.usedTimes) { - const e = s.indexOf(t); - s[e] = s[s.length - 1], s.pop(), t.destroy() - } - }, - programs: s - } - } - - function Gi() { - let t = new WeakMap; - return { - get: function(e) { - let n = t.get(e); - return void 0 === n && (n = {}, t.set(e, n)), n - }, - remove: function(e) { - t.delete(e) - }, - update: function(e, n, i) { - t.get(e)[n] = i - }, - dispose: function() { - t = new WeakMap - } - } - } - - function Vi(t, e) { - return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.program !== e.program ? t.program.id - e.program.id : t.material.id !== e.material.id ? t.material.id - e.material.id : t.z !== e.z ? t.z - e.z : t.id - e.id - } - - function ki(t, e) { - return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.z !== e.z ? e.z - t.z : t.id - e.id - } - - function Wi(t) { - const e = []; - let n = 0; - const i = [], - r = [], - o = { - id: -1 - }; - - function s(i, r, s, a, l, c) { - let h = e[n]; - const u = t.get(s); - return void 0 === h ? (h = { - id: i.id, - object: i, - geometry: r, - material: s, - program: u.program || o, - groupOrder: a, - renderOrder: i.renderOrder, - z: l, - group: c - }, e[n] = h) : (h.id = i.id, h.object = i, h.geometry = r, h.material = s, h.program = u.program || o, h.groupOrder = a, h.renderOrder = i.renderOrder, h.z = l, h.group = c), n++, h - } - return { - opaque: i, - transparent: r, - init: function() { - n = 0, i.length = 0, r.length = 0 - }, - push: function(t, e, n, o, a, l) { - const c = s(t, e, n, o, a, l); - (!0 === n.transparent ? r : i).push(c) - }, - unshift: function(t, e, n, o, a, l) { - const c = s(t, e, n, o, a, l); - (!0 === n.transparent ? r : i).unshift(c) - }, - finish: function() { - for (let t = n, i = e.length; t < i; t++) { - const n = e[t]; - if (null === n.id) break; - n.id = null, n.object = null, n.geometry = null, n.material = null, n.program = null, n.group = null - } - }, - sort: function(t, e) { - i.length > 1 && i.sort(t || Vi), r.length > 1 && r.sort(e || ki) - } - } - } - - function ji(t) { - let e = new WeakMap; - return { - get: function(n, i) { - const r = e.get(n); - let o; - return void 0 === r ? (o = new Wi(t), e.set(n, new WeakMap), e.get(n).set(i, o)) : (o = r.get(i), void 0 === o && (o = new Wi(t), r.set(i, o))), o - }, - dispose: function() { - e = new WeakMap - } - } - } - - function Xi() { - const t = {}; - return { - get: function(e) { - if (void 0 !== t[e.id]) return t[e.id]; - let n; - switch (e.type) { - case "DirectionalLight": - n = { - direction: new T, - color: new Yt - }; - break; - case "SpotLight": - n = { - position: new T, - direction: new T, - color: new Yt, - distance: 0, - coneCos: 0, - penumbraCos: 0, - decay: 0 - }; - break; - case "PointLight": - n = { - position: new T, - color: new Yt, - distance: 0, - decay: 0 - }; - break; - case "HemisphereLight": - n = { - direction: new T, - skyColor: new Yt, - groundColor: new Yt - }; - break; - case "RectAreaLight": - n = { - color: new Yt, - position: new T, - halfWidth: new T, - halfHeight: new T - } - } - return t[e.id] = n, n - } - } - } - let qi = 0; - - function Yi(t, e) { - return (e.castShadow ? 1 : 0) - (t.castShadow ? 1 : 0) - } - - function Qi(t, e) { - const n = new Xi, - i = function() { - const t = {}; - return { - get: function(e) { - if (void 0 !== t[e.id]) return t[e.id]; - let n; - switch (e.type) { - case "DirectionalLight": - case "SpotLight": - n = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new v - }; - break; - case "PointLight": - n = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new v, - shadowCameraNear: 1, - shadowCameraFar: 1e3 - } - } - return t[e.id] = n, n - } - } - }(), - r = { - version: 0, - hash: { - directionalLength: -1, - pointLength: -1, - spotLength: -1, - rectAreaLength: -1, - hemiLength: -1, - numDirectionalShadows: -1, - numPointShadows: -1, - numSpotShadows: -1 - }, - ambient: [0, 0, 0], - probe: [], - directional: [], - directionalShadow: [], - directionalShadowMap: [], - directionalShadowMatrix: [], - spot: [], - spotShadow: [], - spotShadowMap: [], - spotShadowMatrix: [], - rectArea: [], - rectAreaLTC1: null, - rectAreaLTC2: null, - point: [], - pointShadow: [], - pointShadowMap: [], - pointShadowMatrix: [], - hemi: [] - }; - for (let t = 0; t < 9; t++) r.probe.push(new T); - const o = new T, - s = new et, - a = new et; - return { - setup: function(o) { - let s = 0, - a = 0, - l = 0; - for (let t = 0; t < 9; t++) r.probe[t].set(0, 0, 0); - let c = 0, - h = 0, - u = 0, - d = 0, - p = 0, - f = 0, - m = 0, - g = 0; - o.sort(Yi); - for (let t = 0, e = o.length; t < e; t++) { - const e = o[t], - v = e.color, - y = e.intensity, - A = e.distance, - x = e.shadow && e.shadow.map ? e.shadow.map.texture : null; - if (e.isAmbientLight) s += v.r * y, a += v.g * y, l += v.b * y; - else if (e.isLightProbe) - for (let t = 0; t < 9; t++) r.probe[t].addScaledVector(e.sh.coefficients[t], y); - else if (e.isDirectionalLight) { - const t = n.get(e); - if (t.color.copy(e.color).multiplyScalar(e.intensity), e.castShadow) { - const t = e.shadow, - n = i.get(e); - n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, r.directionalShadow[c] = n, r.directionalShadowMap[c] = x, r.directionalShadowMatrix[c] = e.shadow.matrix, f++ - } - r.directional[c] = t, c++ - } else if (e.isSpotLight) { - const t = n.get(e); - if (t.position.setFromMatrixPosition(e.matrixWorld), t.color.copy(v).multiplyScalar(y), t.distance = A, t.coneCos = Math.cos(e.angle), t.penumbraCos = Math.cos(e.angle * (1 - e.penumbra)), t.decay = e.decay, e.castShadow) { - const t = e.shadow, - n = i.get(e); - n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, r.spotShadow[u] = n, r.spotShadowMap[u] = x, r.spotShadowMatrix[u] = e.shadow.matrix, g++ - } - r.spot[u] = t, u++ - } else if (e.isRectAreaLight) { - const t = n.get(e); - t.color.copy(v).multiplyScalar(y), t.halfWidth.set(.5 * e.width, 0, 0), t.halfHeight.set(0, .5 * e.height, 0), r.rectArea[d] = t, d++ - } else if (e.isPointLight) { - const t = n.get(e); - if (t.color.copy(e.color).multiplyScalar(e.intensity), t.distance = e.distance, t.decay = e.decay, e.castShadow) { - const t = e.shadow, - n = i.get(e); - n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, n.shadowCameraNear = t.camera.near, n.shadowCameraFar = t.camera.far, r.pointShadow[h] = n, r.pointShadowMap[h] = x, r.pointShadowMatrix[h] = e.shadow.matrix, m++ - } - r.point[h] = t, h++ - } else if (e.isHemisphereLight) { - const t = n.get(e); - t.skyColor.copy(e.color).multiplyScalar(y), t.groundColor.copy(e.groundColor).multiplyScalar(y), r.hemi[p] = t, p++ - } - } - d > 0 && (e.isWebGL2 || !0 === t.has("OES_texture_float_linear") ? (r.rectAreaLTC1 = an.LTC_FLOAT_1, r.rectAreaLTC2 = an.LTC_FLOAT_2) : !0 === t.has("OES_texture_half_float_linear") ? (r.rectAreaLTC1 = an.LTC_HALF_1, r.rectAreaLTC2 = an.LTC_HALF_2) : console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")), r.ambient[0] = s, r.ambient[1] = a, r.ambient[2] = l; - const v = r.hash; - v.directionalLength === c && v.pointLength === h && v.spotLength === u && v.rectAreaLength === d && v.hemiLength === p && v.numDirectionalShadows === f && v.numPointShadows === m && v.numSpotShadows === g || (r.directional.length = c, r.spot.length = u, r.rectArea.length = d, r.point.length = h, r.hemi.length = p, r.directionalShadow.length = f, r.directionalShadowMap.length = f, r.pointShadow.length = m, r.pointShadowMap.length = m, r.spotShadow.length = g, r.spotShadowMap.length = g, r.directionalShadowMatrix.length = f, r.pointShadowMatrix.length = m, r.spotShadowMatrix.length = g, v.directionalLength = c, v.pointLength = h, v.spotLength = u, v.rectAreaLength = d, v.hemiLength = p, v.numDirectionalShadows = f, v.numPointShadows = m, v.numSpotShadows = g, r.version = qi++) - }, - setupView: function(t, e) { - let n = 0, - i = 0, - l = 0, - c = 0, - h = 0; - const u = e.matrixWorldInverse; - for (let e = 0, d = t.length; e < d; e++) { - const d = t[e]; - if (d.isDirectionalLight) { - const t = r.directional[n]; - t.direction.setFromMatrixPosition(d.matrixWorld), o.setFromMatrixPosition(d.target.matrixWorld), t.direction.sub(o), t.direction.transformDirection(u), n++ - } else if (d.isSpotLight) { - const t = r.spot[l]; - t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), t.direction.setFromMatrixPosition(d.matrixWorld), o.setFromMatrixPosition(d.target.matrixWorld), t.direction.sub(o), t.direction.transformDirection(u), l++ - } else if (d.isRectAreaLight) { - const t = r.rectArea[c]; - t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), a.identity(), s.copy(d.matrixWorld), s.premultiply(u), a.extractRotation(s), t.halfWidth.set(.5 * d.width, 0, 0), t.halfHeight.set(0, .5 * d.height, 0), t.halfWidth.applyMatrix4(a), t.halfHeight.applyMatrix4(a), c++ - } else if (d.isPointLight) { - const t = r.point[i]; - t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), i++ - } else if (d.isHemisphereLight) { - const t = r.hemi[h]; - t.direction.setFromMatrixPosition(d.matrixWorld), t.direction.transformDirection(u), t.direction.normalize(), h++ - } - } - }, - state: r - } - } - - function Zi(t, e) { - const n = new Qi(t, e), - i = [], - r = []; - return { - init: function() { - i.length = 0, r.length = 0 - }, - state: { - lightsArray: i, - shadowsArray: r, - lights: n - }, - setupLights: function() { - n.setup(i) - }, - setupLightsView: function(t) { - n.setupView(i, t) - }, - pushLight: function(t) { - i.push(t) - }, - pushShadow: function(t) { - r.push(t) - } - } - } - - function Ji(t, e) { - let n = new WeakMap; - return { - get: function(i, r = 0) { - let o; - return !1 === n.has(i) ? (o = new Zi(t, e), n.set(i, []), n.get(i).push(o)) : r >= n.get(i).length ? (o = new Zi(t, e), n.get(i).push(o)) : o = n.get(i)[r], o - }, - dispose: function() { - n = new WeakMap - } - } - } - - function Ki(t) { - Jt.call(this), this.type = "MeshDepthMaterial", this.depthPacking = 3200, this.skinning = !1, this.morphTargets = !1, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.setValues(t) - } - - function $i(t) { - Jt.call(this), this.type = "MeshDistanceMaterial", this.referencePosition = new T, this.nearDistance = 1, this.farDistance = 1e3, this.skinning = !1, this.morphTargets = !1, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.fog = !1, this.setValues(t) - } - Ki.prototype = Object.create(Jt.prototype), Ki.prototype.constructor = Ki, Ki.prototype.isMeshDepthMaterial = !0, Ki.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.depthPacking = t.depthPacking, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this - }, $i.prototype = Object.create(Jt.prototype), $i.prototype.constructor = $i, $i.prototype.isMeshDistanceMaterial = !0, $i.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.referencePosition.copy(t.referencePosition), this.nearDistance = t.nearDistance, this.farDistance = t.farDistance, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this - }; - - function tr(t, e, n) { - let i = new en; - const r = new v, - o = new v, - s = new M, - a = [], - l = [], - c = {}, - h = { - 0: 1, - 1: 0, - 2: 2 - }, - u = new Xe({ - defines: { - SAMPLE_RATE: 2 / 8, - HALF_SAMPLE_RATE: 1 / 8 - }, - uniforms: { - shadow_pass: { - value: null - }, - resolution: { - value: new v - }, - radius: { - value: 4 - } - }, - vertexShader: "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}", - fragmentShader: "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}" - }), - d = u.clone(); - d.defines.HORIZONTAL_PASS = 1; - const p = new be; - p.setAttribute("position", new ee(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]), 3)); - const f = new He(p, u), - m = this; - - function g(n, i) { - const r = e.update(f); - u.uniforms.shadow_pass.value = n.map.texture, u.uniforms.resolution.value = n.mapSize, u.uniforms.radius.value = n.radius, t.setRenderTarget(n.mapPass), t.clear(), t.renderBufferDirect(i, null, r, u, f, null), d.uniforms.shadow_pass.value = n.mapPass.texture, d.uniforms.resolution.value = n.mapSize, d.uniforms.radius.value = n.radius, t.setRenderTarget(n.map), t.clear(), t.renderBufferDirect(i, null, r, d, f, null) - } - - function y(t, e, n) { - const i = t << 0 | e << 1 | n << 2; - let r = a[i]; - return void 0 === r && (r = new Ki({ - depthPacking: 3201, - morphTargets: t, - skinning: e - }), a[i] = r), r - } - - function A(t, e, n) { - const i = t << 0 | e << 1 | n << 2; - let r = l[i]; - return void 0 === r && (r = new $i({ - morphTargets: t, - skinning: e - }), l[i] = r), r - } - - function x(e, n, i, r, o, s, a) { - let l = null, - u = y, - d = e.customDepthMaterial; - if (!0 === r.isPointLight && (u = A, d = e.customDistanceMaterial), void 0 === d) { - let t = !1; - !0 === i.morphTargets && (t = n.morphAttributes && n.morphAttributes.position && n.morphAttributes.position.length > 0); - let r = !1; - !0 === e.isSkinnedMesh && (!0 === i.skinning ? r = !0 : console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:", e)); - l = u(t, r, !0 === e.isInstancedMesh) - } else l = d; - if (t.localClippingEnabled && !0 === i.clipShadows && 0 !== i.clippingPlanes.length) { - const t = l.uuid, - e = i.uuid; - let n = c[t]; - void 0 === n && (n = {}, c[t] = n); - let r = n[e]; - void 0 === r && (r = l.clone(), n[e] = r), l = r - } - return l.visible = i.visible, l.wireframe = i.wireframe, l.side = 3 === a ? null !== i.shadowSide ? i.shadowSide : i.side : null !== i.shadowSide ? i.shadowSide : h[i.side], l.clipShadows = i.clipShadows, l.clippingPlanes = i.clippingPlanes, l.clipIntersection = i.clipIntersection, l.wireframeLinewidth = i.wireframeLinewidth, l.linewidth = i.linewidth, !0 === r.isPointLight && !0 === l.isMeshDistanceMaterial && (l.referencePosition.setFromMatrixPosition(r.matrixWorld), l.nearDistance = o, l.farDistance = s), l - } - - function _(n, r, o, s, a) { - if (!1 === n.visible) return; - if (n.layers.test(r.layers) && (n.isMesh || n.isLine || n.isPoints) && (n.castShadow || n.receiveShadow && 3 === a) && (!n.frustumCulled || i.intersectsObject(n))) { - n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse, n.matrixWorld); - const i = e.update(n), - r = n.material; - if (Array.isArray(r)) { - const e = i.groups; - for (let l = 0, c = e.length; l < c; l++) { - const c = e[l], - h = r[c.materialIndex]; - if (h && h.visible) { - const e = x(n, i, h, s, o.near, o.far, a); - t.renderBufferDirect(o, null, i, e, n, c) - } - } - } else if (r.visible) { - const e = x(n, i, r, s, o.near, o.far, a); - t.renderBufferDirect(o, null, i, e, n, null) - } - } - const l = n.children; - for (let t = 0, e = l.length; t < e; t++) _(l[t], r, o, s, a) - } - this.enabled = !1, this.autoUpdate = !0, this.needsUpdate = !1, this.type = 1, this.render = function(e, a, l) { - if (!1 === m.enabled) return; - if (!1 === m.autoUpdate && !1 === m.needsUpdate) return; - if (0 === e.length) return; - const c = t.getRenderTarget(), - h = t.getActiveCubeFace(), - u = t.getActiveMipmapLevel(), - d = t.state; - d.setBlending(0), d.buffers.color.setClear(1, 1, 1, 1), d.buffers.depth.setTest(!0), d.setScissorTest(!1); - for (let c = 0, h = e.length; c < h; c++) { - const h = e[c], - u = h.shadow; - if (void 0 === u) { - console.warn("THREE.WebGLShadowMap:", h, "has no shadow."); - continue - } - if (!1 === u.autoUpdate && !1 === u.needsUpdate) continue; - r.copy(u.mapSize); - const p = u.getFrameExtents(); - if (r.multiply(p), o.copy(u.mapSize), (r.x > n || r.y > n) && (r.x > n && (o.x = Math.floor(n / p.x), r.x = o.x * p.x, u.mapSize.x = o.x), r.y > n && (o.y = Math.floor(n / p.y), r.y = o.y * p.y, u.mapSize.y = o.y)), null === u.map && !u.isPointLightShadow && 3 === this.type) { - const t = { - minFilter: 1006, - magFilter: 1006, - format: 1023 - }; - u.map = new E(r.x, r.y, t), u.map.texture.name = h.name + ".shadowMap", u.mapPass = new E(r.x, r.y, t), u.camera.updateProjectionMatrix() - } - if (null === u.map) { - const t = { - minFilter: 1003, - magFilter: 1003, - format: 1023 - }; - u.map = new E(r.x, r.y, t), u.map.texture.name = h.name + ".shadowMap", u.camera.updateProjectionMatrix() - } - t.setRenderTarget(u.map), t.clear(); - const f = u.getViewportCount(); - for (let t = 0; t < f; t++) { - const e = u.getViewport(t); - s.set(o.x * e.x, o.y * e.y, o.x * e.z, o.y * e.w), d.viewport(s), u.updateMatrices(h, t), i = u.getFrustum(), _(a, l, u.camera, h, this.type) - } - u.isPointLightShadow || 3 !== this.type || g(u, l), u.needsUpdate = !1 - } - m.needsUpdate = !1, t.setRenderTarget(c, h, u) - } - } - - function er(t, e, n) { - const i = n.isWebGL2; - const r = new function() { - let e = !1; - const n = new M; - let i = null; - const r = new M(0, 0, 0, 0); - return { - setMask: function(n) { - i === n || e || (t.colorMask(n, n, n, n), i = n) - }, - setLocked: function(t) { - e = t - }, - setClear: function(e, i, o, s, a) { - !0 === a && (e *= s, i *= s, o *= s), n.set(e, i, o, s), !1 === r.equals(n) && (t.clearColor(e, i, o, s), r.copy(n)) - }, - reset: function() { - e = !1, i = null, r.set(-1, 0, 0, 0) - } - } - }, - o = new function() { - let e = !1, - n = null, - i = null, - r = null; - return { - setTest: function(t) { - t ? O(2929) : N(2929) - }, - setMask: function(i) { - n === i || e || (t.depthMask(i), n = i) - }, - setFunc: function(e) { - if (i !== e) { - if (e) switch (e) { - case 0: - t.depthFunc(512); - break; - case 1: - t.depthFunc(519); - break; - case 2: - t.depthFunc(513); - break; - case 3: - t.depthFunc(515); - break; - case 4: - t.depthFunc(514); - break; - case 5: - t.depthFunc(518); - break; - case 6: - t.depthFunc(516); - break; - case 7: - t.depthFunc(517); - break; - default: - t.depthFunc(515) - } else t.depthFunc(515); - i = e - } - }, - setLocked: function(t) { - e = t - }, - setClear: function(e) { - r !== e && (t.clearDepth(e), r = e) - }, - reset: function() { - e = !1, n = null, i = null, r = null - } - } - }, - s = new function() { - let e = !1, - n = null, - i = null, - r = null, - o = null, - s = null, - a = null, - l = null, - c = null; - return { - setTest: function(t) { - e || (t ? O(2960) : N(2960)) - }, - setMask: function(i) { - n === i || e || (t.stencilMask(i), n = i) - }, - setFunc: function(e, n, s) { - i === e && r === n && o === s || (t.stencilFunc(e, n, s), i = e, r = n, o = s) - }, - setOp: function(e, n, i) { - s === e && a === n && l === i || (t.stencilOp(e, n, i), s = e, a = n, l = i) - }, - setLocked: function(t) { - e = t - }, - setClear: function(e) { - c !== e && (t.clearStencil(e), c = e) - }, - reset: function() { - e = !1, n = null, i = null, r = null, o = null, s = null, a = null, l = null, c = null - } - } - }; - let a = {}, - l = null, - c = null, - h = null, - u = null, - d = null, - p = null, - f = null, - m = null, - g = null, - v = !1, - y = null, - A = null, - x = null, - _ = null, - b = null; - const w = t.getParameter(35661); - let E = !1, - S = 0; - const T = t.getParameter(7938); - 1 !== T.indexOf("WebGL") ? (S = parseFloat(/^WebGL (\d)/.exec(T)[1]), E = S >= 1) : -1 !== T.indexOf("OpenGL ES") && (S = parseFloat(/^OpenGL ES (\d)/.exec(T)[1]), E = S >= 2); - let L = null, - R = {}; - const C = new M, - P = new M; - - function D(e, n, i) { - const r = new Uint8Array(4), - o = t.createTexture(); - t.bindTexture(e, o), t.texParameteri(e, 10241, 9728), t.texParameteri(e, 10240, 9728); - for (let e = 0; e < i; e++) t.texImage2D(n + e, 0, 6408, 1, 1, 0, 6408, 5121, r); - return o - } - const I = {}; - - function O(e) { - !0 !== a[e] && (t.enable(e), a[e] = !0) - } - - function N(e) { - !1 !== a[e] && (t.disable(e), a[e] = !1) - } - I[3553] = D(3553, 3553, 1), I[34067] = D(34067, 34069, 6), r.setClear(0, 0, 0, 1), o.setClear(1), s.setClear(0), O(2929), o.setFunc(3), U(!1), H(1), O(2884), z(0); - const B = { - 100: 32774, - 101: 32778, - 102: 32779 - }; - if (i) B[103] = 32775, B[104] = 32776; - else { - const t = e.get("EXT_blend_minmax"); - null !== t && (B[103] = t.MIN_EXT, B[104] = t.MAX_EXT) - } - const F = { - 200: 0, - 201: 1, - 202: 768, - 204: 770, - 210: 776, - 208: 774, - 206: 772, - 203: 769, - 205: 771, - 209: 775, - 207: 773 - }; - - function z(e, n, i, r, o, s, a, l) { - if (0 !== e) { - if (c || (O(3042), c = !0), 5 === e) o = o || n, s = s || i, a = a || r, n === u && o === f || (t.blendEquationSeparate(B[n], B[o]), u = n, f = o), i === d && r === p && s === m && a === g || (t.blendFuncSeparate(F[i], F[r], F[s], F[a]), d = i, p = r, m = s, g = a), h = e, v = null; - else if (e !== h || l !== v) { - if (100 === u && 100 === f || (t.blendEquation(32774), u = 100, f = 100), l) switch (e) { - case 1: - t.blendFuncSeparate(1, 771, 1, 771); - break; - case 2: - t.blendFunc(1, 1); - break; - case 3: - t.blendFuncSeparate(0, 0, 769, 771); - break; - case 4: - t.blendFuncSeparate(0, 768, 0, 770); - break; - default: - console.error("THREE.WebGLState: Invalid blending: ", e) - } else switch (e) { - case 1: - t.blendFuncSeparate(770, 771, 1, 771); - break; - case 2: - t.blendFunc(770, 1); - break; - case 3: - t.blendFunc(0, 769); - break; - case 4: - t.blendFunc(0, 768); - break; - default: - console.error("THREE.WebGLState: Invalid blending: ", e) - } - d = null, p = null, m = null, g = null, h = e, v = l - } - } else c && (N(3042), c = !1) - } - - function U(e) { - y !== e && (e ? t.frontFace(2304) : t.frontFace(2305), y = e) - } - - function H(e) { - 0 !== e ? (O(2884), e !== A && (1 === e ? t.cullFace(1029) : 2 === e ? t.cullFace(1028) : t.cullFace(1032))) : N(2884), A = e - } - - function G(e, n, i) { - e ? (O(32823), _ === n && b === i || (t.polygonOffset(n, i), _ = n, b = i)) : N(32823) - } - - function V(e) { - void 0 === e && (e = 33984 + w - 1), L !== e && (t.activeTexture(e), L = e) - } - return { - buffers: { - color: r, - depth: o, - stencil: s - }, - enable: O, - disable: N, - useProgram: function(e) { - return l !== e && (t.useProgram(e), l = e, !0) - }, - setBlending: z, - setMaterial: function(t, e) { - 2 === t.side ? N(2884) : O(2884); - let n = 1 === t.side; - e && (n = !n), U(n), 1 === t.blending && !1 === t.transparent ? z(0) : z(t.blending, t.blendEquation, t.blendSrc, t.blendDst, t.blendEquationAlpha, t.blendSrcAlpha, t.blendDstAlpha, t.premultipliedAlpha), o.setFunc(t.depthFunc), o.setTest(t.depthTest), o.setMask(t.depthWrite), r.setMask(t.colorWrite); - const i = t.stencilWrite; - s.setTest(i), i && (s.setMask(t.stencilWriteMask), s.setFunc(t.stencilFunc, t.stencilRef, t.stencilFuncMask), s.setOp(t.stencilFail, t.stencilZFail, t.stencilZPass)), G(t.polygonOffset, t.polygonOffsetFactor, t.polygonOffsetUnits) - }, - setFlipSided: U, - setCullFace: H, - setLineWidth: function(e) { - e !== x && (E && t.lineWidth(e), x = e) - }, - setPolygonOffset: G, - setScissorTest: function(t) { - t ? O(3089) : N(3089) - }, - activeTexture: V, - bindTexture: function(e, n) { - null === L && V(); - let i = R[L]; - void 0 === i && (i = { - type: void 0, - texture: void 0 - }, R[L] = i), i.type === e && i.texture === n || (t.bindTexture(e, n || I[e]), i.type = e, i.texture = n) - }, - unbindTexture: function() { - const e = R[L]; - void 0 !== e && void 0 !== e.type && (t.bindTexture(e.type, null), e.type = void 0, e.texture = void 0) - }, - compressedTexImage2D: function() { - try { - t.compressedTexImage2D.apply(t, arguments) - } catch (t) { - console.error("THREE.WebGLState:", t) - } - }, - texImage2D: function() { - try { - t.texImage2D.apply(t, arguments) - } catch (t) { - console.error("THREE.WebGLState:", t) - } - }, - texImage3D: function() { - try { - t.texImage3D.apply(t, arguments) - } catch (t) { - console.error("THREE.WebGLState:", t) - } - }, - scissor: function(e) { - !1 === C.equals(e) && (t.scissor(e.x, e.y, e.z, e.w), C.copy(e)) - }, - viewport: function(e) { - !1 === P.equals(e) && (t.viewport(e.x, e.y, e.z, e.w), P.copy(e)) - }, - reset: function() { - a = {}, L = null, R = {}, l = null, c = null, h = null, u = null, d = null, p = null, f = null, m = null, g = null, v = !1, y = null, A = null, x = null, _ = null, b = null, r.reset(), o.reset(), s.reset() - } - } - } - - function nr(t, e, n, i, r, o, s) { - const a = r.isWebGL2, - l = r.maxTextures, - c = r.maxCubemapSize, - h = r.maxTextureSize, - u = r.maxSamples, - d = new WeakMap; - let p, f = !1; - try { - f = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1, 1).getContext("2d") - } catch (t) {} - - function m(t, e) { - return f ? new OffscreenCanvas(t, e) : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") - } - - function v(t, e, n, i) { - let r = 1; - if ((t.width > i || t.height > i) && (r = i / Math.max(t.width, t.height)), r < 1 || !0 === e) { - if ("undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap) { - const i = e ? g.floorPowerOfTwo : Math.floor, - o = i(r * t.width), - s = i(r * t.height); - void 0 === p && (p = m(o, s)); - const a = n ? m(o, s) : p; - a.width = o, a.height = s; - return a.getContext("2d").drawImage(t, 0, 0, o, s), console.warn("THREE.WebGLRenderer: Texture has been resized from (" + t.width + "x" + t.height + ") to (" + o + "x" + s + ")."), a - } - return "data" in t && console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + t.width + "x" + t.height + ")."), t - } - return t - } - - function y(t) { - return g.isPowerOfTwo(t.width) && g.isPowerOfTwo(t.height) - } - - function A(t, e) { - return t.generateMipmaps && e && 1003 !== t.minFilter && 1006 !== t.minFilter - } - - function x(e, n, r, o) { - t.generateMipmap(e); - i.get(n).__maxMipLevel = Math.log(Math.max(r, o)) * Math.LOG2E - } - - function _(n, i, r) { - if (!1 === a) return i; - if (null !== n) { - if (void 0 !== t[n]) return t[n]; - console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + n + "'") - } - let o = i; - return 6403 === i && (5126 === r && (o = 33326), 5131 === r && (o = 33325), 5121 === r && (o = 33321)), 6407 === i && (5126 === r && (o = 34837), 5131 === r && (o = 34843), 5121 === r && (o = 32849)), 6408 === i && (5126 === r && (o = 34836), 5131 === r && (o = 34842), 5121 === r && (o = 32856)), 33325 !== o && 33326 !== o && 34842 !== o && 34836 !== o || e.get("EXT_color_buffer_float"), o - } - - function b(t) { - return 1003 === t || 1004 === t || 1005 === t ? 9728 : 9729 - } - - function w(e) { - const n = e.target; - n.removeEventListener("dispose", w), - function(e) { - const n = i.get(e); - if (void 0 === n.__webglInit) return; - t.deleteTexture(n.__webglTexture), i.remove(e) - }(n), n.isVideoTexture && d.delete(n), s.memory.textures-- - } - - function M(e) { - const n = e.target; - n.removeEventListener("dispose", M), - function(e) { - const n = i.get(e), - r = i.get(e.texture); - if (!e) return; - void 0 !== r.__webglTexture && t.deleteTexture(r.__webglTexture); - e.depthTexture && e.depthTexture.dispose(); - if (e.isWebGLCubeRenderTarget) - for (let e = 0; e < 6; e++) t.deleteFramebuffer(n.__webglFramebuffer[e]), n.__webglDepthbuffer && t.deleteRenderbuffer(n.__webglDepthbuffer[e]); - else t.deleteFramebuffer(n.__webglFramebuffer), n.__webglDepthbuffer && t.deleteRenderbuffer(n.__webglDepthbuffer), n.__webglMultisampledFramebuffer && t.deleteFramebuffer(n.__webglMultisampledFramebuffer), n.__webglColorRenderbuffer && t.deleteRenderbuffer(n.__webglColorRenderbuffer), n.__webglDepthRenderbuffer && t.deleteRenderbuffer(n.__webglDepthRenderbuffer); - i.remove(e.texture), i.remove(e) - }(n), s.memory.textures-- - } - let E = 0; - - function S(t, e) { - const r = i.get(t); - if (t.isVideoTexture && function(t) { - const e = s.render.frame; - d.get(t) !== e && (d.set(t, e), t.update()) - }(t), t.version > 0 && r.__version !== t.version) { - const n = t.image; - if (void 0 === n) console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined"); - else { - if (!1 !== n.complete) return void D(r, t, e); - console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete") - } - } - n.activeTexture(33984 + e), n.bindTexture(3553, r.__webglTexture) - } - - function T(e, r) { - const s = i.get(e); - e.version > 0 && s.__version !== e.version ? function(e, i, r) { - if (6 !== i.image.length) return; - P(e, i), n.activeTexture(33984 + r), n.bindTexture(34067, e.__webglTexture), t.pixelStorei(37440, i.flipY), t.pixelStorei(37441, i.premultiplyAlpha), t.pixelStorei(3317, i.unpackAlignment); - const s = i && (i.isCompressedTexture || i.image[0].isCompressedTexture), - l = i.image[0] && i.image[0].isDataTexture, - h = []; - for (let t = 0; t < 6; t++) h[t] = s || l ? l ? i.image[t].image : i.image[t] : v(i.image[t], !1, !0, c); - const u = h[0], - d = y(u) || a, - p = o.convert(i.format), - f = o.convert(i.type), - m = _(i.internalFormat, p, f); - let g; - if (C(34067, i, d), s) { - for (let t = 0; t < 6; t++) { - g = h[t].mipmaps; - for (let e = 0; e < g.length; e++) { - const r = g[e]; - 1023 !== i.format && 1022 !== i.format ? null !== p ? n.compressedTexImage2D(34069 + t, e, m, r.width, r.height, 0, r.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()") : n.texImage2D(34069 + t, e, m, r.width, r.height, 0, p, f, r.data) - } - } - e.__maxMipLevel = g.length - 1 - } else { - g = i.mipmaps; - for (let t = 0; t < 6; t++) - if (l) { - n.texImage2D(34069 + t, 0, m, h[t].width, h[t].height, 0, p, f, h[t].data); - for (let e = 0; e < g.length; e++) { - const i = g[e].image[t].image; - n.texImage2D(34069 + t, e + 1, m, i.width, i.height, 0, p, f, i.data) - } - } else { - n.texImage2D(34069 + t, 0, m, p, f, h[t]); - for (let e = 0; e < g.length; e++) { - const i = g[e]; - n.texImage2D(34069 + t, e + 1, m, p, f, i.image[t]) - } - } e.__maxMipLevel = g.length - } - A(i, d) && x(34067, i, u.width, u.height); - e.__version = i.version, i.onUpdate && i.onUpdate(i) - }(s, e, r) : (n.activeTexture(33984 + r), n.bindTexture(34067, s.__webglTexture)) - } - const L = { - 1e3: 10497, - 1001: 33071, - 1002: 33648 - }, - R = { - 1003: 9728, - 1004: 9984, - 1005: 9986, - 1006: 9729, - 1007: 9985, - 1008: 9987 - }; - - function C(n, o, s) { - s ? (t.texParameteri(n, 10242, L[o.wrapS]), t.texParameteri(n, 10243, L[o.wrapT]), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, L[o.wrapR]), t.texParameteri(n, 10240, R[o.magFilter]), t.texParameteri(n, 10241, R[o.minFilter])) : (t.texParameteri(n, 10242, 33071), t.texParameteri(n, 10243, 33071), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, 33071), 1001 === o.wrapS && 1001 === o.wrapT || console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."), t.texParameteri(n, 10240, b(o.magFilter)), t.texParameteri(n, 10241, b(o.minFilter)), 1003 !== o.minFilter && 1006 !== o.minFilter && console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")); - const l = e.get("EXT_texture_filter_anisotropic"); - if (l) { - if (1015 === o.type && null === e.get("OES_texture_float_linear")) return; - if (1016 === o.type && null === (a || e.get("OES_texture_half_float_linear"))) return; - (o.anisotropy > 1 || i.get(o).__currentAnisotropy) && (t.texParameterf(n, l.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(o.anisotropy, r.getMaxAnisotropy())), i.get(o).__currentAnisotropy = o.anisotropy) - } - } - - function P(e, n) { - void 0 === e.__webglInit && (e.__webglInit = !0, n.addEventListener("dispose", w), e.__webglTexture = t.createTexture(), s.memory.textures++) - } - - function D(e, i, r) { - let s = 3553; - i.isDataTexture2DArray && (s = 35866), i.isDataTexture3D && (s = 32879), P(e, i), n.activeTexture(33984 + r), n.bindTexture(s, e.__webglTexture), t.pixelStorei(37440, i.flipY), t.pixelStorei(37441, i.premultiplyAlpha), t.pixelStorei(3317, i.unpackAlignment); - const l = function(t) { - return !a && (1001 !== t.wrapS || 1001 !== t.wrapT || 1003 !== t.minFilter && 1006 !== t.minFilter) - }(i) && !1 === y(i.image), - c = v(i.image, l, !1, h), - u = y(c) || a, - d = o.convert(i.format); - let p, f = o.convert(i.type), - m = _(i.internalFormat, d, f); - C(s, i, u); - const g = i.mipmaps; - if (i.isDepthTexture) m = 6402, a ? m = 1015 === i.type ? 36012 : 1014 === i.type ? 33190 : 1020 === i.type ? 35056 : 33189 : 1015 === i.type && console.error("WebGLRenderer: Floating point depth texture requires WebGL2."), 1026 === i.format && 6402 === m && 1012 !== i.type && 1014 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."), i.type = 1012, f = o.convert(i.type)), 1027 === i.format && 6402 === m && (m = 34041, 1020 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."), i.type = 1020, f = o.convert(i.type))), n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, null); - else if (i.isDataTexture) - if (g.length > 0 && u) { - for (let t = 0, e = g.length; t < e; t++) p = g[t], n.texImage2D(3553, t, m, p.width, p.height, 0, d, f, p.data); - i.generateMipmaps = !1, e.__maxMipLevel = g.length - 1 - } else n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, c.data), e.__maxMipLevel = 0; - else if (i.isCompressedTexture) { - for (let t = 0, e = g.length; t < e; t++) p = g[t], 1023 !== i.format && 1022 !== i.format ? null !== d ? n.compressedTexImage2D(3553, t, m, p.width, p.height, 0, p.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : n.texImage2D(3553, t, m, p.width, p.height, 0, d, f, p.data); - e.__maxMipLevel = g.length - 1 - } else if (i.isDataTexture2DArray) n.texImage3D(35866, 0, m, c.width, c.height, c.depth, 0, d, f, c.data), e.__maxMipLevel = 0; - else if (i.isDataTexture3D) n.texImage3D(32879, 0, m, c.width, c.height, c.depth, 0, d, f, c.data), e.__maxMipLevel = 0; - else if (g.length > 0 && u) { - for (let t = 0, e = g.length; t < e; t++) p = g[t], n.texImage2D(3553, t, m, d, f, p); - i.generateMipmaps = !1, e.__maxMipLevel = g.length - 1 - } else n.texImage2D(3553, 0, m, d, f, c), e.__maxMipLevel = 0; - A(i, u) && x(s, i, c.width, c.height), e.__version = i.version, i.onUpdate && i.onUpdate(i) - } - - function I(e, r, s, a) { - const l = o.convert(r.texture.format), - c = o.convert(r.texture.type), - h = _(r.texture.internalFormat, l, c); - n.texImage2D(a, 0, h, r.width, r.height, 0, l, c, null), t.bindFramebuffer(36160, e), t.framebufferTexture2D(36160, s, a, i.get(r.texture).__webglTexture, 0), t.bindFramebuffer(36160, null) - } - - function O(e, n, i) { - if (t.bindRenderbuffer(36161, e), n.depthBuffer && !n.stencilBuffer) { - let r = 33189; - if (i) { - const e = n.depthTexture; - e && e.isDepthTexture && (1015 === e.type ? r = 36012 : 1014 === e.type && (r = 33190)); - const i = B(n); - t.renderbufferStorageMultisample(36161, i, r, n.width, n.height) - } else t.renderbufferStorage(36161, r, n.width, n.height); - t.framebufferRenderbuffer(36160, 36096, 36161, e) - } else if (n.depthBuffer && n.stencilBuffer) { - if (i) { - const e = B(n); - t.renderbufferStorageMultisample(36161, e, 35056, n.width, n.height) - } else t.renderbufferStorage(36161, 34041, n.width, n.height); - t.framebufferRenderbuffer(36160, 33306, 36161, e) - } else { - const e = o.convert(n.texture.format), - r = o.convert(n.texture.type), - s = _(n.texture.internalFormat, e, r); - if (i) { - const e = B(n); - t.renderbufferStorageMultisample(36161, e, s, n.width, n.height) - } else t.renderbufferStorage(36161, s, n.width, n.height) - } - t.bindRenderbuffer(36161, null) - } - - function N(e) { - const n = i.get(e), - r = !0 === e.isWebGLCubeRenderTarget; - if (e.depthTexture) { - if (r) throw new Error("target.depthTexture not supported in Cube render targets"); - ! function(e, n) { - if (n && n.isWebGLCubeRenderTarget) throw new Error("Depth Texture with cube render targets is not supported"); - if (t.bindFramebuffer(36160, e), !n.depthTexture || !n.depthTexture.isDepthTexture) throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); - i.get(n.depthTexture).__webglTexture && n.depthTexture.image.width === n.width && n.depthTexture.image.height === n.height || (n.depthTexture.image.width = n.width, n.depthTexture.image.height = n.height, n.depthTexture.needsUpdate = !0), S(n.depthTexture, 0); - const r = i.get(n.depthTexture).__webglTexture; - if (1026 === n.depthTexture.format) t.framebufferTexture2D(36160, 36096, 3553, r, 0); - else { - if (1027 !== n.depthTexture.format) throw new Error("Unknown depthTexture format"); - t.framebufferTexture2D(36160, 33306, 3553, r, 0) - } - }(n.__webglFramebuffer, e) - } else if (r) { - n.__webglDepthbuffer = []; - for (let i = 0; i < 6; i++) t.bindFramebuffer(36160, n.__webglFramebuffer[i]), n.__webglDepthbuffer[i] = t.createRenderbuffer(), O(n.__webglDepthbuffer[i], e, !1) - } else t.bindFramebuffer(36160, n.__webglFramebuffer), n.__webglDepthbuffer = t.createRenderbuffer(), O(n.__webglDepthbuffer, e, !1); - t.bindFramebuffer(36160, null) - } - - function B(t) { - return a && t.isWebGLMultisampleRenderTarget ? Math.min(u, t.samples) : 0 - } - let F = !1, - z = !1; - this.allocateTextureUnit = function() { - const t = E; - return t >= l && console.warn("THREE.WebGLTextures: Trying to use " + t + " texture units while this GPU supports only " + l), E += 1, t - }, this.resetTextureUnits = function() { - E = 0 - }, this.setTexture2D = S, this.setTexture2DArray = function(t, e) { - const r = i.get(t); - t.version > 0 && r.__version !== t.version ? D(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(35866, r.__webglTexture)) - }, this.setTexture3D = function(t, e) { - const r = i.get(t); - t.version > 0 && r.__version !== t.version ? D(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(32879, r.__webglTexture)) - }, this.setTextureCube = T, this.setupRenderTarget = function(e) { - const r = i.get(e), - l = i.get(e.texture); - e.addEventListener("dispose", M), l.__webglTexture = t.createTexture(), s.memory.textures++; - const c = !0 === e.isWebGLCubeRenderTarget, - h = !0 === e.isWebGLMultisampleRenderTarget, - u = y(e) || a; - if (!a || 1022 !== e.texture.format || 1015 !== e.texture.type && 1016 !== e.texture.type || (e.texture.format = 1023, console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")), c) { - r.__webglFramebuffer = []; - for (let e = 0; e < 6; e++) r.__webglFramebuffer[e] = t.createFramebuffer() - } else if (r.__webglFramebuffer = t.createFramebuffer(), h) - if (a) { - r.__webglMultisampledFramebuffer = t.createFramebuffer(), r.__webglColorRenderbuffer = t.createRenderbuffer(), t.bindRenderbuffer(36161, r.__webglColorRenderbuffer); - const n = o.convert(e.texture.format), - i = o.convert(e.texture.type), - s = _(e.texture.internalFormat, n, i), - a = B(e); - t.renderbufferStorageMultisample(36161, a, s, e.width, e.height), t.bindFramebuffer(36160, r.__webglMultisampledFramebuffer), t.framebufferRenderbuffer(36160, 36064, 36161, r.__webglColorRenderbuffer), t.bindRenderbuffer(36161, null), e.depthBuffer && (r.__webglDepthRenderbuffer = t.createRenderbuffer(), O(r.__webglDepthRenderbuffer, e, !0)), t.bindFramebuffer(36160, null) - } else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2."); - if (c) { - n.bindTexture(34067, l.__webglTexture), C(34067, e.texture, u); - for (let t = 0; t < 6; t++) I(r.__webglFramebuffer[t], e, 36064, 34069 + t); - A(e.texture, u) && x(34067, e.texture, e.width, e.height), n.bindTexture(34067, null) - } else n.bindTexture(3553, l.__webglTexture), C(3553, e.texture, u), I(r.__webglFramebuffer, e, 36064, 3553), A(e.texture, u) && x(3553, e.texture, e.width, e.height), n.bindTexture(3553, null); - e.depthBuffer && N(e) - }, this.updateRenderTargetMipmap = function(t) { - const e = t.texture; - if (A(e, y(t) || a)) { - const r = t.isWebGLCubeRenderTarget ? 34067 : 3553, - o = i.get(e).__webglTexture; - n.bindTexture(r, o), x(r, e, t.width, t.height), n.bindTexture(r, null) - } - }, this.updateMultisampleRenderTarget = function(e) { - if (e.isWebGLMultisampleRenderTarget) - if (a) { - const n = i.get(e); - t.bindFramebuffer(36008, n.__webglMultisampledFramebuffer), t.bindFramebuffer(36009, n.__webglFramebuffer); - const r = e.width, - o = e.height; - let s = 16384; - e.depthBuffer && (s |= 256), e.stencilBuffer && (s |= 1024), t.blitFramebuffer(0, 0, r, o, 0, 0, r, o, s, 9728), t.bindFramebuffer(36160, n.__webglMultisampledFramebuffer) - } else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.") - }, this.safeSetTexture2D = function(t, e) { - t && t.isWebGLRenderTarget && (!1 === F && (console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."), F = !0), t = t.texture), S(t, e) - }, this.safeSetTextureCube = function(t, e) { - t && t.isWebGLCubeRenderTarget && (!1 === z && (console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), z = !0), t = t.texture), T(t, e) - } - } - - function ir(t, e, n) { - const i = n.isWebGL2; - return { - convert: function(t) { - let n; - if (1009 === t) return 5121; - if (1017 === t) return 32819; - if (1018 === t) return 32820; - if (1019 === t) return 33635; - if (1010 === t) return 5120; - if (1011 === t) return 5122; - if (1012 === t) return 5123; - if (1013 === t) return 5124; - if (1014 === t) return 5125; - if (1015 === t) return 5126; - if (1016 === t) return i ? 5131 : (n = e.get("OES_texture_half_float"), null !== n ? n.HALF_FLOAT_OES : null); - if (1021 === t) return 6406; - if (1022 === t) return 6407; - if (1023 === t) return 6408; - if (1024 === t) return 6409; - if (1025 === t) return 6410; - if (1026 === t) return 6402; - if (1027 === t) return 34041; - if (1028 === t) return 6403; - if (1029 === t) return 36244; - if (1030 === t) return 33319; - if (1031 === t) return 33320; - if (1032 === t) return 36248; - if (1033 === t) return 36249; - if (33776 === t || 33777 === t || 33778 === t || 33779 === t) { - if (n = e.get("WEBGL_compressed_texture_s3tc"), null === n) return null; - if (33776 === t) return n.COMPRESSED_RGB_S3TC_DXT1_EXT; - if (33777 === t) return n.COMPRESSED_RGBA_S3TC_DXT1_EXT; - if (33778 === t) return n.COMPRESSED_RGBA_S3TC_DXT3_EXT; - if (33779 === t) return n.COMPRESSED_RGBA_S3TC_DXT5_EXT - } - if (35840 === t || 35841 === t || 35842 === t || 35843 === t) { - if (n = e.get("WEBGL_compressed_texture_pvrtc"), null === n) return null; - if (35840 === t) return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; - if (35841 === t) return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; - if (35842 === t) return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; - if (35843 === t) return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG - } - if (36196 === t) return n = e.get("WEBGL_compressed_texture_etc1"), null !== n ? n.COMPRESSED_RGB_ETC1_WEBGL : null; - if ((37492 === t || 37496 === t) && (n = e.get("WEBGL_compressed_texture_etc"), null !== n)) { - if (37492 === t) return n.COMPRESSED_RGB8_ETC2; - if (37496 === t) return n.COMPRESSED_RGBA8_ETC2_EAC - } - return 37808 === t || 37809 === t || 37810 === t || 37811 === t || 37812 === t || 37813 === t || 37814 === t || 37815 === t || 37816 === t || 37817 === t || 37818 === t || 37819 === t || 37820 === t || 37821 === t || 37840 === t || 37841 === t || 37842 === t || 37843 === t || 37844 === t || 37845 === t || 37846 === t || 37847 === t || 37848 === t || 37849 === t || 37850 === t || 37851 === t || 37852 === t || 37853 === t ? (n = e.get("WEBGL_compressed_texture_astc"), null !== n ? t : null) : 36492 === t ? (n = e.get("EXT_texture_compression_bptc"), null !== n ? t : null) : 1020 === t ? i ? 34042 : (n = e.get("WEBGL_depth_texture"), null !== n ? n.UNSIGNED_INT_24_8_WEBGL : null) : void 0 - } - } - } - - function rr(t = []) { - Ye.call(this), this.cameras = t - } - - function or() { - St.call(this), this.type = "Group" - } - - function sr() { - this._targetRay = null, this._grip = null, this._hand = null - } - - function ar(t, e) { - const n = this; - let i = null, - r = 1, - o = null, - s = "local-floor", - a = null; - const l = [], - c = new Map, - h = new Ye; - h.layers.enable(1), h.viewport = new M; - const u = new Ye; - u.layers.enable(2), u.viewport = new M; - const d = [h, u], - p = new rr; - p.layers.enable(1), p.layers.enable(2); - let f = null, - m = null; - - function g(t) { - const e = c.get(t.inputSource); - e && e.dispatchEvent({ - type: t.type, - data: t.inputSource - }) - } - - function v() { - c.forEach((function(t, e) { - t.disconnect(e) - })), c.clear(), f = null, m = null, t.setFramebuffer(null), t.setRenderTarget(t.getRenderTarget()), w.stop(), n.isPresenting = !1, n.dispatchEvent({ - type: "sessionend" - }) - } - - function y(t) { - const e = i.inputSources; - for (let t = 0; t < l.length; t++) c.set(e[t], l[t]); - for (let e = 0; e < t.removed.length; e++) { - const n = t.removed[e], - i = c.get(n); - i && (i.dispatchEvent({ - type: "disconnected", - data: n - }), c.delete(n)) - } - for (let e = 0; e < t.added.length; e++) { - const n = t.added[e], - i = c.get(n); - i && i.dispatchEvent({ - type: "connected", - data: n - }) - } - } - this.enabled = !1, this.isPresenting = !1, this.getController = function(t) { - let e = l[t]; - return void 0 === e && (e = new sr, l[t] = e), e.getTargetRaySpace() - }, this.getControllerGrip = function(t) { - let e = l[t]; - return void 0 === e && (e = new sr, l[t] = e), e.getGripSpace() - }, this.getHand = function(t) { - let e = l[t]; - return void 0 === e && (e = new sr, l[t] = e), e.getHandSpace() - }, this.setFramebufferScaleFactor = function(t) { - r = t, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.") - }, this.setReferenceSpaceType = function(t) { - s = t, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.") - }, this.getReferenceSpace = function() { - return o - }, this.getSession = function() { - return i - }, this.setSession = async function(t) { - if (i = t, null !== i) { - i.addEventListener("select", g), i.addEventListener("selectstart", g), i.addEventListener("selectend", g), i.addEventListener("squeeze", g), i.addEventListener("squeezestart", g), i.addEventListener("squeezeend", g), i.addEventListener("end", v), i.addEventListener("inputsourceschange", y); - const t = e.getContextAttributes(); - !0 !== t.xrCompatible && await e.makeXRCompatible(); - const a = { - antialias: t.antialias, - alpha: t.alpha, - depth: t.depth, - stencil: t.stencil, - framebufferScaleFactor: r - }, - l = new XRWebGLLayer(i, e, a); - i.updateRenderState({ - baseLayer: l - }), o = await i.requestReferenceSpace(s), w.setContext(i), w.start(), n.isPresenting = !0, n.dispatchEvent({ - type: "sessionstart" - }) - } - }; - const A = new T, - x = new T; - - function _(t, e) { - null === e ? t.matrixWorld.copy(t.matrix) : t.matrixWorld.multiplyMatrices(e.matrixWorld, t.matrix), t.matrixWorldInverse.copy(t.matrixWorld).invert() - } - this.getCamera = function(t) { - p.near = u.near = h.near = t.near, p.far = u.far = h.far = t.far, f === p.near && m === p.far || (i.updateRenderState({ - depthNear: p.near, - depthFar: p.far - }), f = p.near, m = p.far); - const e = t.parent, - n = p.cameras; - _(p, e); - for (let t = 0; t < n.length; t++) _(n[t], e); - t.matrixWorld.copy(p.matrixWorld), t.matrix.copy(p.matrix), t.matrix.decompose(t.position, t.quaternion, t.scale); - const r = t.children; - for (let t = 0, e = r.length; t < e; t++) r[t].updateMatrixWorld(!0); - return 2 === n.length ? function(t, e, n) { - A.setFromMatrixPosition(e.matrixWorld), x.setFromMatrixPosition(n.matrixWorld); - const i = A.distanceTo(x), - r = e.projectionMatrix.elements, - o = n.projectionMatrix.elements, - s = r[14] / (r[10] - 1), - a = r[14] / (r[10] + 1), - l = (r[9] + 1) / r[5], - c = (r[9] - 1) / r[5], - h = (r[8] - 1) / r[0], - u = (o[8] + 1) / o[0], - d = s * h, - p = s * u, - f = i / (-h + u), - m = f * -h; - e.matrixWorld.decompose(t.position, t.quaternion, t.scale), t.translateX(m), t.translateZ(f), t.matrixWorld.compose(t.position, t.quaternion, t.scale), t.matrixWorldInverse.copy(t.matrixWorld).invert(); - const g = s + f, - v = a + f, - y = d - m, - _ = p + (i - m), - b = l * a / v * g, - w = c * a / v * g; - t.projectionMatrix.makePerspective(y, _, b, w, g, v) - }(p, h, u) : p.projectionMatrix.copy(h.projectionMatrix), p - }; - let b = null; - const w = new nn; - w.setAnimationLoop((function(e, n) { - if (a = n.getViewerPose(o), null !== a) { - const e = a.views, - n = i.renderState.baseLayer; - t.setFramebuffer(n.framebuffer); - let r = !1; - e.length !== p.cameras.length && (p.cameras.length = 0, r = !0); - for (let t = 0; t < e.length; t++) { - const i = e[t], - o = n.getViewport(i), - s = d[t]; - s.matrix.fromArray(i.transform.matrix), s.projectionMatrix.fromArray(i.projectionMatrix), s.viewport.set(o.x, o.y, o.width, o.height), 0 === t && p.matrix.copy(s.matrix), !0 === r && p.cameras.push(s) - } - } - const r = i.inputSources; - for (let t = 0; t < l.length; t++) { - const e = l[t], - i = r[t]; - e.update(i, n, o) - } - b && b(e, n) - })), this.setAnimationLoop = function(t) { - b = t - }, this.dispose = function() {} - } - - function lr(t) { - function e(e, n) { - e.opacity.value = n.opacity, n.color && e.diffuse.value.copy(n.color), n.emissive && e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity), n.map && (e.map.value = n.map), n.alphaMap && (e.alphaMap.value = n.alphaMap), n.specularMap && (e.specularMap.value = n.specularMap); - const i = t.get(n).envMap; - if (i) { - e.envMap.value = i, e.flipEnvMap.value = i.isCubeTexture && i._needsFlipEnvMap ? -1 : 1, e.reflectivity.value = n.reflectivity, e.refractionRatio.value = n.refractionRatio; - const r = t.get(i).__maxMipLevel; - void 0 !== r && (e.maxMipLevel.value = r) - } - let r, o; - n.lightMap && (e.lightMap.value = n.lightMap, e.lightMapIntensity.value = n.lightMapIntensity), n.aoMap && (e.aoMap.value = n.aoMap, e.aoMapIntensity.value = n.aoMapIntensity), n.map ? r = n.map : n.specularMap ? r = n.specularMap : n.displacementMap ? r = n.displacementMap : n.normalMap ? r = n.normalMap : n.bumpMap ? r = n.bumpMap : n.roughnessMap ? r = n.roughnessMap : n.metalnessMap ? r = n.metalnessMap : n.alphaMap ? r = n.alphaMap : n.emissiveMap ? r = n.emissiveMap : n.clearcoatMap ? r = n.clearcoatMap : n.clearcoatNormalMap ? r = n.clearcoatNormalMap : n.clearcoatRoughnessMap && (r = n.clearcoatRoughnessMap), void 0 !== r && (r.isWebGLRenderTarget && (r = r.texture), !0 === r.matrixAutoUpdate && r.updateMatrix(), e.uvTransform.value.copy(r.matrix)), n.aoMap ? o = n.aoMap : n.lightMap && (o = n.lightMap), void 0 !== o && (o.isWebGLRenderTarget && (o = o.texture), !0 === o.matrixAutoUpdate && o.updateMatrix(), e.uv2Transform.value.copy(o.matrix)) - } - - function n(e, n) { - e.roughness.value = n.roughness, e.metalness.value = n.metalness, n.roughnessMap && (e.roughnessMap.value = n.roughnessMap), n.metalnessMap && (e.metalnessMap.value = n.metalnessMap), n.emissiveMap && (e.emissiveMap.value = n.emissiveMap), n.bumpMap && (e.bumpMap.value = n.bumpMap, e.bumpScale.value = n.bumpScale, 1 === n.side && (e.bumpScale.value *= -1)), n.normalMap && (e.normalMap.value = n.normalMap, e.normalScale.value.copy(n.normalScale), 1 === n.side && e.normalScale.value.negate()), n.displacementMap && (e.displacementMap.value = n.displacementMap, e.displacementScale.value = n.displacementScale, e.displacementBias.value = n.displacementBias); - t.get(n).envMap && (e.envMapIntensity.value = n.envMapIntensity) - } - return { - refreshFogUniforms: function(t, e) { - t.fogColor.value.copy(e.color), e.isFog ? (t.fogNear.value = e.near, t.fogFar.value = e.far) : e.isFogExp2 && (t.fogDensity.value = e.density) - }, - refreshMaterialUniforms: function(t, i, r, o) { - i.isMeshBasicMaterial ? e(t, i) : i.isMeshLambertMaterial ? (e(t, i), function(t, e) { - e.emissiveMap && (t.emissiveMap.value = e.emissiveMap) - }(t, i)) : i.isMeshToonMaterial ? (e(t, i), function(t, e) { - e.gradientMap && (t.gradientMap.value = e.gradientMap); - e.emissiveMap && (t.emissiveMap.value = e.emissiveMap); - e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); - e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) - }(t, i)) : i.isMeshPhongMaterial ? (e(t, i), function(t, e) { - t.specular.value.copy(e.specular), t.shininess.value = Math.max(e.shininess, 1e-4), e.emissiveMap && (t.emissiveMap.value = e.emissiveMap); - e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); - e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) - }(t, i)) : i.isMeshStandardMaterial ? (e(t, i), i.isMeshPhysicalMaterial ? function(t, e) { - n(t, e), t.reflectivity.value = e.reflectivity, t.clearcoat.value = e.clearcoat, t.clearcoatRoughness.value = e.clearcoatRoughness, e.sheen && t.sheen.value.copy(e.sheen); - e.clearcoatMap && (t.clearcoatMap.value = e.clearcoatMap); - e.clearcoatRoughnessMap && (t.clearcoatRoughnessMap.value = e.clearcoatRoughnessMap); - e.clearcoatNormalMap && (t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale), t.clearcoatNormalMap.value = e.clearcoatNormalMap, 1 === e.side && t.clearcoatNormalScale.value.negate()); - t.transmission.value = e.transmission, e.transmissionMap && (t.transmissionMap.value = e.transmissionMap) - }(t, i) : n(t, i)) : i.isMeshMatcapMaterial ? (e(t, i), function(t, e) { - e.matcap && (t.matcap.value = e.matcap); - e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); - e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) - }(t, i)) : i.isMeshDepthMaterial ? (e(t, i), function(t, e) { - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) - }(t, i)) : i.isMeshDistanceMaterial ? (e(t, i), function(t, e) { - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias); - t.referencePosition.value.copy(e.referencePosition), t.nearDistance.value = e.nearDistance, t.farDistance.value = e.farDistance - }(t, i)) : i.isMeshNormalMaterial ? (e(t, i), function(t, e) { - e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1)); - e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate()); - e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias) - }(t, i)) : i.isLineBasicMaterial ? (function(t, e) { - t.diffuse.value.copy(e.color), t.opacity.value = e.opacity - }(t, i), i.isLineDashedMaterial && function(t, e) { - t.dashSize.value = e.dashSize, t.totalSize.value = e.dashSize + e.gapSize, t.scale.value = e.scale - }(t, i)) : i.isPointsMaterial ? function(t, e, n, i) { - t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.size.value = e.size * n, t.scale.value = .5 * i, e.map && (t.map.value = e.map); - e.alphaMap && (t.alphaMap.value = e.alphaMap); - let r; - e.map ? r = e.map : e.alphaMap && (r = e.alphaMap); - void 0 !== r && (!0 === r.matrixAutoUpdate && r.updateMatrix(), t.uvTransform.value.copy(r.matrix)) - }(t, i, r, o) : i.isSpriteMaterial ? function(t, e) { - t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.rotation.value = e.rotation, e.map && (t.map.value = e.map); - e.alphaMap && (t.alphaMap.value = e.alphaMap); - let n; - e.map ? n = e.map : e.alphaMap && (n = e.alphaMap); - void 0 !== n && (!0 === n.matrixAutoUpdate && n.updateMatrix(), t.uvTransform.value.copy(n.matrix)) - }(t, i) : i.isShadowMaterial ? (t.color.value.copy(i.color), t.opacity.value = i.opacity) : i.isShaderMaterial && (i.uniformsNeedUpdate = !1) - } - } - } - - function cr(t) { - const e = void 0 !== (t = t || {}).canvas ? t.canvas : function() { - const t = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); - return t.style.display = "block", t - }(), - n = void 0 !== t.context ? t.context : null, - i = void 0 !== t.alpha && t.alpha, - r = void 0 === t.depth || t.depth, - o = void 0 === t.stencil || t.stencil, - s = void 0 !== t.antialias && t.antialias, - a = void 0 === t.premultipliedAlpha || t.premultipliedAlpha, - l = void 0 !== t.preserveDrawingBuffer && t.preserveDrawingBuffer, - c = void 0 !== t.powerPreference ? t.powerPreference : "default", - h = void 0 !== t.failIfMajorPerformanceCaveat && t.failIfMajorPerformanceCaveat; - let u = null, - d = null; - const p = []; - this.domElement = e, this.debug = { - checkShaderErrors: !0 - }, this.autoClear = !0, this.autoClearColor = !0, this.autoClearDepth = !0, this.autoClearStencil = !0, this.sortObjects = !0, this.clippingPlanes = [], this.localClippingEnabled = !1, this.gammaFactor = 2, this.outputEncoding = 3e3, this.physicallyCorrectLights = !1, this.toneMapping = 0, this.toneMappingExposure = 1, this.maxMorphTargets = 8, this.maxMorphNormals = 4; - const f = this; - let m = !1, - y = null, - A = 0, - x = 0, - _ = null, - b = null, - w = -1, - E = null; - const S = new M, - L = new M; - let R = null, - C = e.width, - P = e.height, - D = 1, - I = null, - O = null; - const N = new M(0, 0, C, P), - B = new M(0, 0, C, P); - let F = !1; - const z = new en; - let U = !1, - H = !1; - const G = new et, - V = new T, - k = { - background: null, - fog: null, - environment: null, - overrideMaterial: null, - isScene: !0 - }; - - function W() { - return null === _ ? D : 1 - } - let j, X, q, Y, Q, Z, J, K, $, tt, nt, it, rt, ot, st, at, lt, ct, ht, ut, dt, pt = n; - - function ft(t, n) { - for (let i = 0; i < t.length; i++) { - const r = t[i], - o = e.getContext(r, n); - if (null !== o) return o - } - return null - } - try { - const t = { - alpha: i, - depth: r, - stencil: o, - antialias: s, - premultipliedAlpha: a, - preserveDrawingBuffer: l, - powerPreference: c, - failIfMajorPerformanceCaveat: h - }; - if (e.addEventListener("webglcontextlost", yt, !1), e.addEventListener("webglcontextrestored", At, !1), null === pt) { - const e = ["webgl2", "webgl", "experimental-webgl"]; - if (!0 === f.isWebGL1Renderer && e.shift(), pt = ft(e, t), null === pt) throw ft(e) ? new Error("Error creating WebGL context with your selected attributes.") : new Error("Error creating WebGL context.") - } - void 0 === pt.getShaderPrecisionFormat && (pt.getShaderPrecisionFormat = function() { - return { - rangeMin: 1, - rangeMax: 1, - precision: 1 - } - }) - } catch (t) { - throw console.error("THREE.WebGLRenderer: " + t.message), t - } - - function mt() { - j = new mn(pt), X = new dn(pt, j, t), j.init(X), ut = new ir(pt, j, X), q = new er(pt, j, X), q.scissor(L.copy(B).multiplyScalar(D).floor()), q.viewport(S.copy(N).multiplyScalar(D).floor()), Y = new yn(pt), Q = new Gi, Z = new nr(pt, j, q, Q, X, ut, Y), J = new fn(f), K = new rn(pt, X), dt = new hn(pt, j, K, X), $ = new gn(pt, K, Y, dt), tt = new bn(pt, $, K, Y), lt = new _n(pt), st = new pn(Q), nt = new Hi(f, J, j, X, dt, st), it = new lr(Q), rt = new ji(Q), ot = new Ji(j, X), at = new cn(f, J, q, tt, a), ct = new un(pt, j, Y, X), ht = new vn(pt, j, Y, X), Y.programs = nt.programs, f.capabilities = X, f.extensions = j, f.properties = Q, f.renderLists = rt, f.state = q, f.info = Y - } - mt(); - const gt = new ar(f, pt); - this.xr = gt; - const vt = new tr(f, tt, X.maxTextureSize); - - function yt(t) { - t.preventDefault(), console.log("THREE.WebGLRenderer: Context Lost."), m = !0 - } - - function At() { - console.log("THREE.WebGLRenderer: Context Restored."), m = !1, mt() - } - - function xt(t) { - const e = t.target; - e.removeEventListener("dispose", xt), - function(t) { - _t(t), Q.remove(t) - }(e) - } - - function _t(t) { - const e = Q.get(t).program; - void 0 !== e && nt.releaseProgram(e) - } - this.shadowMap = vt, this.getContext = function() { - return pt - }, this.getContextAttributes = function() { - return pt.getContextAttributes() - }, this.forceContextLoss = function() { - const t = j.get("WEBGL_lose_context"); - t && t.loseContext() - }, this.forceContextRestore = function() { - const t = j.get("WEBGL_lose_context"); - t && t.restoreContext() - }, this.getPixelRatio = function() { - return D - }, this.setPixelRatio = function(t) { - void 0 !== t && (D = t, this.setSize(C, P, !1)) - }, this.getSize = function(t) { - return void 0 === t && (console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"), t = new v), t.set(C, P) - }, this.setSize = function(t, n, i) { - gt.isPresenting ? console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.") : (C = t, P = n, e.width = Math.floor(t * D), e.height = Math.floor(n * D), !1 !== i && (e.style.width = t + "px", e.style.height = n + "px"), this.setViewport(0, 0, t, n)) - }, this.getDrawingBufferSize = function(t) { - return void 0 === t && (console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"), t = new v), t.set(C * D, P * D).floor() - }, this.setDrawingBufferSize = function(t, n, i) { - C = t, P = n, D = i, e.width = Math.floor(t * i), e.height = Math.floor(n * i), this.setViewport(0, 0, t, n) - }, this.getCurrentViewport = function(t) { - return void 0 === t && (console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"), t = new M), t.copy(S) - }, this.getViewport = function(t) { - return t.copy(N) - }, this.setViewport = function(t, e, n, i) { - t.isVector4 ? N.set(t.x, t.y, t.z, t.w) : N.set(t, e, n, i), q.viewport(S.copy(N).multiplyScalar(D).floor()) - }, this.getScissor = function(t) { - return t.copy(B) - }, this.setScissor = function(t, e, n, i) { - t.isVector4 ? B.set(t.x, t.y, t.z, t.w) : B.set(t, e, n, i), q.scissor(L.copy(B).multiplyScalar(D).floor()) - }, this.getScissorTest = function() { - return F - }, this.setScissorTest = function(t) { - q.setScissorTest(F = t) - }, this.setOpaqueSort = function(t) { - I = t - }, this.setTransparentSort = function(t) { - O = t - }, this.getClearColor = function(t) { - return void 0 === t && (console.warn("WebGLRenderer: .getClearColor() now requires a Color as an argument"), t = new Yt), t.copy(at.getClearColor()) - }, this.setClearColor = function() { - at.setClearColor.apply(at, arguments) - }, this.getClearAlpha = function() { - return at.getClearAlpha() - }, this.setClearAlpha = function() { - at.setClearAlpha.apply(at, arguments) - }, this.clear = function(t, e, n) { - let i = 0; - (void 0 === t || t) && (i |= 16384), (void 0 === e || e) && (i |= 256), (void 0 === n || n) && (i |= 1024), pt.clear(i) - }, 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.dispose = function() { - e.removeEventListener("webglcontextlost", yt, !1), e.removeEventListener("webglcontextrestored", At, !1), rt.dispose(), ot.dispose(), Q.dispose(), J.dispose(), tt.dispose(), dt.dispose(), gt.dispose(), wt.stop() - }, this.renderBufferImmediate = function(t, e) { - dt.initAttributes(); - const n = Q.get(t); - t.hasPositions && !n.position && (n.position = pt.createBuffer()), t.hasNormals && !n.normal && (n.normal = pt.createBuffer()), t.hasUvs && !n.uv && (n.uv = pt.createBuffer()), t.hasColors && !n.color && (n.color = pt.createBuffer()); - const i = e.getAttributes(); - t.hasPositions && (pt.bindBuffer(34962, n.position), pt.bufferData(34962, t.positionArray, 35048), dt.enableAttribute(i.position), pt.vertexAttribPointer(i.position, 3, 5126, !1, 0, 0)), t.hasNormals && (pt.bindBuffer(34962, n.normal), pt.bufferData(34962, t.normalArray, 35048), dt.enableAttribute(i.normal), pt.vertexAttribPointer(i.normal, 3, 5126, !1, 0, 0)), t.hasUvs && (pt.bindBuffer(34962, n.uv), pt.bufferData(34962, t.uvArray, 35048), dt.enableAttribute(i.uv), pt.vertexAttribPointer(i.uv, 2, 5126, !1, 0, 0)), t.hasColors && (pt.bindBuffer(34962, n.color), pt.bufferData(34962, t.colorArray, 35048), dt.enableAttribute(i.color), pt.vertexAttribPointer(i.color, 3, 5126, !1, 0, 0)), dt.disableUnusedAttributes(), pt.drawArrays(4, 0, t.count), t.count = 0 - }, this.renderBufferDirect = function(t, e, n, i, r, o) { - null === e && (e = k); - const s = r.isMesh && r.matrixWorld.determinant() < 0, - a = Lt(t, e, i, r); - q.setMaterial(i, s); - let l = n.index; - const c = n.attributes.position; - if (null === l) { - if (void 0 === c || 0 === c.count) return - } else if (0 === l.count) return; - let h, u = 1; - !0 === i.wireframe && (l = $.getWireframeAttribute(n), u = 2), (i.morphTargets || i.morphNormals) && lt.update(r, n, i, a), dt.setup(r, i, a, n, l); - let d = ct; - null !== l && (h = K.get(l), d = ht, d.setIndex(h)); - const p = null !== l ? l.count : c.count, - f = n.drawRange.start * u, - m = n.drawRange.count * u, - g = null !== o ? o.start * u : 0, - v = null !== o ? o.count * u : 1 / 0, - y = Math.max(f, g), - A = Math.min(p, f + m, g + v) - 1, - x = Math.max(0, A - y + 1); - if (0 !== x) { - if (r.isMesh) !0 === i.wireframe ? (q.setLineWidth(i.wireframeLinewidth * W()), d.setMode(1)) : d.setMode(4); - else if (r.isLine) { - let t = i.linewidth; - void 0 === t && (t = 1), q.setLineWidth(t * W()), r.isLineSegments ? d.setMode(1) : r.isLineLoop ? d.setMode(2) : d.setMode(3) - } else r.isPoints ? d.setMode(0) : r.isSprite && d.setMode(4); - if (r.isInstancedMesh) d.renderInstances(y, x, r.count); - else if (n.isInstancedBufferGeometry) { - const t = Math.min(n.instanceCount, n._maxInstanceCount); - d.renderInstances(y, x, t) - } else d.render(y, x) - } - }, this.compile = function(t, e) { - d = ot.get(t), d.init(), t.traverseVisible((function(t) { - t.isLight && t.layers.test(e.layers) && (d.pushLight(t), t.castShadow && d.pushShadow(t)) - })), d.setupLights(); - const n = new WeakMap; - t.traverse((function(e) { - const i = e.material; - if (i) - if (Array.isArray(i)) - for (let r = 0; r < i.length; r++) { - const o = i[r]; - !1 === n.has(o) && (Tt(o, t, e), n.set(o)) - } else !1 === n.has(i) && (Tt(i, t, e), n.set(i)) - })) - }; - let bt = null; - const wt = new nn; - - function Mt(t, e, n, i) { - if (!1 === t.visible) return; - if (t.layers.test(e.layers)) - if (t.isGroup) n = t.renderOrder; - else if (t.isLOD) !0 === t.autoUpdate && t.update(e); - else if (t.isLight) d.pushLight(t), t.castShadow && d.pushShadow(t); - else if (t.isSprite) { - if (!t.frustumCulled || z.intersectsSprite(t)) { - i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G); - const e = tt.update(t), - r = t.material; - r.visible && u.push(t, e, r, n, V.z, null) - } - } else if (t.isImmediateRenderObject) i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G), u.push(t, null, t.material, n, V.z, null); - else if ((t.isMesh || t.isLine || t.isPoints) && (t.isSkinnedMesh && t.skeleton.frame !== Y.render.frame && (t.skeleton.update(), t.skeleton.frame = Y.render.frame), !t.frustumCulled || z.intersectsObject(t))) { - i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G); - const e = tt.update(t), - r = t.material; - if (Array.isArray(r)) { - const i = e.groups; - for (let o = 0, s = i.length; o < s; o++) { - const s = i[o], - a = r[s.materialIndex]; - a && a.visible && u.push(t, e, a, n, V.z, s) - } - } else r.visible && u.push(t, e, r, n, V.z, null) - } - const r = t.children; - for (let t = 0, o = r.length; t < o; t++) Mt(r[t], e, n, i) - } - - function Et(t, e, n) { - const i = !0 === e.isScene ? e.overrideMaterial : null; - for (let r = 0, o = t.length; r < o; r++) { - const o = t[r], - s = o.object, - a = o.geometry, - l = null === i ? o.material : i, - c = o.group; - if (n.isArrayCamera) { - const t = n.cameras; - for (let n = 0, i = t.length; n < i; n++) { - const i = t[n]; - s.layers.test(i.layers) && (q.viewport(S.copy(i.viewport)), d.setupLightsView(i), St(s, e, i, a, l, c)) - } - } else St(s, e, n, a, l, c) - } - } - - function St(t, e, n, i, r, o) { - if (t.onBeforeRender(f, e, n, i, r, o), t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld), t.normalMatrix.getNormalMatrix(t.modelViewMatrix), t.isImmediateRenderObject) { - const i = Lt(n, e, r, t); - q.setMaterial(r), dt.reset(), - function(t, e) { - t.render((function(t) { - f.renderBufferImmediate(t, e) - })) - }(t, i) - } else f.renderBufferDirect(n, e, i, r, t, o); - t.onAfterRender(f, e, n, i, r, o) - } - - function Tt(t, e, n) { - !0 !== e.isScene && (e = k); - const i = Q.get(t), - r = d.state.lights, - o = d.state.shadowsArray, - s = r.state.version, - a = nt.getParameters(t, r.state, o, e, n), - l = nt.getProgramCacheKey(a); - let c = i.program, - h = !0; - if (i.environment = t.isMeshStandardMaterial ? e.environment : null, i.fog = e.fog, i.envMap = J.get(t.envMap || i.environment), void 0 === c) t.addEventListener("dispose", xt); - else if (c.cacheKey !== l) _t(t); - else if (i.lightsStateVersion !== s) h = !1; - else { - if (void 0 !== a.shaderID) return; - h = !1 - } - h && (a.uniforms = nt.getUniforms(t), t.onBeforeCompile(a, f), c = nt.acquireProgram(a, l), i.program = c, i.uniforms = a.uniforms, i.outputEncoding = a.outputEncoding); - const u = i.uniforms; - (t.isShaderMaterial || t.isRawShaderMaterial) && !0 !== t.clipping || (i.numClippingPlanes = st.numPlanes, i.numIntersection = st.numIntersection, u.clippingPlanes = st.uniform), i.needsLights = function(t) { - return t.isMeshLambertMaterial || t.isMeshToonMaterial || t.isMeshPhongMaterial || t.isMeshStandardMaterial || t.isShadowMaterial || t.isShaderMaterial && !0 === t.lights - }(t), i.lightsStateVersion = s, i.needsLights && (u.ambientLightColor.value = r.state.ambient, u.lightProbe.value = r.state.probe, u.directionalLights.value = r.state.directional, u.directionalLightShadows.value = r.state.directionalShadow, u.spotLights.value = r.state.spot, u.spotLightShadows.value = r.state.spotShadow, u.rectAreaLights.value = r.state.rectArea, u.ltc_1.value = r.state.rectAreaLTC1, u.ltc_2.value = r.state.rectAreaLTC2, u.pointLights.value = r.state.point, u.pointLightShadows.value = r.state.pointShadow, u.hemisphereLights.value = r.state.hemi, u.directionalShadowMap.value = r.state.directionalShadowMap, u.directionalShadowMatrix.value = r.state.directionalShadowMatrix, u.spotShadowMap.value = r.state.spotShadowMap, u.spotShadowMatrix.value = r.state.spotShadowMatrix, u.pointShadowMap.value = r.state.pointShadowMap, u.pointShadowMatrix.value = r.state.pointShadowMatrix); - const p = i.program.getUniforms(), - m = Ai.seqWithValue(p.seq, u); - i.uniformsList = m - } - - function Lt(t, e, n, i) { - !0 !== e.isScene && (e = k), Z.resetTextureUnits(); - const r = e.fog, - o = n.isMeshStandardMaterial ? e.environment : null, - s = null === _ ? f.outputEncoding : _.texture.encoding, - a = J.get(n.envMap || o), - l = Q.get(n), - c = d.state.lights; - if (!0 === U && (!0 === H || t !== E)) { - const e = t === E && n.id === w; - st.setState(n, t, e) - } - n.version === l.__version ? n.fog && l.fog !== r || l.environment !== o || l.needsLights && l.lightsStateVersion !== c.state.version ? Tt(n, e, i) : void 0 === l.numClippingPlanes || l.numClippingPlanes === st.numPlanes && l.numIntersection === st.numIntersection ? (l.outputEncoding !== s || l.envMap !== a) && Tt(n, e, i) : Tt(n, e, i) : (Tt(n, e, i), l.__version = n.version); - let h = !1, - u = !1, - p = !1; - const m = l.program, - v = m.getUniforms(), - y = l.uniforms; - if (q.useProgram(m.program) && (h = !0, u = !0, p = !0), n.id !== w && (w = n.id, u = !0), h || E !== t) { - if (v.setValue(pt, "projectionMatrix", t.projectionMatrix), X.logarithmicDepthBuffer && v.setValue(pt, "logDepthBufFC", 2 / (Math.log(t.far + 1) / Math.LN2)), E !== t && (E = t, u = !0, p = !0), n.isShaderMaterial || n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshStandardMaterial || n.envMap) { - const e = v.map.cameraPosition; - void 0 !== e && e.setValue(pt, V.setFromMatrixPosition(t.matrixWorld)) - }(n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshLambertMaterial || n.isMeshBasicMaterial || n.isMeshStandardMaterial || n.isShaderMaterial) && v.setValue(pt, "isOrthographic", !0 === t.isOrthographicCamera), (n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshLambertMaterial || n.isMeshBasicMaterial || n.isMeshStandardMaterial || n.isShaderMaterial || n.isShadowMaterial || n.skinning) && v.setValue(pt, "viewMatrix", t.matrixWorldInverse) - } - if (n.skinning) { - v.setOptional(pt, i, "bindMatrix"), v.setOptional(pt, i, "bindMatrixInverse"); - const t = i.skeleton; - if (t) { - const e = t.bones; - if (X.floatVertexTextures) { - if (null === t.boneTexture) { - let n = Math.sqrt(4 * e.length); - n = g.ceilPowerOfTwo(n), n = Math.max(n, 4); - const i = new Float32Array(n * n * 4); - i.set(t.boneMatrices); - const r = new Ke(i, n, n, 1023, 1015); - t.boneMatrices = i, t.boneTexture = r, t.boneTextureSize = n - } - v.setValue(pt, "boneTexture", t.boneTexture, Z), v.setValue(pt, "boneTextureSize", t.boneTextureSize) - } else v.setOptional(pt, t, "boneMatrices") - } - } - var A, x; - return (u || l.receiveShadow !== i.receiveShadow) && (l.receiveShadow = i.receiveShadow, v.setValue(pt, "receiveShadow", i.receiveShadow)), u && (v.setValue(pt, "toneMappingExposure", f.toneMappingExposure), l.needsLights && (x = p, (A = y).ambientLightColor.needsUpdate = x, A.lightProbe.needsUpdate = x, A.directionalLights.needsUpdate = x, A.directionalLightShadows.needsUpdate = x, A.pointLights.needsUpdate = x, A.pointLightShadows.needsUpdate = x, A.spotLights.needsUpdate = x, A.spotLightShadows.needsUpdate = x, A.rectAreaLights.needsUpdate = x, A.hemisphereLights.needsUpdate = x), r && n.fog && it.refreshFogUniforms(y, r), it.refreshMaterialUniforms(y, n, D, P), Ai.upload(pt, l.uniformsList, y, Z)), n.isShaderMaterial && !0 === n.uniformsNeedUpdate && (Ai.upload(pt, l.uniformsList, y, Z), n.uniformsNeedUpdate = !1), n.isSpriteMaterial && v.setValue(pt, "center", i.center), v.setValue(pt, "modelViewMatrix", i.modelViewMatrix), v.setValue(pt, "normalMatrix", i.normalMatrix), v.setValue(pt, "modelMatrix", i.matrixWorld), m - } - wt.setAnimationLoop((function(t) { - gt.isPresenting || bt && bt(t) - })), "undefined" != typeof window && wt.setContext(window), this.setAnimationLoop = function(t) { - bt = t, gt.setAnimationLoop(t), null === t ? wt.stop() : wt.start() - }, this.render = function(t, e) { - let n, i; - if (void 0 !== arguments[2] && (console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead."), n = arguments[2]), void 0 !== arguments[3] && (console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead."), i = arguments[3]), void 0 !== e && !0 !== e.isCamera) return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera."); - if (!0 === m) return; - dt.resetDefaultState(), w = -1, E = null, !0 === t.autoUpdate && t.updateMatrixWorld(), null === e.parent && e.updateMatrixWorld(), !0 === gt.enabled && !0 === gt.isPresenting && (e = gt.getCamera(e)), !0 === t.isScene && t.onBeforeRender(f, t, e, n || _), d = ot.get(t, p.length), d.init(), p.push(d), G.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), z.setFromProjectionMatrix(G), H = this.localClippingEnabled, U = st.init(this.clippingPlanes, H, e), u = rt.get(t, e), u.init(), Mt(t, e, 0, f.sortObjects), u.finish(), !0 === f.sortObjects && u.sort(I, O), !0 === U && st.beginShadows(); - const r = d.state.shadowsArray; - vt.render(r, t, e), d.setupLights(), d.setupLightsView(e), !0 === U && st.endShadows(), !0 === this.info.autoReset && this.info.reset(), void 0 !== n && this.setRenderTarget(n), at.render(u, t, e, i); - const o = u.opaque, - s = u.transparent; - o.length > 0 && Et(o, t, e), s.length > 0 && Et(s, t, e), !0 === t.isScene && t.onAfterRender(f, t, e), null !== _ && (Z.updateRenderTargetMipmap(_), Z.updateMultisampleRenderTarget(_)), q.buffers.depth.setTest(!0), q.buffers.depth.setMask(!0), q.buffers.color.setMask(!0), q.setPolygonOffset(!1), p.pop(), d = p.length > 0 ? p[p.length - 1] : null, u = null - }, this.setFramebuffer = function(t) { - y !== t && null === _ && pt.bindFramebuffer(36160, t), y = t - }, this.getActiveCubeFace = function() { - return A - }, this.getActiveMipmapLevel = function() { - return x - }, this.getRenderList = function() { - return u - }, this.setRenderList = function(t) { - u = t - }, this.getRenderTarget = function() { - return _ - }, this.setRenderTarget = function(t, e = 0, n = 0) { - _ = t, A = e, x = n, t && void 0 === Q.get(t).__webglFramebuffer && Z.setupRenderTarget(t); - let i = y, - r = !1; - if (t) { - const n = Q.get(t).__webglFramebuffer; - t.isWebGLCubeRenderTarget ? (i = n[e], r = !0) : i = t.isWebGLMultisampleRenderTarget ? Q.get(t).__webglMultisampledFramebuffer : n, S.copy(t.viewport), L.copy(t.scissor), R = t.scissorTest - } else S.copy(N).multiplyScalar(D).floor(), L.copy(B).multiplyScalar(D).floor(), R = F; - if (b !== i && (pt.bindFramebuffer(36160, i), b = i), q.viewport(S), q.scissor(L), q.setScissorTest(R), r) { - const i = Q.get(t.texture); - pt.framebufferTexture2D(36160, 36064, 34069 + e, i.__webglTexture, n) - } - }, this.readRenderTargetPixels = function(t, e, n, i, r, o, s) { - if (!t || !t.isWebGLRenderTarget) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); - let a = Q.get(t).__webglFramebuffer; - if (t.isWebGLCubeRenderTarget && void 0 !== s && (a = a[s]), a) { - let s = !1; - a !== b && (pt.bindFramebuffer(36160, a), s = !0); - try { - const a = t.texture, - l = a.format, - c = a.type; - if (1023 !== l && ut.convert(l) !== pt.getParameter(35739)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); - const h = 1016 === c && (j.has("EXT_color_buffer_half_float") || X.isWebGL2 && j.has("EXT_color_buffer_float")); - if (!(1009 === c || ut.convert(c) === pt.getParameter(35738) || 1015 === c && (X.isWebGL2 || j.has("OES_texture_float") || j.has("WEBGL_color_buffer_float")) || h)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); - 36053 === pt.checkFramebufferStatus(36160) ? e >= 0 && e <= t.width - i && n >= 0 && n <= t.height - r && pt.readPixels(e, n, i, r, ut.convert(l), ut.convert(c), o) : console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.") - } finally { - s && pt.bindFramebuffer(36160, b) - } - } - }, this.copyFramebufferToTexture = function(t, e, n = 0) { - const i = Math.pow(2, -n), - r = Math.floor(e.image.width * i), - o = Math.floor(e.image.height * i), - s = ut.convert(e.format); - Z.setTexture2D(e, 0), pt.copyTexImage2D(3553, n, s, t.x, t.y, r, o, 0), q.unbindTexture() - }, this.copyTextureToTexture = function(t, e, n, i = 0) { - const r = e.image.width, - o = e.image.height, - s = ut.convert(n.format), - a = ut.convert(n.type); - Z.setTexture2D(n, 0), pt.pixelStorei(37440, n.flipY), pt.pixelStorei(37441, n.premultiplyAlpha), pt.pixelStorei(3317, n.unpackAlignment), e.isDataTexture ? pt.texSubImage2D(3553, i, t.x, t.y, r, o, s, a, e.image.data) : e.isCompressedTexture ? pt.compressedTexSubImage2D(3553, i, t.x, t.y, e.mipmaps[0].width, e.mipmaps[0].height, s, e.mipmaps[0].data) : pt.texSubImage2D(3553, i, t.x, t.y, s, a, e.image), 0 === i && n.generateMipmaps && pt.generateMipmap(3553), q.unbindTexture() - }, this.initTexture = function(t) { - Z.setTexture2D(t, 0), q.unbindTexture() - }, this.resetState = function() { - q.reset(), dt.reset() - }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { - detail: this - })) - } - - function hr(t) { - cr.call(this, t) - } - rr.prototype = Object.assign(Object.create(Ye.prototype), { - constructor: rr, - isArrayCamera: !0 - }), or.prototype = Object.assign(Object.create(St.prototype), { - constructor: or, - isGroup: !0 - }), Object.assign(sr.prototype, { - constructor: sr, - getHandSpace: function() { - return null === this._hand && (this._hand = new or, this._hand.matrixAutoUpdate = !1, this._hand.visible = !1, this._hand.joints = {}, this._hand.inputState = { - pinching: !1 - }), this._hand - }, - getTargetRaySpace: function() { - return null === this._targetRay && (this._targetRay = new or, this._targetRay.matrixAutoUpdate = !1, this._targetRay.visible = !1), this._targetRay - }, - getGripSpace: function() { - return null === this._grip && (this._grip = new or, this._grip.matrixAutoUpdate = !1, this._grip.visible = !1), this._grip - }, - dispatchEvent: function(t) { - return null !== this._targetRay && this._targetRay.dispatchEvent(t), null !== this._grip && this._grip.dispatchEvent(t), null !== this._hand && this._hand.dispatchEvent(t), this - }, - disconnect: function(t) { - return this.dispatchEvent({ - type: "disconnected", - data: t - }), null !== this._targetRay && (this._targetRay.visible = !1), null !== this._grip && (this._grip.visible = !1), null !== this._hand && (this._hand.visible = !1), this - }, - update: function(t, e, n) { - let i = null, - r = null, - o = null; - const s = this._targetRay, - a = this._grip, - l = this._hand; - if (t && "visible-blurred" !== e.session.visibilityState) - if (l && t.hand) { - o = !0; - for (const i of t.hand.values()) { - const t = e.getJointPose(i, n); - if (void 0 === l.joints[i.jointName]) { - const t = new or; - t.matrixAutoUpdate = !1, t.visible = !1, l.joints[i.jointName] = t, l.add(t) - } - const r = l.joints[i.jointName]; - null !== t && (r.matrix.fromArray(t.transform.matrix), r.matrix.decompose(r.position, r.rotation, r.scale), r.jointRadius = t.radius), r.visible = null !== t - } - const i = l.joints["index-finger-tip"], - r = l.joints["thumb-tip"], - s = i.position.distanceTo(r.position), - a = .02, - c = .005; - l.inputState.pinching && s > a + c ? (l.inputState.pinching = !1, this.dispatchEvent({ - type: "pinchend", - handedness: t.handedness, - target: this - })) : !l.inputState.pinching && s <= a - c && (l.inputState.pinching = !0, this.dispatchEvent({ - type: "pinchstart", - handedness: t.handedness, - target: this - })) - } else null !== s && (i = e.getPose(t.targetRaySpace, n), null !== i && (s.matrix.fromArray(i.transform.matrix), s.matrix.decompose(s.position, s.rotation, s.scale))), null !== a && t.gripSpace && (r = e.getPose(t.gripSpace, n), null !== r && (a.matrix.fromArray(r.transform.matrix), a.matrix.decompose(a.position, a.rotation, a.scale))); - return null !== s && (s.visible = null !== i), null !== a && (a.visible = null !== r), null !== l && (l.visible = null !== o), this - } - }), Object.assign(ar.prototype, p.prototype), hr.prototype = Object.assign(Object.create(cr.prototype), { - constructor: hr, - isWebGL1Renderer: !0 - }); - class ur extends St { - constructor() { - super(), Object.defineProperty(this, "isScene", { - value: !0 - }), this.type = "Scene", this.background = null, this.environment = null, this.fog = null, this.overrideMaterial = null, this.autoUpdate = !0, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { - detail: this - })) - } - copy(t, e) { - return super.copy(t, e), null !== t.background && (this.background = t.background.clone()), null !== t.environment && (this.environment = t.environment.clone()), null !== t.fog && (this.fog = t.fog.clone()), null !== t.overrideMaterial && (this.overrideMaterial = t.overrideMaterial.clone()), this.autoUpdate = t.autoUpdate, this.matrixAutoUpdate = t.matrixAutoUpdate, this - } - toJSON(t) { - const e = super.toJSON(t); - return null !== this.background && (e.object.background = this.background.toJSON(t)), null !== this.environment && (e.object.environment = this.environment.toJSON(t)), null !== this.fog && (e.object.fog = this.fog.toJSON()), e - } - } - - function dr(t, e) { - this.array = t, this.stride = e, this.count = void 0 !== t ? t.length / e : 0, this.usage = 35044, this.updateRange = { - offset: 0, - count: -1 - }, this.version = 0, this.uuid = g.generateUUID() - } - Object.defineProperty(dr.prototype, "needsUpdate", { - set: function(t) { - !0 === t && this.version++ - } - }), Object.assign(dr.prototype, { - isInterleavedBuffer: !0, - onUploadCallback: function() {}, - setUsage: function(t) { - return this.usage = t, this - }, - copy: function(t) { - return this.array = new t.array.constructor(t.array), this.count = t.count, this.stride = t.stride, this.usage = t.usage, this - }, - copyAt: function(t, e, n) { - t *= this.stride, n *= e.stride; - for (let i = 0, r = this.stride; i < r; i++) this.array[t + i] = e.array[n + i]; - return this - }, - set: function(t, e = 0) { - return this.array.set(t, e), this - }, - clone: function(t) { - void 0 === t.arrayBuffers && (t.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = g.generateUUID()), void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer); - const e = new dr(new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]), this.stride); - return e.setUsage(this.usage), e - }, - onUpload: function(t) { - return this.onUploadCallback = t, this - }, - toJSON: function(t) { - return void 0 === t.arrayBuffers && (t.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = g.generateUUID()), void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = Array.prototype.slice.call(new Uint32Array(this.array.buffer))), { - uuid: this.uuid, - buffer: this.array.buffer._uuid, - type: this.array.constructor.name, - stride: this.stride - } - } - }); - const pr = new T; - - function fr(t, e, n, i) { - this.name = "", this.data = t, this.itemSize = e, this.offset = n, this.normalized = !0 === i - } - - function mr(t) { - Jt.call(this), this.type = "SpriteMaterial", this.color = new Yt(16777215), this.map = null, this.alphaMap = null, this.rotation = 0, this.sizeAttenuation = !0, this.transparent = !0, this.setValues(t) - } - let gr; - Object.defineProperties(fr.prototype, { - count: { - get: function() { - return this.data.count - } - }, - array: { - get: function() { - return this.data.array - } - }, - needsUpdate: { - set: function(t) { - this.data.needsUpdate = t - } - } - }), Object.assign(fr.prototype, { - isInterleavedBufferAttribute: !0, - applyMatrix4: function(t) { - for (let e = 0, n = this.data.count; e < n; e++) pr.x = this.getX(e), pr.y = this.getY(e), pr.z = this.getZ(e), pr.applyMatrix4(t), this.setXYZ(e, pr.x, pr.y, pr.z); - return this - }, - setX: function(t, e) { - return this.data.array[t * this.data.stride + this.offset] = e, this - }, - setY: function(t, e) { - return this.data.array[t * this.data.stride + this.offset + 1] = e, this - }, - setZ: function(t, e) { - return this.data.array[t * this.data.stride + this.offset + 2] = e, this - }, - setW: function(t, e) { - return this.data.array[t * this.data.stride + this.offset + 3] = e, this - }, - getX: function(t) { - return this.data.array[t * this.data.stride + this.offset] - }, - getY: function(t) { - return this.data.array[t * this.data.stride + this.offset + 1] - }, - getZ: function(t) { - return this.data.array[t * this.data.stride + this.offset + 2] - }, - getW: function(t) { - return this.data.array[t * this.data.stride + this.offset + 3] - }, - setXY: function(t, e, n) { - return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this - }, - setXYZ: function(t, e, n, i) { - return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this - }, - setXYZW: function(t, e, n, i, r) { - return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this.data.array[t + 3] = r, this - }, - clone: function(t) { - if (void 0 === t) { - console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data."); - const t = []; - for (let e = 0; e < this.count; e++) { - const n = e * this.data.stride + this.offset; - for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e]) - } - return new ee(new this.array.constructor(t), this.itemSize, this.normalized) - } - return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.clone(t)), new fr(t.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized) - }, - toJSON: function(t) { - if (void 0 === t) { - console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data."); - const t = []; - for (let e = 0; e < this.count; e++) { - const n = e * this.data.stride + this.offset; - for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e]) - } - return { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: t, - normalized: this.normalized - } - } - return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.toJSON(t)), { - isInterleavedBufferAttribute: !0, - itemSize: this.itemSize, - data: this.data.uuid, - offset: this.offset, - normalized: this.normalized - } - } - }), mr.prototype = Object.create(Jt.prototype), mr.prototype.constructor = mr, mr.prototype.isSpriteMaterial = !0, mr.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.alphaMap = t.alphaMap, this.rotation = t.rotation, this.sizeAttenuation = t.sizeAttenuation, this - }; - const vr = new T, - yr = new T, - Ar = new T, - xr = new v, - _r = new v, - br = new et, - wr = new T, - Mr = new T, - Er = new T, - Sr = new v, - Tr = new v, - Lr = new v; - - function Rr(t) { - if (St.call(this), this.type = "Sprite", void 0 === gr) { - gr = new be; - const t = new dr(new Float32Array([-.5, -.5, 0, 0, 0, .5, -.5, 0, 1, 0, .5, .5, 0, 1, 1, -.5, .5, 0, 0, 1]), 5); - gr.setIndex([0, 1, 2, 0, 2, 3]), gr.setAttribute("position", new fr(t, 3, 0, !1)), gr.setAttribute("uv", new fr(t, 2, 3, !1)) - } - this.geometry = gr, this.material = void 0 !== t ? t : new mr, this.center = new v(.5, .5) - } - - function Cr(t, e, n, i, r, o) { - xr.subVectors(t, n).addScalar(.5).multiply(i), void 0 !== r ? (_r.x = o * xr.x - r * xr.y, _r.y = r * xr.x + o * xr.y) : _r.copy(xr), t.copy(e), t.x += _r.x, t.y += _r.y, t.applyMatrix4(br) - } - Rr.prototype = Object.assign(Object.create(St.prototype), { - constructor: Rr, - isSprite: !0, - raycast: function(t, e) { - null === t.camera && console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'), yr.setFromMatrixScale(this.matrixWorld), br.copy(t.camera.matrixWorld), this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse, this.matrixWorld), Ar.setFromMatrixPosition(this.modelViewMatrix), t.camera.isPerspectiveCamera && !1 === this.material.sizeAttenuation && yr.multiplyScalar(-Ar.z); - const n = this.material.rotation; - let i, r; - 0 !== n && (r = Math.cos(n), i = Math.sin(n)); - const o = this.center; - Cr(wr.set(-.5, -.5, 0), Ar, o, yr, i, r), Cr(Mr.set(.5, -.5, 0), Ar, o, yr, i, r), Cr(Er.set(.5, .5, 0), Ar, o, yr, i, r), Sr.set(0, 0), Tr.set(1, 0), Lr.set(1, 1); - let s = t.ray.intersectTriangle(wr, Mr, Er, !1, vr); - if (null === s && (Cr(Mr.set(-.5, .5, 0), Ar, o, yr, i, r), Tr.set(0, 1), s = t.ray.intersectTriangle(wr, Er, Mr, !1, vr), null === s)) return; - const a = t.ray.origin.distanceTo(vr); - a < t.near || a > t.far || e.push({ - distance: a, - point: vr.clone(), - uv: Gt.getUV(vr, wr, Mr, Er, Sr, Tr, Lr, new v), - face: null, - object: this - }) - }, - copy: function(t) { - return St.prototype.copy.call(this, t), void 0 !== t.center && this.center.copy(t.center), this.material = t.material, this - } - }); - const Pr = new T, - Dr = new T; - - function Ir() { - St.call(this), this._currentLevel = 0, this.type = "LOD", Object.defineProperties(this, { - levels: { - enumerable: !0, - value: [] - } - }), this.autoUpdate = !0 - } - Ir.prototype = Object.assign(Object.create(St.prototype), { - constructor: Ir, - isLOD: !0, - copy: function(t) { - St.prototype.copy.call(this, t, !1); - const e = t.levels; - for (let t = 0, n = e.length; t < n; t++) { - const n = e[t]; - this.addLevel(n.object.clone(), n.distance) - } - return this.autoUpdate = t.autoUpdate, this - }, - addLevel: function(t, e = 0) { - e = Math.abs(e); - const n = this.levels; - let i; - for (i = 0; i < n.length && !(e < n[i].distance); i++); - return n.splice(i, 0, { - distance: e, - object: t - }), this.add(t), this - }, - getCurrentLevel: function() { - return this._currentLevel - }, - getObjectForDistance: function(t) { - const e = this.levels; - if (e.length > 0) { - let n, i; - for (n = 1, i = e.length; n < i && !(t < e[n].distance); n++); - return e[n - 1].object - } - return null - }, - raycast: function(t, e) { - if (this.levels.length > 0) { - Pr.setFromMatrixPosition(this.matrixWorld); - const n = t.ray.origin.distanceTo(Pr); - this.getObjectForDistance(n).raycast(t, e) - } - }, - update: function(t) { - const e = this.levels; - if (e.length > 1) { - Pr.setFromMatrixPosition(t.matrixWorld), Dr.setFromMatrixPosition(this.matrixWorld); - const n = Pr.distanceTo(Dr) / t.zoom; - let i, r; - for (e[0].object.visible = !0, i = 1, r = e.length; i < r && n >= e[i].distance; i++) e[i - 1].object.visible = !1, e[i].object.visible = !0; - for (this._currentLevel = i - 1; i < r; i++) e[i].object.visible = !1 - } - }, - toJSON: function(t) { - const e = St.prototype.toJSON.call(this, t); - !1 === this.autoUpdate && (e.object.autoUpdate = !1), e.object.levels = []; - const n = this.levels; - for (let t = 0, i = n.length; t < i; t++) { - const i = n[t]; - e.object.levels.push({ - object: i.object.uuid, - distance: i.distance - }) - } - return e - } - }); - const Or = new T, - Nr = new M, - Br = new M, - Fr = new T, - zr = new et; - - function Ur(t, e) { - t && t.isGeometry && console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."), He.call(this, t, e), this.type = "SkinnedMesh", this.bindMode = "attached", this.bindMatrix = new et, this.bindMatrixInverse = new et - } - - function Hr() { - St.call(this), this.type = "Bone" - } - Ur.prototype = Object.assign(Object.create(He.prototype), { - constructor: Ur, - isSkinnedMesh: !0, - copy: function(t) { - return He.prototype.copy.call(this, t), this.bindMode = t.bindMode, this.bindMatrix.copy(t.bindMatrix), this.bindMatrixInverse.copy(t.bindMatrixInverse), this.skeleton = t.skeleton, this - }, - bind: function(t, e) { - this.skeleton = t, void 0 === e && (this.updateMatrixWorld(!0), this.skeleton.calculateInverses(), e = this.matrixWorld), this.bindMatrix.copy(e), this.bindMatrixInverse.copy(e).invert() - }, - pose: function() { - this.skeleton.pose() - }, - normalizeSkinWeights: function() { - const t = new M, - e = this.geometry.attributes.skinWeight; - for (let n = 0, i = e.count; n < i; n++) { - t.x = e.getX(n), t.y = e.getY(n), t.z = e.getZ(n), t.w = e.getW(n); - const i = 1 / t.manhattanLength(); - i !== 1 / 0 ? t.multiplyScalar(i) : t.set(1, 0, 0, 0), e.setXYZW(n, t.x, t.y, t.z, t.w) - } - }, - updateMatrixWorld: function(t) { - He.prototype.updateMatrixWorld.call(this, t), "attached" === this.bindMode ? this.bindMatrixInverse.copy(this.matrixWorld).invert() : "detached" === this.bindMode ? this.bindMatrixInverse.copy(this.bindMatrix).invert() : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) - }, - boneTransform: function(t, e) { - const n = this.skeleton, - i = this.geometry; - Nr.fromBufferAttribute(i.attributes.skinIndex, t), Br.fromBufferAttribute(i.attributes.skinWeight, t), Or.fromBufferAttribute(i.attributes.position, t).applyMatrix4(this.bindMatrix), e.set(0, 0, 0); - for (let t = 0; t < 4; t++) { - const i = Br.getComponent(t); - if (0 !== i) { - const r = Nr.getComponent(t); - zr.multiplyMatrices(n.bones[r].matrixWorld, n.boneInverses[r]), e.addScaledVector(Fr.copy(Or).applyMatrix4(zr), i) - } - } - return e.applyMatrix4(this.bindMatrixInverse) - } - }), Hr.prototype = Object.assign(Object.create(St.prototype), { - constructor: Hr, - isBone: !0 - }); - const Gr = new et, - Vr = new et; - - function kr(t = [], e = []) { - this.uuid = g.generateUUID(), this.bones = t.slice(0), this.boneInverses = e, this.boneMatrices = null, this.boneTexture = null, this.boneTextureSize = 0, this.frame = -1, this.init() - } - Object.assign(kr.prototype, { - init: function() { - const t = this.bones, - e = this.boneInverses; - if (this.boneMatrices = new Float32Array(16 * t.length), 0 === e.length) this.calculateInverses(); - else if (t.length !== e.length) { - console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."), this.boneInverses = []; - for (let t = 0, e = this.bones.length; t < e; t++) this.boneInverses.push(new et) - } - }, - calculateInverses: function() { - this.boneInverses.length = 0; - for (let t = 0, e = this.bones.length; t < e; t++) { - const e = new et; - this.bones[t] && e.copy(this.bones[t].matrixWorld).invert(), this.boneInverses.push(e) - } - }, - pose: function() { - for (let t = 0, e = this.bones.length; t < e; t++) { - const e = this.bones[t]; - e && e.matrixWorld.copy(this.boneInverses[t]).invert() - } - for (let t = 0, e = this.bones.length; t < e; t++) { - const e = this.bones[t]; - e && (e.parent && e.parent.isBone ? (e.matrix.copy(e.parent.matrixWorld).invert(), e.matrix.multiply(e.matrixWorld)) : e.matrix.copy(e.matrixWorld), e.matrix.decompose(e.position, e.quaternion, e.scale)) - } - }, - update: function() { - const t = this.bones, - e = this.boneInverses, - n = this.boneMatrices, - i = this.boneTexture; - for (let i = 0, r = t.length; i < r; i++) { - const r = t[i] ? t[i].matrixWorld : Vr; - Gr.multiplyMatrices(r, e[i]), Gr.toArray(n, 16 * i) - } - null !== i && (i.needsUpdate = !0) - }, - clone: function() { - return new kr(this.bones, this.boneInverses) - }, - getBoneByName: function(t) { - for (let e = 0, n = this.bones.length; e < n; e++) { - const n = this.bones[e]; - if (n.name === t) return n - } - }, - dispose: function() { - null !== this.boneTexture && (this.boneTexture.dispose(), this.boneTexture = null) - }, - fromJSON: function(t, e) { - this.uuid = t.uuid; - for (let n = 0, i = t.bones.length; n < i; n++) { - const i = t.bones[n]; - let r = e[i]; - void 0 === r && (console.warn("THREE.Skeleton: No bone found with UUID:", i), r = new Hr), this.bones.push(r), this.boneInverses.push((new et).fromArray(t.boneInverses[n])) - } - return this.init(), this - }, - toJSON: function() { - const t = { - metadata: { - version: 4.5, - type: "Skeleton", - generator: "Skeleton.toJSON" - }, - bones: [], - boneInverses: [] - }; - t.uuid = this.uuid; - const e = this.bones, - n = this.boneInverses; - for (let i = 0, r = e.length; i < r; i++) { - const r = e[i]; - t.bones.push(r.uuid); - const o = n[i]; - t.boneInverses.push(o.toArray()) - } - return t - } - }); - const Wr = new et, - jr = new et, - Xr = [], - qr = new He; - - function Yr(t, e, n) { - He.call(this, t, e), this.instanceMatrix = new ee(new Float32Array(16 * n), 16), this.instanceColor = null, this.count = n, this.frustumCulled = !1 - } - - function Qr(t) { - Jt.call(this), this.type = "LineBasicMaterial", this.color = new Yt(16777215), this.linewidth = 1, this.linecap = "round", this.linejoin = "round", this.morphTargets = !1, this.setValues(t) - } - Yr.prototype = Object.assign(Object.create(He.prototype), { - constructor: Yr, - isInstancedMesh: !0, - copy: function(t) { - return He.prototype.copy.call(this, t), this.instanceMatrix.copy(t.instanceMatrix), null !== t.instanceColor && (this.instanceColor = t.instanceColor.clone()), this.count = t.count, this - }, - getColorAt: function(t, e) { - e.fromArray(this.instanceColor.array, 3 * t) - }, - getMatrixAt: function(t, e) { - e.fromArray(this.instanceMatrix.array, 16 * t) - }, - raycast: function(t, e) { - const n = this.matrixWorld, - i = this.count; - if (qr.geometry = this.geometry, qr.material = this.material, void 0 !== qr.material) - for (let r = 0; r < i; r++) { - this.getMatrixAt(r, Wr), jr.multiplyMatrices(n, Wr), qr.matrixWorld = jr, qr.raycast(t, Xr); - for (let t = 0, n = Xr.length; t < n; t++) { - const n = Xr[t]; - n.instanceId = r, n.object = this, e.push(n) - } - Xr.length = 0 - } - }, - setColorAt: function(t, e) { - null === this.instanceColor && (this.instanceColor = new ee(new Float32Array(3 * this.count), 3)), e.toArray(this.instanceColor.array, 3 * t) - }, - setMatrixAt: function(t, e) { - e.toArray(this.instanceMatrix.array, 16 * t) - }, - updateMorphTargets: function() {}, - dispose: function() { - this.dispatchEvent({ - type: "dispose" - }) - } - }), Qr.prototype = Object.create(Jt.prototype), Qr.prototype.constructor = Qr, Qr.prototype.isLineBasicMaterial = !0, Qr.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.linewidth = t.linewidth, this.linecap = t.linecap, this.linejoin = t.linejoin, this.morphTargets = t.morphTargets, this - }; - const Zr = new T, - Jr = new T, - Kr = new et, - $r = new tt, - to = new X; - - function eo(t = new be, e = new Qr) { - St.call(this), this.type = "Line", this.geometry = t, this.material = e, this.updateMorphTargets() - } - eo.prototype = Object.assign(Object.create(St.prototype), { - constructor: eo, - isLine: !0, - copy: function(t) { - return St.prototype.copy.call(this, t), this.material = t.material, this.geometry = t.geometry, this - }, - computeLineDistances: function() { - const t = this.geometry; - if (t.isBufferGeometry) - if (null === t.index) { - const e = t.attributes.position, - n = [0]; - for (let t = 1, i = e.count; t < i; t++) Zr.fromBufferAttribute(e, t - 1), Jr.fromBufferAttribute(e, t), n[t] = n[t - 1], n[t] += Zr.distanceTo(Jr); - t.setAttribute("lineDistance", new he(n, 1)) - } else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); - else t.isGeometry && console.error("THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."); - return this - }, - raycast: function(t, e) { - const n = this.geometry, - i = this.matrixWorld, - r = t.params.Line.threshold; - if (null === n.boundingSphere && n.computeBoundingSphere(), to.copy(n.boundingSphere), to.applyMatrix4(i), to.radius += r, !1 === t.ray.intersectsSphere(to)) return; - Kr.copy(i).invert(), $r.copy(t.ray).applyMatrix4(Kr); - const o = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), - s = o * o, - a = new T, - l = new T, - c = new T, - h = new T, - u = this.isLineSegments ? 2 : 1; - if (n.isBufferGeometry) { - const i = n.index, - r = n.attributes.position; - if (null !== i) { - const n = i.array; - for (let i = 0, o = n.length - 1; i < o; i += u) { - const o = n[i], - u = n[i + 1]; - a.fromBufferAttribute(r, o), l.fromBufferAttribute(r, u); - if ($r.distanceSqToSegment(a, l, h, c) > s) continue; - h.applyMatrix4(this.matrixWorld); - const d = t.ray.origin.distanceTo(h); - d < t.near || d > t.far || e.push({ - distance: d, - point: c.clone().applyMatrix4(this.matrixWorld), - index: i, - face: null, - faceIndex: null, - object: this - }) - } - } else - for (let n = 0, i = r.count - 1; n < i; n += u) { - a.fromBufferAttribute(r, n), l.fromBufferAttribute(r, n + 1); - if ($r.distanceSqToSegment(a, l, h, c) > s) continue; - h.applyMatrix4(this.matrixWorld); - const i = t.ray.origin.distanceTo(h); - i < t.near || i > t.far || e.push({ - distance: i, - point: c.clone().applyMatrix4(this.matrixWorld), - index: n, - face: null, - faceIndex: null, - object: this - }) - } - } else n.isGeometry && console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") - }, - updateMorphTargets: function() { - const t = this.geometry; - if (t.isBufferGeometry) { - const e = t.morphAttributes, - n = Object.keys(e); - if (n.length > 0) { - const t = e[n[0]]; - if (void 0 !== t) { - this.morphTargetInfluences = [], this.morphTargetDictionary = {}; - for (let e = 0, n = t.length; e < n; e++) { - const n = t[e].name || String(e); - this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e - } - } - } - } else { - const e = t.morphTargets; - void 0 !== e && e.length > 0 && console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.") - } - } - }); - const no = new T, - io = new T; - - function ro(t, e) { - eo.call(this, t, e), this.type = "LineSegments" - } - - function oo(t, e) { - eo.call(this, t, e), this.type = "LineLoop" - } - - function so(t) { - Jt.call(this), this.type = "PointsMaterial", this.color = new Yt(16777215), this.map = null, this.alphaMap = null, this.size = 1, this.sizeAttenuation = !0, this.morphTargets = !1, this.setValues(t) - } - ro.prototype = Object.assign(Object.create(eo.prototype), { - constructor: ro, - isLineSegments: !0, - computeLineDistances: function() { - const t = this.geometry; - if (t.isBufferGeometry) - if (null === t.index) { - const e = t.attributes.position, - n = []; - for (let t = 0, i = e.count; t < i; t += 2) no.fromBufferAttribute(e, t), io.fromBufferAttribute(e, t + 1), n[t] = 0 === t ? 0 : n[t - 1], n[t + 1] = n[t] + no.distanceTo(io); - t.setAttribute("lineDistance", new he(n, 1)) - } else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); - else t.isGeometry && console.error("THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."); - return this - } - }), oo.prototype = Object.assign(Object.create(eo.prototype), { - constructor: oo, - isLineLoop: !0 - }), so.prototype = Object.create(Jt.prototype), so.prototype.constructor = so, so.prototype.isPointsMaterial = !0, so.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.alphaMap = t.alphaMap, this.size = t.size, this.sizeAttenuation = t.sizeAttenuation, this.morphTargets = t.morphTargets, this - }; - const ao = new et, - lo = new tt, - co = new X, - ho = new T; - - function uo(t = new be, e = new so) { - St.call(this), this.type = "Points", this.geometry = t, this.material = e, this.updateMorphTargets() - } - - function po(t, e, n, i, r, o, s) { - const a = lo.distanceSqToPoint(t); - if (a < n) { - const n = new T; - lo.closestPointToPoint(t, n), n.applyMatrix4(i); - const l = r.ray.origin.distanceTo(n); - if (l < r.near || l > r.far) return; - o.push({ - distance: l, - distanceToRay: Math.sqrt(a), - point: n, - index: e, - face: null, - object: s - }) - } - } - - function fo(t, e, n, i, r, o, s, a, l) { - b.call(this, t, e, n, i, r, o, s, a, l), this.format = void 0 !== s ? s : 1022, this.minFilter = void 0 !== o ? o : 1006, this.magFilter = void 0 !== r ? r : 1006, this.generateMipmaps = !1; - const c = this; - "requestVideoFrameCallback" in t && t.requestVideoFrameCallback((function e() { - c.needsUpdate = !0, t.requestVideoFrameCallback(e) - })) - } - - function mo(t, e, n, i, r, o, s, a, l, c, h, u) { - b.call(this, null, o, s, a, l, c, i, r, h, u), this.image = { - width: e, - height: n - }, this.mipmaps = t, this.flipY = !1, this.generateMipmaps = !1 - } - - function go(t, e, n, i, r, o, s, a, l) { - b.call(this, t, e, n, i, r, o, s, a, l), this.needsUpdate = !0 - } - - function vo(t, e, n, i, r, o, s, a, l, c) { - if (1026 !== (c = void 0 !== c ? c : 1026) && 1027 !== c) throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); - void 0 === n && 1026 === c && (n = 1012), void 0 === n && 1027 === c && (n = 1020), b.call(this, null, i, r, o, s, a, c, n, l), this.image = { - width: t, - height: e - }, this.magFilter = void 0 !== s ? s : 1003, this.minFilter = void 0 !== a ? a : 1003, this.flipY = !1, this.generateMipmaps = !1 - } - uo.prototype = Object.assign(Object.create(St.prototype), { - constructor: uo, - isPoints: !0, - copy: function(t) { - return St.prototype.copy.call(this, t), this.material = t.material, this.geometry = t.geometry, this - }, - raycast: function(t, e) { - const n = this.geometry, - i = this.matrixWorld, - r = t.params.Points.threshold; - if (null === n.boundingSphere && n.computeBoundingSphere(), co.copy(n.boundingSphere), co.applyMatrix4(i), co.radius += r, !1 === t.ray.intersectsSphere(co)) return; - ao.copy(i).invert(), lo.copy(t.ray).applyMatrix4(ao); - const o = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), - s = o * o; - if (n.isBufferGeometry) { - const r = n.index, - o = n.attributes.position; - if (null !== r) { - const n = r.array; - for (let r = 0, a = n.length; r < a; r++) { - const a = n[r]; - ho.fromBufferAttribute(o, a), po(ho, a, s, i, t, e, this) - } - } else - for (let n = 0, r = o.count; n < r; n++) ho.fromBufferAttribute(o, n), po(ho, n, s, i, t, e, this) - } else console.error("THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") - }, - updateMorphTargets: function() { - const t = this.geometry; - if (t.isBufferGeometry) { - const e = t.morphAttributes, - n = Object.keys(e); - if (n.length > 0) { - const t = e[n[0]]; - if (void 0 !== t) { - this.morphTargetInfluences = [], this.morphTargetDictionary = {}; - for (let e = 0, n = t.length; e < n; e++) { - const n = t[e].name || String(e); - this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e - } - } - } - } else { - const e = t.morphTargets; - void 0 !== e && e.length > 0 && console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.") - } - } - }), fo.prototype = Object.assign(Object.create(b.prototype), { - constructor: fo, - clone: function() { - return new this.constructor(this.image).copy(this) - }, - isVideoTexture: !0, - update: function() { - const t = this.image; - !1 === "requestVideoFrameCallback" in t && t.readyState >= t.HAVE_CURRENT_DATA && (this.needsUpdate = !0) - } - }), mo.prototype = Object.create(b.prototype), mo.prototype.constructor = mo, mo.prototype.isCompressedTexture = !0, go.prototype = Object.create(b.prototype), go.prototype.constructor = go, go.prototype.isCanvasTexture = !0, vo.prototype = Object.create(b.prototype), vo.prototype.constructor = vo, vo.prototype.isDepthTexture = !0; - new T, new T, new T, new Gt; - const yo = function(t, e, n) { - n = n || 2; - const i = e && e.length, - r = i ? e[0] * n : t.length; - let o = Ao(t, 0, r, n, !0); - const s = []; - if (!o || o.next === o.prev) return s; - let a, l, c, h, u, d, p; - if (i && (o = function(t, e, n, i) { - const r = []; - let o, s, a, l, c; - for (o = 0, s = e.length; o < s; o++) a = e[o] * i, l = o < s - 1 ? e[o + 1] * i : t.length, c = Ao(t, a, l, i, !1), c === c.next && (c.steiner = !0), r.push(Co(c)); - for (r.sort(So), o = 0; o < r.length; o++) To(r[o], n), n = xo(n, n.next); - return n - }(t, e, o, n)), t.length > 80 * n) { - a = c = t[0], l = h = t[1]; - for (let e = n; e < r; e += n) u = t[e], d = t[e + 1], u < a && (a = u), d < l && (l = d), u > c && (c = u), d > h && (h = d); - p = Math.max(c - a, h - l), p = 0 !== p ? 1 / p : 0 - } - return _o(o, s, n, a, l, p), s - }; - - function Ao(t, e, n, i, r) { - let o, s; - if (r === function(t, e, n, i) { - let r = 0; - for (let o = e, s = n - i; o < n; o += i) r += (t[s] - t[o]) * (t[o + 1] + t[s + 1]), s = o; - return r - }(t, e, n, i) > 0) - for (o = e; o < n; o += i) s = Ho(o, t[o], t[o + 1], s); - else - for (o = n - i; o >= e; o -= i) s = Ho(o, t[o], t[o + 1], s); - return s && Oo(s, s.next) && (Go(s), s = s.next), s - } - - function xo(t, e) { - if (!t) return t; - e || (e = t); - let n, i = t; - do { - if (n = !1, i.steiner || !Oo(i, i.next) && 0 !== Io(i.prev, i, i.next)) i = i.next; - else { - if (Go(i), i = e = i.prev, i === i.next) break; - n = !0 - } - } while (n || i !== e); - return e - } - - function _o(t, e, n, i, r, o, s) { - if (!t) return; - !s && o && function(t, e, n, i) { - let r = t; - do { - null === r.z && (r.z = Ro(r.x, r.y, e, n, i)), r.prevZ = r.prev, r.nextZ = r.next, r = r.next - } while (r !== t); - r.prevZ.nextZ = null, r.prevZ = null, - function(t) { - let e, n, i, r, o, s, a, l, c = 1; - do { - for (n = t, t = null, o = null, s = 0; n;) { - for (s++, i = n, a = 0, e = 0; e < c && (a++, i = i.nextZ, i); e++); - for (l = c; a > 0 || l > 0 && i;) 0 !== a && (0 === l || !i || n.z <= i.z) ? (r = n, n = n.nextZ, a--) : (r = i, i = i.nextZ, l--), o ? o.nextZ = r : t = r, r.prevZ = o, o = r; - n = i - } - o.nextZ = null, c *= 2 - } while (s > 1) - }(r) - }(t, i, r, o); - let a, l, c = t; - for (; t.prev !== t.next;) - if (a = t.prev, l = t.next, o ? wo(t, i, r, o) : bo(t)) e.push(a.i / n), e.push(t.i / n), e.push(l.i / n), Go(t), t = l.next, c = l.next; - else if ((t = l) === c) { - s ? 1 === s ? _o(t = Mo(xo(t), e, n), e, n, i, r, o, 2) : 2 === s && Eo(t, e, n, i, r, o) : _o(xo(t), e, n, i, r, o, 1); - break - } - } - - function bo(t) { - const e = t.prev, - n = t, - i = t.next; - if (Io(e, n, i) >= 0) return !1; - let r = t.next.next; - for (; r !== t.prev;) { - if (Po(e.x, e.y, n.x, n.y, i.x, i.y, r.x, r.y) && Io(r.prev, r, r.next) >= 0) return !1; - r = r.next - } - return !0 - } - - function wo(t, e, n, i) { - const r = t.prev, - o = t, - s = t.next; - if (Io(r, o, s) >= 0) return !1; - const a = r.x < o.x ? r.x < s.x ? r.x : s.x : o.x < s.x ? o.x : s.x, - l = r.y < o.y ? r.y < s.y ? r.y : s.y : o.y < s.y ? o.y : s.y, - c = r.x > o.x ? r.x > s.x ? r.x : s.x : o.x > s.x ? o.x : s.x, - h = r.y > o.y ? r.y > s.y ? r.y : s.y : o.y > s.y ? o.y : s.y, - u = Ro(a, l, e, n, i), - d = Ro(c, h, e, n, i); - let p = t.prevZ, - f = t.nextZ; - for (; p && p.z >= u && f && f.z <= d;) { - if (p !== t.prev && p !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, p.x, p.y) && Io(p.prev, p, p.next) >= 0) return !1; - if (p = p.prevZ, f !== t.prev && f !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, f.x, f.y) && Io(f.prev, f, f.next) >= 0) return !1; - f = f.nextZ - } - for (; p && p.z >= u;) { - if (p !== t.prev && p !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, p.x, p.y) && Io(p.prev, p, p.next) >= 0) return !1; - p = p.prevZ - } - for (; f && f.z <= d;) { - if (f !== t.prev && f !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, f.x, f.y) && Io(f.prev, f, f.next) >= 0) return !1; - f = f.nextZ - } - return !0 - } - - function Mo(t, e, n) { - let i = t; - do { - const r = i.prev, - o = i.next.next; - !Oo(r, o) && No(r, i, i.next, o) && zo(r, o) && zo(o, r) && (e.push(r.i / n), e.push(i.i / n), e.push(o.i / n), Go(i), Go(i.next), i = t = o), i = i.next - } while (i !== t); - return xo(i) - } - - function Eo(t, e, n, i, r, o) { - let s = t; - do { - let t = s.next.next; - for (; t !== s.prev;) { - if (s.i !== t.i && Do(s, t)) { - let a = Uo(s, t); - return s = xo(s, s.next), a = xo(a, a.next), _o(s, e, n, i, r, o), void _o(a, e, n, i, r, o) - } - t = t.next - } - s = s.next - } while (s !== t) - } - - function So(t, e) { - return t.x - e.x - } - - function To(t, e) { - if (e = function(t, e) { - let n = e; - const i = t.x, - r = t.y; - let o, s = -1 / 0; - do { - if (r <= n.y && r >= n.next.y && n.next.y !== n.y) { - const t = n.x + (r - n.y) * (n.next.x - n.x) / (n.next.y - n.y); - if (t <= i && t > s) { - if (s = t, t === i) { - if (r === n.y) return n; - if (r === n.next.y) return n.next - } - o = n.x < n.next.x ? n : n.next - } - } - n = n.next - } while (n !== e); - if (!o) return null; - if (i === s) return o; - const a = o, - l = o.x, - c = o.y; - let h, u = 1 / 0; - n = o; - do { - i >= n.x && n.x >= l && i !== n.x && Po(r < c ? i : s, r, l, c, r < c ? s : i, r, n.x, n.y) && (h = Math.abs(r - n.y) / (i - n.x), zo(n, t) && (h < u || h === u && (n.x > o.x || n.x === o.x && Lo(o, n))) && (o = n, u = h)), n = n.next - } while (n !== a); - return o - }(t, e)) { - const n = Uo(e, t); - xo(e, e.next), xo(n, n.next) - } - } - - function Lo(t, e) { - return Io(t.prev, t, e.prev) < 0 && Io(e.next, t, t.next) < 0 - } - - function Ro(t, e, n, i, r) { - return (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = 32767 * (t - n) * r) | t << 8)) | t << 4)) | t << 2)) | t << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - i) * r) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1 - } - - function Co(t) { - let e = t, - n = t; - do { - (e.x < n.x || e.x === n.x && e.y < n.y) && (n = e), e = e.next - } while (e !== t); - return n - } - - function Po(t, e, n, i, r, o, s, a) { - return (r - s) * (e - a) - (t - s) * (o - a) >= 0 && (t - s) * (i - a) - (n - s) * (e - a) >= 0 && (n - s) * (o - a) - (r - s) * (i - a) >= 0 - } - - function Do(t, e) { - return t.next.i !== e.i && t.prev.i !== e.i && ! function(t, e) { - let n = t; - do { - if (n.i !== t.i && n.next.i !== t.i && n.i !== e.i && n.next.i !== e.i && No(n, n.next, t, e)) return !0; - n = n.next - } while (n !== t); - return !1 - }(t, e) && (zo(t, e) && zo(e, t) && function(t, e) { - let n = t, - i = !1; - const r = (t.x + e.x) / 2, - o = (t.y + e.y) / 2; - do { - n.y > o != n.next.y > o && n.next.y !== n.y && r < (n.next.x - n.x) * (o - n.y) / (n.next.y - n.y) + n.x && (i = !i), n = n.next - } while (n !== t); - return i - }(t, e) && (Io(t.prev, t, e.prev) || Io(t, e.prev, e)) || Oo(t, e) && Io(t.prev, t, t.next) > 0 && Io(e.prev, e, e.next) > 0) - } - - function Io(t, e, n) { - return (e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y) - } - - function Oo(t, e) { - return t.x === e.x && t.y === e.y - } - - function No(t, e, n, i) { - const r = Fo(Io(t, e, n)), - o = Fo(Io(t, e, i)), - s = Fo(Io(n, i, t)), - a = Fo(Io(n, i, e)); - return r !== o && s !== a || (!(0 !== r || !Bo(t, n, e)) || (!(0 !== o || !Bo(t, i, e)) || (!(0 !== s || !Bo(n, t, i)) || !(0 !== a || !Bo(n, e, i))))) - } - - function Bo(t, e, n) { - return e.x <= Math.max(t.x, n.x) && e.x >= Math.min(t.x, n.x) && e.y <= Math.max(t.y, n.y) && e.y >= Math.min(t.y, n.y) - } - - function Fo(t) { - return t > 0 ? 1 : t < 0 ? -1 : 0 - } - - function zo(t, e) { - return Io(t.prev, t, t.next) < 0 ? Io(t, e, t.next) >= 0 && Io(t, t.prev, e) >= 0 : Io(t, e, t.prev) < 0 || Io(t, t.next, e) < 0 - } - - function Uo(t, e) { - const n = new Vo(t.i, t.x, t.y), - i = new Vo(e.i, e.x, e.y), - r = t.next, - o = e.prev; - return t.next = e, e.prev = t, n.next = r, r.prev = n, i.next = n, n.prev = i, o.next = i, i.prev = o, i - } - - function Ho(t, e, n, i) { - const r = new Vo(t, e, n); - return i ? (r.next = i.next, r.prev = i, i.next.prev = r, i.next = r) : (r.prev = r, r.next = r), r - } - - function Go(t) { - t.next.prev = t.prev, t.prev.next = t.next, t.prevZ && (t.prevZ.nextZ = t.nextZ), t.nextZ && (t.nextZ.prevZ = t.prevZ) - } - - function Vo(t, e, n) { - this.i = t, this.x = e, this.y = n, this.prev = null, this.next = null, this.z = null, this.prevZ = null, this.nextZ = null, this.steiner = !1 - } - const ko = { - area: function(t) { - const e = t.length; - let n = 0; - for (let i = e - 1, r = 0; r < e; i = r++) n += t[i].x * t[r].y - t[r].x * t[i].y; - return .5 * n - }, - isClockWise: function(t) { - return ko.area(t) < 0 - }, - triangulateShape: function(t, e) { - const n = [], - i = [], - r = []; - Wo(t), jo(n, t); - let o = t.length; - e.forEach(Wo); - for (let t = 0; t < e.length; t++) i.push(o), o += e[t].length, jo(n, e[t]); - const s = yo(n, i); - for (let t = 0; t < s.length; t += 3) r.push(s.slice(t, t + 3)); - return r - } - }; - - function Wo(t) { - const e = t.length; - e > 2 && t[e - 1].equals(t[0]) && t.pop() - } - - function jo(t, e) { - for (let n = 0; n < e.length; n++) t.push(e[n].x), t.push(e[n].y) - } - class Xo extends be { - constructor(t, e) { - super(), this.type = "ExtrudeGeometry", this.parameters = { - shapes: t, - options: e - }, t = Array.isArray(t) ? t : [t]; - const n = this, - i = [], - r = []; - for (let e = 0, n = t.length; e < n; e++) { - o(t[e]) - } - - function o(t) { - const o = [], - s = void 0 !== e.curveSegments ? e.curveSegments : 12, - a = void 0 !== e.steps ? e.steps : 1; - let l = void 0 !== e.depth ? e.depth : 100, - c = void 0 === e.bevelEnabled || e.bevelEnabled, - h = void 0 !== e.bevelThickness ? e.bevelThickness : 6, - u = void 0 !== e.bevelSize ? e.bevelSize : h - 2, - d = void 0 !== e.bevelOffset ? e.bevelOffset : 0, - p = void 0 !== e.bevelSegments ? e.bevelSegments : 3; - const f = e.extrudePath, - m = void 0 !== e.UVGenerator ? e.UVGenerator : qo; - void 0 !== e.amount && (console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."), l = e.amount); - let g, y, A, x, _, b = !1; - f && (g = f.getSpacedPoints(a), b = !0, c = !1, y = f.computeFrenetFrames(a, !1), A = new T, x = new T, _ = new T), c || (p = 0, h = 0, u = 0, d = 0); - const w = t.extractPoints(s); - let M = w.shape; - const E = w.holes; - if (!ko.isClockWise(M)) { - M = M.reverse(); - for (let t = 0, e = E.length; t < e; t++) { - const e = E[t]; - ko.isClockWise(e) && (E[t] = e.reverse()) - } - } - const S = ko.triangulateShape(M, E), - L = M; - for (let t = 0, e = E.length; t < e; t++) { - const e = E[t]; - M = M.concat(e) - } - - function R(t, e, n) { - return e || console.error("THREE.ExtrudeGeometry: vec does not exist"), e.clone().multiplyScalar(n).add(t) - } - const C = M.length, - P = S.length; - - function D(t, e, n) { - let i, r, o; - const s = t.x - e.x, - a = t.y - e.y, - l = n.x - t.x, - c = n.y - t.y, - h = s * s + a * a, - u = s * c - a * l; - if (Math.abs(u) > Number.EPSILON) { - const u = Math.sqrt(h), - d = Math.sqrt(l * l + c * c), - p = e.x - a / u, - f = e.y + s / u, - m = ((n.x - c / d - p) * c - (n.y + l / d - f) * l) / (s * c - a * l); - i = p + s * m - t.x, r = f + a * m - t.y; - const g = i * i + r * r; - if (g <= 2) return new v(i, r); - o = Math.sqrt(g / 2) - } else { - let t = !1; - s > Number.EPSILON ? l > Number.EPSILON && (t = !0) : s < -Number.EPSILON ? l < -Number.EPSILON && (t = !0) : Math.sign(a) === Math.sign(c) && (t = !0), t ? (i = -a, r = s, o = Math.sqrt(h)) : (i = s, r = a, o = Math.sqrt(h / 2)) - } - return new v(i / o, r / o) - } - const I = []; - for (let t = 0, e = L.length, n = e - 1, i = t + 1; t < e; t++, n++, i++) n === e && (n = 0), i === e && (i = 0), I[t] = D(L[t], L[n], L[i]); - const O = []; - let N, B = I.concat(); - for (let t = 0, e = E.length; t < e; t++) { - const e = E[t]; - N = []; - for (let t = 0, n = e.length, i = n - 1, r = t + 1; t < n; t++, i++, r++) i === n && (i = 0), r === n && (r = 0), N[t] = D(e[t], e[i], e[r]); - O.push(N), B = B.concat(N) - } - for (let t = 0; t < p; t++) { - const e = t / p, - n = h * Math.cos(e * Math.PI / 2), - i = u * Math.sin(e * Math.PI / 2) + d; - for (let t = 0, e = L.length; t < e; t++) { - const e = R(L[t], I[t], i); - U(e.x, e.y, -n) - } - for (let t = 0, e = E.length; t < e; t++) { - const e = E[t]; - N = O[t]; - for (let t = 0, r = e.length; t < r; t++) { - const r = R(e[t], N[t], i); - U(r.x, r.y, -n) - } - } - } - const F = u + d; - for (let t = 0; t < C; t++) { - const e = c ? R(M[t], B[t], F) : M[t]; - b ? (x.copy(y.normals[0]).multiplyScalar(e.x), A.copy(y.binormals[0]).multiplyScalar(e.y), _.copy(g[0]).add(x).add(A), U(_.x, _.y, _.z)) : U(e.x, e.y, 0) - } - for (let t = 1; t <= a; t++) - for (let e = 0; e < C; e++) { - const n = c ? R(M[e], B[e], F) : M[e]; - b ? (x.copy(y.normals[t]).multiplyScalar(n.x), A.copy(y.binormals[t]).multiplyScalar(n.y), _.copy(g[t]).add(x).add(A), U(_.x, _.y, _.z)) : U(n.x, n.y, l / a * t) - } - for (let t = p - 1; t >= 0; t--) { - const e = t / p, - n = h * Math.cos(e * Math.PI / 2), - i = u * Math.sin(e * Math.PI / 2) + d; - for (let t = 0, e = L.length; t < e; t++) { - const e = R(L[t], I[t], i); - U(e.x, e.y, l + n) - } - for (let t = 0, e = E.length; t < e; t++) { - const e = E[t]; - N = O[t]; - for (let t = 0, r = e.length; t < r; t++) { - const r = R(e[t], N[t], i); - b ? U(r.x, r.y + g[a - 1].y, g[a - 1].x + n) : U(r.x, r.y, l + n) - } - } - } - - function z(t, e) { - let n = t.length; - for (; --n >= 0;) { - const i = n; - let r = n - 1; - r < 0 && (r = t.length - 1); - for (let t = 0, n = a + 2 * p; t < n; t++) { - const n = C * t, - o = C * (t + 1); - G(e + i + n, e + r + n, e + r + o, e + i + o) - } - } - } - - function U(t, e, n) { - o.push(t), o.push(e), o.push(n) - } - - function H(t, e, r) { - V(t), V(e), V(r); - const o = i.length / 3, - s = m.generateTopUV(n, i, o - 3, o - 2, o - 1); - k(s[0]), k(s[1]), k(s[2]) - } - - function G(t, e, r, o) { - V(t), V(e), V(o), V(e), V(r), V(o); - const s = i.length / 3, - a = m.generateSideWallUV(n, i, s - 6, s - 3, s - 2, s - 1); - k(a[0]), k(a[1]), k(a[3]), k(a[1]), k(a[2]), k(a[3]) - } - - function V(t) { - i.push(o[3 * t + 0]), i.push(o[3 * t + 1]), i.push(o[3 * t + 2]) - } - - function k(t) { - r.push(t.x), r.push(t.y) - }! function() { - const t = i.length / 3; - if (c) { - let t = 0, - e = C * t; - for (let t = 0; t < P; t++) { - const n = S[t]; - H(n[2] + e, n[1] + e, n[0] + e) - } - t = a + 2 * p, e = C * t; - for (let t = 0; t < P; t++) { - const n = S[t]; - H(n[0] + e, n[1] + e, n[2] + e) - } - } else { - for (let t = 0; t < P; t++) { - const e = S[t]; - H(e[2], e[1], e[0]) - } - for (let t = 0; t < P; t++) { - const e = S[t]; - H(e[0] + C * a, e[1] + C * a, e[2] + C * a) - } - } - n.addGroup(t, i.length / 3 - t, 0) - }(), - function() { - const t = i.length / 3; - let e = 0; - z(L, e), e += L.length; - for (let t = 0, n = E.length; t < n; t++) { - const n = E[t]; - z(n, e), e += n.length - } - n.addGroup(t, i.length / 3 - t, 1) - }() - } - this.setAttribute("position", new he(i, 3)), this.setAttribute("uv", new he(r, 2)), this.computeVertexNormals() - } - toJSON() { - const t = be.prototype.toJSON.call(this); - return function(t, e, n) { - if (n.shapes = [], Array.isArray(t)) - for (let e = 0, i = t.length; e < i; e++) { - const i = t[e]; - n.shapes.push(i.uuid) - } else n.shapes.push(t.uuid); - void 0 !== e.extrudePath && (n.options.extrudePath = e.extrudePath.toJSON()); - return n - }(this.parameters.shapes, this.parameters.options, t) - } - } - const qo = { - generateTopUV: function(t, e, n, i, r) { - const o = e[3 * n], - s = e[3 * n + 1], - a = e[3 * i], - l = e[3 * i + 1], - c = e[3 * r], - h = e[3 * r + 1]; - return [new v(o, s), new v(a, l), new v(c, h)] - }, - generateSideWallUV: function(t, e, n, i, r, o) { - const s = e[3 * n], - a = e[3 * n + 1], - l = e[3 * n + 2], - c = e[3 * i], - h = e[3 * i + 1], - u = e[3 * i + 2], - d = e[3 * r], - p = e[3 * r + 1], - f = e[3 * r + 2], - m = e[3 * o], - g = e[3 * o + 1], - y = e[3 * o + 2]; - return Math.abs(a - h) < .01 ? [new v(s, 1 - l), new v(c, 1 - u), new v(d, 1 - f), new v(m, 1 - y)] : [new v(a, 1 - l), new v(h, 1 - u), new v(p, 1 - f), new v(g, 1 - y)] - } - }; - - function Yo(t, e, n) { - be.call(this), this.type = "ParametricGeometry", this.parameters = { - func: t, - slices: e, - stacks: n - }; - const i = [], - r = [], - o = [], - s = [], - a = 1e-5, - l = new T, - c = new T, - h = new T, - u = new T, - d = new T; - t.length < 3 && console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); - const p = e + 1; - for (let i = 0; i <= n; i++) { - const p = i / n; - for (let n = 0; n <= e; n++) { - const i = n / e; - t(i, p, c), r.push(c.x, c.y, c.z), i - a >= 0 ? (t(i - a, p, h), u.subVectors(c, h)) : (t(i + a, p, h), u.subVectors(h, c)), p - a >= 0 ? (t(i, p - a, h), d.subVectors(c, h)) : (t(i, p + a, h), d.subVectors(h, c)), l.crossVectors(u, d).normalize(), o.push(l.x, l.y, l.z), s.push(i, p) - } - } - for (let t = 0; t < n; t++) - for (let n = 0; n < e; n++) { - const e = t * p + n, - r = t * p + n + 1, - o = (t + 1) * p + n + 1, - s = (t + 1) * p + n; - i.push(e, r, s), i.push(r, o, s) - } - this.setIndex(i), this.setAttribute("position", new he(r, 3)), this.setAttribute("normal", new he(o, 3)), this.setAttribute("uv", new he(s, 2)) - } - Yo.prototype = Object.create(be.prototype), Yo.prototype.constructor = Yo; - class Qo extends be { - constructor(t, e = 12) { - super(), this.type = "ShapeGeometry", this.parameters = { - shapes: t, - curveSegments: e - }; - const n = [], - i = [], - r = [], - o = []; - let s = 0, - a = 0; - if (!1 === Array.isArray(t)) l(t); - else - for (let e = 0; e < t.length; e++) l(t[e]), this.addGroup(s, a, e), s += a, a = 0; - - function l(t) { - const s = i.length / 3, - l = t.extractPoints(e); - let c = l.shape; - const h = l.holes; - !1 === ko.isClockWise(c) && (c = c.reverse()); - for (let t = 0, e = h.length; t < e; t++) { - const e = h[t]; - !0 === ko.isClockWise(e) && (h[t] = e.reverse()) - } - const u = ko.triangulateShape(c, h); - for (let t = 0, e = h.length; t < e; t++) { - const e = h[t]; - c = c.concat(e) - } - for (let t = 0, e = c.length; t < e; t++) { - const e = c[t]; - i.push(e.x, e.y, 0), r.push(0, 0, 1), o.push(e.x, e.y) - } - for (let t = 0, e = u.length; t < e; t++) { - const e = u[t], - i = e[0] + s, - r = e[1] + s, - o = e[2] + s; - n.push(i, r, o), a += 3 - } - } - this.setIndex(n), this.setAttribute("position", new he(i, 3)), this.setAttribute("normal", new he(r, 3)), this.setAttribute("uv", new he(o, 2)) - } - toJSON() { - const t = be.prototype.toJSON.call(this); - return function(t, e) { - if (e.shapes = [], Array.isArray(t)) - for (let n = 0, i = t.length; n < i; n++) { - const i = t[n]; - e.shapes.push(i.uuid) - } else e.shapes.push(t.uuid); - return e - }(this.parameters.shapes, t) - } - } - class Zo extends be { - constructor(t = 1, e = 8, n = 6, i = 0, r = 2 * Math.PI, o = 0, s = Math.PI) { - super(), this.type = "SphereGeometry", this.parameters = { - radius: t, - widthSegments: e, - heightSegments: n, - phiStart: i, - phiLength: r, - thetaStart: o, - thetaLength: s - }, e = Math.max(3, Math.floor(e)), n = Math.max(2, Math.floor(n)); - const a = Math.min(o + s, Math.PI); - let l = 0; - const c = [], - h = new T, - u = new T, - d = [], - p = [], - f = [], - m = []; - for (let d = 0; d <= n; d++) { - const g = [], - v = d / n; - let y = 0; - 0 == d && 0 == o ? y = .5 / e : d == n && a == Math.PI && (y = -.5 / e); - for (let n = 0; n <= e; n++) { - const a = n / e; - h.x = -t * Math.cos(i + a * r) * Math.sin(o + v * s), h.y = t * Math.cos(o + v * s), h.z = t * Math.sin(i + a * r) * Math.sin(o + v * s), p.push(h.x, h.y, h.z), u.copy(h).normalize(), f.push(u.x, u.y, u.z), m.push(a + y, 1 - v), g.push(l++) - } - c.push(g) - } - for (let t = 0; t < n; t++) - for (let i = 0; i < e; i++) { - const e = c[t][i + 1], - r = c[t][i], - s = c[t + 1][i], - l = c[t + 1][i + 1]; - (0 !== t || o > 0) && d.push(e, r, l), (t !== n - 1 || a < Math.PI) && d.push(r, s, l) - } - this.setIndex(d), this.setAttribute("position", new he(p, 3)), this.setAttribute("normal", new he(f, 3)), this.setAttribute("uv", new he(m, 2)) - } - } - - function Jo(t) { - Jt.call(this), this.type = "ShadowMaterial", this.color = new Yt(0), this.transparent = !0, this.setValues(t) - } - - function Ko(t) { - Xe.call(this, t), this.type = "RawShaderMaterial" - } - - function $o(t) { - Jt.call(this), this.defines = { - STANDARD: "" - }, this.type = "MeshStandardMaterial", this.color = new Yt(16777215), this.roughness = 1, this.metalness = 0, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.roughnessMap = null, this.metalnessMap = null, this.alphaMap = null, this.envMap = null, this.envMapIntensity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.vertexTangents = !1, this.setValues(t) - } - - function ts(t) { - $o.call(this), this.defines = { - STANDARD: "", - PHYSICAL: "" - }, this.type = "MeshPhysicalMaterial", this.clearcoat = 0, this.clearcoatMap = null, this.clearcoatRoughness = 0, this.clearcoatRoughnessMap = null, this.clearcoatNormalScale = new v(1, 1), this.clearcoatNormalMap = null, this.reflectivity = .5, Object.defineProperty(this, "ior", { - get: function() { - return (1 + .4 * this.reflectivity) / (1 - .4 * this.reflectivity) - }, - set: function(t) { - this.reflectivity = g.clamp(2.5 * (t - 1) / (t + 1), 0, 1) - } - }), this.sheen = null, this.transmission = 0, this.transmissionMap = null, this.setValues(t) - } - - function es(t) { - Jt.call(this), this.type = "MeshPhongMaterial", this.color = new Yt(16777215), this.specular = new Yt(1118481), this.shininess = 30, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) - } - - function ns(t) { - Jt.call(this), this.defines = { - TOON: "" - }, this.type = "MeshToonMaterial", this.color = new Yt(16777215), this.map = null, this.gradientMap = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.alphaMap = null, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) - } - - function is(t) { - Jt.call(this), this.type = "MeshNormalMaterial", this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) - } - - function rs(t) { - Jt.call(this), this.type = "MeshLambertMaterial", this.color = new Yt(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) - } - - function os(t) { - Jt.call(this), this.defines = { - MATCAP: "" - }, this.type = "MeshMatcapMaterial", this.color = new Yt(16777215), this.matcap = null, this.map = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.alphaMap = null, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t) - } - - function ss(t) { - Qr.call(this), this.type = "LineDashedMaterial", this.scale = 1, this.dashSize = 3, this.gapSize = 1, this.setValues(t) - } - Jo.prototype = Object.create(Jt.prototype), Jo.prototype.constructor = Jo, Jo.prototype.isShadowMaterial = !0, Jo.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this - }, Ko.prototype = Object.create(Xe.prototype), Ko.prototype.constructor = Ko, Ko.prototype.isRawShaderMaterial = !0, $o.prototype = Object.create(Jt.prototype), $o.prototype.constructor = $o, $o.prototype.isMeshStandardMaterial = !0, $o.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.defines = { - STANDARD: "" - }, this.color.copy(t.color), this.roughness = t.roughness, this.metalness = t.metalness, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.roughnessMap = t.roughnessMap, this.metalnessMap = t.metalnessMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.envMapIntensity = t.envMapIntensity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this.vertexTangents = t.vertexTangents, this - }, ts.prototype = Object.create($o.prototype), ts.prototype.constructor = ts, ts.prototype.isMeshPhysicalMaterial = !0, ts.prototype.copy = function(t) { - return $o.prototype.copy.call(this, t), this.defines = { - STANDARD: "", - PHYSICAL: "" - }, this.clearcoat = t.clearcoat, this.clearcoatMap = t.clearcoatMap, this.clearcoatRoughness = t.clearcoatRoughness, this.clearcoatRoughnessMap = t.clearcoatRoughnessMap, this.clearcoatNormalMap = t.clearcoatNormalMap, this.clearcoatNormalScale.copy(t.clearcoatNormalScale), this.reflectivity = t.reflectivity, t.sheen ? this.sheen = (this.sheen || new Yt).copy(t.sheen) : this.sheen = null, this.transmission = t.transmission, this.transmissionMap = t.transmissionMap, this - }, es.prototype = Object.create(Jt.prototype), es.prototype.constructor = es, es.prototype.isMeshPhongMaterial = !0, es.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.specular.copy(t.specular), this.shininess = t.shininess, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this - }, ns.prototype = Object.create(Jt.prototype), ns.prototype.constructor = ns, ns.prototype.isMeshToonMaterial = !0, ns.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.gradientMap = t.gradientMap, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.alphaMap = t.alphaMap, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this - }, is.prototype = Object.create(Jt.prototype), is.prototype.constructor = is, is.prototype.isMeshNormalMaterial = !0, is.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this - }, rs.prototype = Object.create(Jt.prototype), rs.prototype.constructor = rs, rs.prototype.isMeshLambertMaterial = !0, rs.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this - }, os.prototype = Object.create(Jt.prototype), os.prototype.constructor = os, os.prototype.isMeshMatcapMaterial = !0, os.prototype.copy = function(t) { - return Jt.prototype.copy.call(this, t), this.defines = { - MATCAP: "" - }, this.color.copy(t.color), this.matcap = t.matcap, this.map = t.map, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.alphaMap = t.alphaMap, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this - }, ss.prototype = Object.create(Qr.prototype), ss.prototype.constructor = ss, ss.prototype.isLineDashedMaterial = !0, ss.prototype.copy = function(t) { - return Qr.prototype.copy.call(this, t), this.scale = t.scale, this.dashSize = t.dashSize, this.gapSize = t.gapSize, this - }; - var as = Object.freeze({ - __proto__: null, - ShadowMaterial: Jo, - SpriteMaterial: mr, - RawShaderMaterial: Ko, - ShaderMaterial: Xe, - PointsMaterial: so, - MeshPhysicalMaterial: ts, - MeshStandardMaterial: $o, - MeshPhongMaterial: es, - MeshToonMaterial: ns, - MeshNormalMaterial: is, - MeshLambertMaterial: rs, - MeshDepthMaterial: Ki, - MeshDistanceMaterial: $i, - MeshBasicMaterial: Kt, - MeshMatcapMaterial: os, - LineDashedMaterial: ss, - LineBasicMaterial: Qr, - Material: Jt - }); - const ls = { - arraySlice: function(t, e, n) { - return ls.isTypedArray(t) ? new t.constructor(t.subarray(e, void 0 !== n ? n : t.length)) : t.slice(e, n) - }, - convertArray: function(t, e, n) { - return !t || !n && t.constructor === e ? t : "number" == typeof e.BYTES_PER_ELEMENT ? new e(t) : Array.prototype.slice.call(t) - }, - isTypedArray: function(t) { - return ArrayBuffer.isView(t) && !(t instanceof DataView) - }, - getKeyframeOrder: function(t) { - const e = t.length, - n = new Array(e); - for (let t = 0; t !== e; ++t) n[t] = t; - return n.sort((function(e, n) { - return t[e] - t[n] - })), n - }, - sortedArray: function(t, e, n) { - const i = t.length, - r = new t.constructor(i); - for (let o = 0, s = 0; s !== i; ++o) { - const i = n[o] * e; - for (let n = 0; n !== e; ++n) r[s++] = t[i + n] - } - return r - }, - flattenJSON: function(t, e, n, i) { - let r = 1, - o = t[0]; - for (; void 0 !== o && void 0 === o[i];) o = t[r++]; - if (void 0 === o) return; - let s = o[i]; - if (void 0 !== s) - if (Array.isArray(s)) - do { - s = o[i], void 0 !== s && (e.push(o.time), n.push.apply(n, s)), o = t[r++] - } while (void 0 !== o); - else if (void 0 !== s.toArray) - do { - s = o[i], void 0 !== s && (e.push(o.time), s.toArray(n, n.length)), o = t[r++] - } while (void 0 !== o); - else - do { - s = o[i], void 0 !== s && (e.push(o.time), n.push(s)), o = t[r++] - } while (void 0 !== o) - }, - subclip: function(t, e, n, i, r = 30) { - const o = t.clone(); - o.name = e; - const s = []; - for (let t = 0; t < o.tracks.length; ++t) { - const e = o.tracks[t], - a = e.getValueSize(), - l = [], - c = []; - for (let t = 0; t < e.times.length; ++t) { - const o = e.times[t] * r; - if (!(o < n || o >= i)) { - l.push(e.times[t]); - for (let n = 0; n < a; ++n) c.push(e.values[t * a + n]) - } - } - 0 !== l.length && (e.times = ls.convertArray(l, e.times.constructor), e.values = ls.convertArray(c, e.values.constructor), s.push(e)) - } - o.tracks = s; - let a = 1 / 0; - for (let t = 0; t < o.tracks.length; ++t) a > o.tracks[t].times[0] && (a = o.tracks[t].times[0]); - for (let t = 0; t < o.tracks.length; ++t) o.tracks[t].shift(-1 * a); - return o.resetDuration(), o - }, - makeClipAdditive: function(t, e = 0, n = t, i = 30) { - i <= 0 && (i = 30); - const r = n.tracks.length, - o = e / i; - for (let e = 0; e < r; ++e) { - const i = n.tracks[e], - r = i.ValueTypeName; - if ("bool" === r || "string" === r) continue; - const s = t.tracks.find((function(t) { - return t.name === i.name && t.ValueTypeName === r - })); - if (void 0 === s) continue; - let a = 0; - const l = i.getValueSize(); - i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (a = l / 3); - let c = 0; - const h = s.getValueSize(); - s.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (c = h / 3); - const u = i.times.length - 1; - let d; - if (o <= i.times[0]) { - const t = a, - e = l - a; - d = ls.arraySlice(i.values, t, e) - } else if (o >= i.times[u]) { - const t = u * l + a, - e = t + l - a; - d = ls.arraySlice(i.values, t, e) - } else { - const t = i.createInterpolant(), - e = a, - n = l - a; - t.evaluate(o), d = ls.arraySlice(t.resultBuffer, e, n) - } - if ("quaternion" === r) { - (new S).fromArray(d).normalize().conjugate().toArray(d) - } - const p = s.times.length; - for (let t = 0; t < p; ++t) { - const e = t * h + c; - if ("quaternion" === r) S.multiplyQuaternionsFlat(s.values, e, d, 0, s.values, e); - else { - const t = h - 2 * c; - for (let n = 0; n < t; ++n) s.values[e + n] -= d[n] - } - } - } - return t.blendMode = 2501, t - } - }; - - function cs(t, e, n, i) { - this.parameterPositions = t, this._cachedIndex = 0, this.resultBuffer = void 0 !== i ? i : new e.constructor(n), this.sampleValues = e, this.valueSize = n - } - - function hs(t, e, n, i) { - cs.call(this, t, e, n, i), this._weightPrev = -0, this._offsetPrev = -0, this._weightNext = -0, this._offsetNext = -0 - } - - function us(t, e, n, i) { - cs.call(this, t, e, n, i) - } - - function ds(t, e, n, i) { - cs.call(this, t, e, n, i) - } - - function ps(t, e, n, i) { - if (void 0 === t) throw new Error("THREE.KeyframeTrack: track name is undefined"); - if (void 0 === e || 0 === e.length) throw new Error("THREE.KeyframeTrack: no keyframes in track named " + t); - this.name = t, this.times = ls.convertArray(e, this.TimeBufferType), this.values = ls.convertArray(n, this.ValueBufferType), this.setInterpolation(i || this.DefaultInterpolation) - } - - function fs(t, e, n) { - ps.call(this, t, e, n) - } - - function ms(t, e, n, i) { - ps.call(this, t, e, n, i) - } - - function gs(t, e, n, i) { - ps.call(this, t, e, n, i) - } - - function vs(t, e, n, i) { - cs.call(this, t, e, n, i) - } - - function ys(t, e, n, i) { - ps.call(this, t, e, n, i) - } - - function As(t, e, n, i) { - ps.call(this, t, e, n, i) - } - - function xs(t, e, n, i) { - ps.call(this, t, e, n, i) - } - - function _s(t, e = -1, n, i = 2500) { - this.name = t, this.tracks = n, this.duration = e, this.blendMode = i, this.uuid = g.generateUUID(), this.duration < 0 && this.resetDuration() - } - - function bs(t) { - if (void 0 === t.type) throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); - const e = function(t) { - switch (t.toLowerCase()) { - case "scalar": - case "double": - case "float": - case "number": - case "integer": - return gs; - case "vector": - case "vector2": - case "vector3": - case "vector4": - return xs; - case "color": - return ms; - case "quaternion": - return ys; - case "bool": - case "boolean": - return fs; - case "string": - return As - } - throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + t) - }(t.type); - if (void 0 === t.times) { - const e = [], - n = []; - ls.flattenJSON(t.keys, e, n, "value"), t.times = e, t.values = n - } - return void 0 !== e.parse ? e.parse(t) : new e(t.name, t.times, t.values, t.interpolation) - } - Object.assign(cs.prototype, { - evaluate: function(t) { - const e = this.parameterPositions; - let n = this._cachedIndex, - i = e[n], - r = e[n - 1]; - t: { - e: { - let o;n: { - i: if (!(t < i)) { - for (let o = n + 2;;) { - if (void 0 === i) { - if (t < r) break i; - return n = e.length, this._cachedIndex = n, this.afterEnd_(n - 1, t, r) - } - if (n === o) break; - if (r = i, i = e[++n], t < i) break e - } - o = e.length; - break n - }if (t >= r) break t; { - const s = e[1]; - t < s && (n = 2, r = s); - for (let o = n - 2;;) { - if (void 0 === r) return this._cachedIndex = 0, this.beforeStart_(0, t, i); - if (n === o) break; - if (i = r, r = e[--n - 1], t >= r) break e - } - o = n, n = 0 - } - } - for (; n < o;) { - const i = n + o >>> 1; - t < e[i] ? o = i : n = i + 1 - } - if (i = e[n], r = e[n - 1], void 0 === r) return this._cachedIndex = 0, - this.beforeStart_(0, t, i); - if (void 0 === i) return n = e.length, - this._cachedIndex = n, - this.afterEnd_(n - 1, r, t) - } - this._cachedIndex = n, - this.intervalChanged_(n, r, i) - } - return this.interpolate_(n, r, t, i) - }, - settings: null, - DefaultSettings_: {}, - getSettings_: function() { - return this.settings || this.DefaultSettings_ - }, - copySampleValue_: function(t) { - const e = this.resultBuffer, - n = this.sampleValues, - i = this.valueSize, - r = t * i; - for (let t = 0; t !== i; ++t) e[t] = n[r + t]; - return e - }, - interpolate_: function() { - throw new Error("call to abstract method") - }, - intervalChanged_: function() {} - }), Object.assign(cs.prototype, { - beforeStart_: cs.prototype.copySampleValue_, - afterEnd_: cs.prototype.copySampleValue_ - }), hs.prototype = Object.assign(Object.create(cs.prototype), { - constructor: hs, - DefaultSettings_: { - endingStart: 2400, - endingEnd: 2400 - }, - intervalChanged_: function(t, e, n) { - const i = this.parameterPositions; - let r = t - 2, - o = t + 1, - s = i[r], - a = i[o]; - if (void 0 === s) switch (this.getSettings_().endingStart) { - case 2401: - r = t, s = 2 * e - n; - break; - case 2402: - r = i.length - 2, s = e + i[r] - i[r + 1]; - break; - default: - r = t, s = n - } - if (void 0 === a) switch (this.getSettings_().endingEnd) { - case 2401: - o = t, a = 2 * n - e; - break; - case 2402: - o = 1, a = n + i[1] - i[0]; - break; - default: - o = t - 1, a = e - } - const l = .5 * (n - e), - c = this.valueSize; - this._weightPrev = l / (e - s), this._weightNext = l / (a - n), this._offsetPrev = r * c, this._offsetNext = o * c - }, - interpolate_: function(t, e, n, i) { - const r = this.resultBuffer, - o = this.sampleValues, - s = this.valueSize, - a = t * s, - l = a - s, - c = this._offsetPrev, - h = this._offsetNext, - u = this._weightPrev, - d = this._weightNext, - p = (n - e) / (i - e), - f = p * p, - m = f * p, - g = -u * m + 2 * u * f - u * p, - v = (1 + u) * m + (-1.5 - 2 * u) * f + (-.5 + u) * p + 1, - y = (-1 - d) * m + (1.5 + d) * f + .5 * p, - A = d * m - d * f; - for (let t = 0; t !== s; ++t) r[t] = g * o[c + t] + v * o[l + t] + y * o[a + t] + A * o[h + t]; - return r - } - }), us.prototype = Object.assign(Object.create(cs.prototype), { - constructor: us, - interpolate_: function(t, e, n, i) { - const r = this.resultBuffer, - o = this.sampleValues, - s = this.valueSize, - a = t * s, - l = a - s, - c = (n - e) / (i - e), - h = 1 - c; - for (let t = 0; t !== s; ++t) r[t] = o[l + t] * h + o[a + t] * c; - return r - } - }), ds.prototype = Object.assign(Object.create(cs.prototype), { - constructor: ds, - interpolate_: function(t) { - return this.copySampleValue_(t - 1) - } - }), Object.assign(ps, { - toJSON: function(t) { - const e = t.constructor; - let n; - if (void 0 !== e.toJSON) n = e.toJSON(t); - else { - n = { - name: t.name, - times: ls.convertArray(t.times, Array), - values: ls.convertArray(t.values, Array) - }; - const e = t.getInterpolation(); - e !== t.DefaultInterpolation && (n.interpolation = e) - } - return n.type = t.ValueTypeName, n - } - }), Object.assign(ps.prototype, { - constructor: ps, - TimeBufferType: Float32Array, - ValueBufferType: Float32Array, - DefaultInterpolation: 2301, - InterpolantFactoryMethodDiscrete: function(t) { - return new ds(this.times, this.values, this.getValueSize(), t) - }, - InterpolantFactoryMethodLinear: function(t) { - return new us(this.times, this.values, this.getValueSize(), t) - }, - InterpolantFactoryMethodSmooth: function(t) { - return new hs(this.times, this.values, this.getValueSize(), t) - }, - setInterpolation: function(t) { - let e; - switch (t) { - case 2300: - e = this.InterpolantFactoryMethodDiscrete; - break; - case 2301: - e = this.InterpolantFactoryMethodLinear; - break; - case 2302: - e = this.InterpolantFactoryMethodSmooth - } - if (void 0 === e) { - const e = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; - if (void 0 === this.createInterpolant) { - if (t === this.DefaultInterpolation) throw new Error(e); - this.setInterpolation(this.DefaultInterpolation) - } - return console.warn("THREE.KeyframeTrack:", e), this - } - return this.createInterpolant = e, this - }, - 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(t) { - if (0 !== t) { - const e = this.times; - for (let n = 0, i = e.length; n !== i; ++n) e[n] += t - } - return this - }, - scale: function(t) { - if (1 !== t) { - const e = this.times; - for (let n = 0, i = e.length; n !== i; ++n) e[n] *= t - } - return this - }, - trim: function(t, e) { - const n = this.times, - i = n.length; - let r = 0, - o = i - 1; - for (; r !== i && n[r] < t;) ++r; - for (; - 1 !== o && n[o] > e;) --o; - if (++o, 0 !== r || o !== i) { - r >= o && (o = Math.max(o, 1), r = o - 1); - const t = this.getValueSize(); - this.times = ls.arraySlice(n, r, o), this.values = ls.arraySlice(this.values, r * t, o * t) - } - return this - }, - validate: function() { - let t = !0; - const e = this.getValueSize(); - e - Math.floor(e) != 0 && (console.error("THREE.KeyframeTrack: Invalid value size in track.", this), t = !1); - const n = this.times, - i = this.values, - r = n.length; - 0 === r && (console.error("THREE.KeyframeTrack: Track is empty.", this), t = !1); - let o = null; - for (let e = 0; e !== r; e++) { - const i = n[e]; - if ("number" == typeof i && isNaN(i)) { - console.error("THREE.KeyframeTrack: Time is not a valid number.", this, e, i), t = !1; - break - } - if (null !== o && o > i) { - console.error("THREE.KeyframeTrack: Out of order keys.", this, e, i, o), t = !1; - break - } - o = i - } - if (void 0 !== i && ls.isTypedArray(i)) - for (let e = 0, n = i.length; e !== n; ++e) { - const n = i[e]; - if (isNaN(n)) { - console.error("THREE.KeyframeTrack: Value is not a valid number.", this, e, n), t = !1; - break - } - } - return t - }, - optimize: function() { - const t = ls.arraySlice(this.times), - e = ls.arraySlice(this.values), - n = this.getValueSize(), - i = 2302 === this.getInterpolation(), - r = t.length - 1; - let o = 1; - for (let s = 1; s < r; ++s) { - let r = !1; - const a = t[s]; - if (a !== t[s + 1] && (1 !== s || a !== t[0])) - if (i) r = !0; - else { - const t = s * n, - i = t - n, - o = t + n; - for (let s = 0; s !== n; ++s) { - const n = e[t + s]; - if (n !== e[i + s] || n !== e[o + s]) { - r = !0; - break - } - } - } if (r) { - if (s !== o) { - t[o] = t[s]; - const i = s * n, - r = o * n; - for (let t = 0; t !== n; ++t) e[r + t] = e[i + t] - }++o - } - } - if (r > 0) { - t[o] = t[r]; - for (let t = r * n, i = o * n, s = 0; s !== n; ++s) e[i + s] = e[t + s]; - ++o - } - return o !== t.length ? (this.times = ls.arraySlice(t, 0, o), this.values = ls.arraySlice(e, 0, o * n)) : (this.times = t, this.values = e), this - }, - clone: function() { - const t = ls.arraySlice(this.times, 0), - e = ls.arraySlice(this.values, 0), - n = new(0, this.constructor)(this.name, t, e); - return n.createInterpolant = this.createInterpolant, n - } - }), fs.prototype = Object.assign(Object.create(ps.prototype), { - constructor: fs, - ValueTypeName: "bool", - ValueBufferType: Array, - DefaultInterpolation: 2300, - InterpolantFactoryMethodLinear: void 0, - InterpolantFactoryMethodSmooth: void 0 - }), ms.prototype = Object.assign(Object.create(ps.prototype), { - constructor: ms, - ValueTypeName: "color" - }), gs.prototype = Object.assign(Object.create(ps.prototype), { - constructor: gs, - ValueTypeName: "number" - }), vs.prototype = Object.assign(Object.create(cs.prototype), { - constructor: vs, - interpolate_: function(t, e, n, i) { - const r = this.resultBuffer, - o = this.sampleValues, - s = this.valueSize, - a = (n - e) / (i - e); - let l = t * s; - for (let t = l + s; l !== t; l += 4) S.slerpFlat(r, 0, o, l - s, o, l, a); - return r - } - }), ys.prototype = Object.assign(Object.create(ps.prototype), { - constructor: ys, - ValueTypeName: "quaternion", - DefaultInterpolation: 2301, - InterpolantFactoryMethodLinear: function(t) { - return new vs(this.times, this.values, this.getValueSize(), t) - }, - InterpolantFactoryMethodSmooth: void 0 - }), As.prototype = Object.assign(Object.create(ps.prototype), { - constructor: As, - ValueTypeName: "string", - ValueBufferType: Array, - DefaultInterpolation: 2300, - InterpolantFactoryMethodLinear: void 0, - InterpolantFactoryMethodSmooth: void 0 - }), xs.prototype = Object.assign(Object.create(ps.prototype), { - constructor: xs, - ValueTypeName: "vector" - }), Object.assign(_s, { - parse: function(t) { - const e = [], - n = t.tracks, - i = 1 / (t.fps || 1); - for (let t = 0, r = n.length; t !== r; ++t) e.push(bs(n[t]).scale(i)); - const r = new _s(t.name, t.duration, e, t.blendMode); - return r.uuid = t.uuid, r - }, - toJSON: function(t) { - const e = [], - n = t.tracks, - i = { - name: t.name, - duration: t.duration, - tracks: e, - uuid: t.uuid, - blendMode: t.blendMode - }; - for (let t = 0, i = n.length; t !== i; ++t) e.push(ps.toJSON(n[t])); - return i - }, - CreateFromMorphTargetSequence: function(t, e, n, i) { - const r = e.length, - o = []; - for (let t = 0; t < r; t++) { - let s = [], - a = []; - s.push((t + r - 1) % r, t, (t + 1) % r), a.push(0, 1, 0); - const l = ls.getKeyframeOrder(s); - s = ls.sortedArray(s, 1, l), a = ls.sortedArray(a, 1, l), i || 0 !== s[0] || (s.push(r), a.push(a[0])), o.push(new gs(".morphTargetInfluences[" + e[t].name + "]", s, a).scale(1 / n)) - } - return new _s(t, -1, o) - }, - findByName: function(t, e) { - let n = t; - if (!Array.isArray(t)) { - const e = t; - n = e.geometry && e.geometry.animations || e.animations - } - for (let t = 0; t < n.length; t++) - if (n[t].name === e) return n[t]; - return null - }, - CreateClipsFromMorphTargetSequences: function(t, e, n) { - const i = {}, - r = /^([\w-]*?)([\d]+)$/; - for (let e = 0, n = t.length; e < n; e++) { - const n = t[e], - o = n.name.match(r); - if (o && o.length > 1) { - const t = o[1]; - let e = i[t]; - e || (i[t] = e = []), e.push(n) - } - } - const o = []; - for (const t in i) o.push(_s.CreateFromMorphTargetSequence(t, i[t], e, n)); - return o - }, - parseAnimation: function(t, e) { - if (!t) return console.error("THREE.AnimationClip: No animation in JSONLoader data."), null; - const n = function(t, e, n, i, r) { - if (0 !== n.length) { - const o = [], - s = []; - ls.flattenJSON(n, o, s, i), 0 !== o.length && r.push(new t(e, o, s)) - } - }, - i = [], - r = t.name || "default", - o = t.fps || 30, - s = t.blendMode; - let a = t.length || -1; - const l = t.hierarchy || []; - for (let t = 0; t < l.length; t++) { - const r = l[t].keys; - if (r && 0 !== r.length) - if (r[0].morphTargets) { - const t = {}; - let e; - for (e = 0; e < r.length; e++) - if (r[e].morphTargets) - for (let n = 0; n < r[e].morphTargets.length; n++) t[r[e].morphTargets[n]] = -1; - for (const n in t) { - const t = [], - o = []; - for (let i = 0; i !== r[e].morphTargets.length; ++i) { - const i = r[e]; - t.push(i.time), o.push(i.morphTarget === n ? 1 : 0) - } - i.push(new gs(".morphTargetInfluence[" + n + "]", t, o)) - } - a = t.length * (o || 1) - } else { - const o = ".bones[" + e[t].name + "]"; - n(xs, o + ".position", r, "pos", i), n(ys, o + ".quaternion", r, "rot", i), n(xs, o + ".scale", r, "scl", i) - } - } - if (0 === i.length) return null; - return new _s(r, a, i, s) - } - }), Object.assign(_s.prototype, { - resetDuration: function() { - let t = 0; - for (let e = 0, n = this.tracks.length; e !== n; ++e) { - const n = this.tracks[e]; - t = Math.max(t, n.times[n.times.length - 1]) - } - return this.duration = t, this - }, - trim: function() { - for (let t = 0; t < this.tracks.length; t++) this.tracks[t].trim(0, this.duration); - return this - }, - validate: function() { - let t = !0; - for (let e = 0; e < this.tracks.length; e++) t = t && this.tracks[e].validate(); - return t - }, - optimize: function() { - for (let t = 0; t < this.tracks.length; t++) this.tracks[t].optimize(); - return this - }, - clone: function() { - const t = []; - for (let e = 0; e < this.tracks.length; e++) t.push(this.tracks[e].clone()); - return new _s(this.name, this.duration, t, this.blendMode) - }, - toJSON: function() { - return _s.toJSON(this) - } - }); - const ws = { - enabled: !1, - files: {}, - add: function(t, e) { - !1 !== this.enabled && (this.files[t] = e) - }, - get: function(t) { - if (!1 !== this.enabled) return this.files[t] - }, - remove: function(t) { - delete this.files[t] - }, - clear: function() { - this.files = {} - } - }; - const Ms = new function(t, e, n) { - const i = this; - let r = !1, - o = 0, - s = 0, - a = void 0; - const l = []; - this.onStart = void 0, this.onLoad = t, this.onProgress = e, this.onError = n, this.itemStart = function(t) { - s++, !1 === r && void 0 !== i.onStart && i.onStart(t, o, s), r = !0 - }, this.itemEnd = function(t) { - o++, void 0 !== i.onProgress && i.onProgress(t, o, s), o === s && (r = !1, void 0 !== i.onLoad && i.onLoad()) - }, this.itemError = function(t) { - void 0 !== i.onError && i.onError(t) - }, this.resolveURL = function(t) { - return a ? a(t) : t - }, this.setURLModifier = function(t) { - return a = t, this - }, this.addHandler = function(t, e) { - return l.push(t, e), this - }, this.removeHandler = function(t) { - const e = l.indexOf(t); - return -1 !== e && l.splice(e, 2), this - }, this.getHandler = function(t) { - for (let e = 0, n = l.length; e < n; e += 2) { - const n = l[e], - i = l[e + 1]; - if (n.global && (n.lastIndex = 0), n.test(t)) return i - } - return null - } - }; - - function Es(t) { - this.manager = void 0 !== t ? t : Ms, this.crossOrigin = "anonymous", this.withCredentials = !1, this.path = "", this.resourcePath = "", this.requestHeader = {} - } - Object.assign(Es.prototype, { - load: function() {}, - loadAsync: function(t, e) { - const n = this; - return new Promise((function(i, r) { - n.load(t, i, e, r) - })) - }, - parse: function() {}, - setCrossOrigin: function(t) { - return this.crossOrigin = t, this - }, - setWithCredentials: function(t) { - return this.withCredentials = t, this - }, - setPath: function(t) { - return this.path = t, this - }, - setResourcePath: function(t) { - return this.resourcePath = t, this - }, - setRequestHeader: function(t) { - return this.requestHeader = t, this - } - }); - const Ss = {}; - - function Ts(t) { - Es.call(this, t) - } - - function Ls(t) { - Es.call(this, t) - } - - function Rs(t) { - Es.call(this, t) - } - - function Cs(t) { - Es.call(this, t) - } - - function Ps(t) { - Es.call(this, t) - } - - function Ds(t) { - Es.call(this, t) - } - - function Is(t) { - Es.call(this, t) - } - - function Os() { - this.type = "Curve", this.arcLengthDivisions = 200 - } - - function Ns(t, e, n, i, r, o, s, a) { - Os.call(this), this.type = "EllipseCurve", this.aX = t || 0, this.aY = e || 0, this.xRadius = n || 1, this.yRadius = i || 1, this.aStartAngle = r || 0, this.aEndAngle = o || 2 * Math.PI, this.aClockwise = s || !1, this.aRotation = a || 0 - } - - function Bs(t, e, n, i, r, o) { - Ns.call(this, t, e, n, n, i, r, o), this.type = "ArcCurve" - } - - function Fs() { - let t = 0, - e = 0, - n = 0, - i = 0; - - function r(r, o, s, a) { - t = r, e = s, n = -3 * r + 3 * o - 2 * s - a, i = 2 * r - 2 * o + s + a - } - return { - initCatmullRom: function(t, e, n, i, o) { - r(e, n, o * (n - t), o * (i - e)) - }, - initNonuniformCatmullRom: function(t, e, n, i, o, s, a) { - let l = (e - t) / o - (n - t) / (o + s) + (n - e) / s, - c = (n - e) / s - (i - e) / (s + a) + (i - n) / a; - l *= s, c *= s, r(e, n, l, c) - }, - calc: function(r) { - const o = r * r; - return t + e * r + n * o + i * (o * r) - } - } - } - Ts.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Ts, - load: function(t, e, n, i) { - void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); - const r = this, - o = ws.get(t); - if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { - e && e(o), r.manager.itemEnd(t) - }), 0), o; - if (void 0 !== Ss[t]) return void Ss[t].push({ - onLoad: e, - onProgress: n, - onError: i - }); - const s = t.match(/^data:(.*?)(;base64)?,(.*)$/); - let a; - if (s) { - const n = s[1], - o = !!s[2]; - let a = s[3]; - a = decodeURIComponent(a), o && (a = atob(a)); - try { - let i; - const o = (this.responseType || "").toLowerCase(); - switch (o) { - case "arraybuffer": - case "blob": - const t = new Uint8Array(a.length); - for (let e = 0; e < a.length; e++) t[e] = a.charCodeAt(e); - i = "blob" === o ? new Blob([t.buffer], { - type: n - }) : t.buffer; - break; - case "document": - const e = new DOMParser; - i = e.parseFromString(a, n); - break; - case "json": - i = JSON.parse(a); - break; - default: - i = a - } - setTimeout((function() { - e && e(i), r.manager.itemEnd(t) - }), 0) - } catch (e) { - setTimeout((function() { - i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) - }), 0) - } - } else { - Ss[t] = [], Ss[t].push({ - onLoad: e, - onProgress: n, - onError: i - }), a = new XMLHttpRequest, a.open("GET", t, !0), a.addEventListener("load", (function(e) { - const n = this.response, - i = Ss[t]; - if (delete Ss[t], 200 === this.status || 0 === this.status) { - 0 === this.status && console.warn("THREE.FileLoader: HTTP Status 0 received."), ws.add(t, n); - for (let t = 0, e = i.length; t < e; t++) { - const e = i[t]; - e.onLoad && e.onLoad(n) - } - r.manager.itemEnd(t) - } else { - for (let t = 0, n = i.length; t < n; t++) { - const n = i[t]; - n.onError && n.onError(e) - } - r.manager.itemError(t), r.manager.itemEnd(t) - } - }), !1), a.addEventListener("progress", (function(e) { - const n = Ss[t]; - for (let t = 0, i = n.length; t < i; t++) { - const i = n[t]; - i.onProgress && i.onProgress(e) - } - }), !1), a.addEventListener("error", (function(e) { - const n = Ss[t]; - delete Ss[t]; - for (let t = 0, i = n.length; t < i; t++) { - const i = n[t]; - i.onError && i.onError(e) - } - r.manager.itemError(t), r.manager.itemEnd(t) - }), !1), a.addEventListener("abort", (function(e) { - const n = Ss[t]; - delete Ss[t]; - for (let t = 0, i = n.length; t < i; t++) { - const i = n[t]; - i.onError && i.onError(e) - } - r.manager.itemError(t), r.manager.itemEnd(t) - }), !1), void 0 !== this.responseType && (a.responseType = this.responseType), void 0 !== this.withCredentials && (a.withCredentials = this.withCredentials), a.overrideMimeType && a.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain"); - for (const t in this.requestHeader) a.setRequestHeader(t, this.requestHeader[t]); - a.send(null) - } - return r.manager.itemStart(t), a - }, - setResponseType: function(t) { - return this.responseType = t, this - }, - setMimeType: function(t) { - return this.mimeType = t, this - } - }), Ls.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Ls, - load: function(t, e, n, i) { - const r = this, - o = new Ts(r.manager); - o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { - try { - e(r.parse(JSON.parse(n))) - } catch (e) { - i ? i(e) : console.error(e), r.manager.itemError(t) - } - }), n, i) - }, - parse: function(t) { - const e = []; - for (let n = 0; n < t.length; n++) { - const i = _s.parse(t[n]); - e.push(i) - } - return e - } - }), Rs.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Rs, - load: function(t, e, n, i) { - const r = this, - o = [], - s = new mo, - a = new Ts(this.manager); - a.setPath(this.path), a.setResponseType("arraybuffer"), a.setRequestHeader(this.requestHeader), a.setWithCredentials(r.withCredentials); - let l = 0; - - function c(c) { - a.load(t[c], (function(t) { - const n = r.parse(t, !0); - o[c] = { - width: n.width, - height: n.height, - format: n.format, - mipmaps: n.mipmaps - }, l += 1, 6 === l && (1 === n.mipmapCount && (s.minFilter = 1006), s.image = o, s.format = n.format, s.needsUpdate = !0, e && e(s)) - }), n, i) - } - if (Array.isArray(t)) - for (let e = 0, n = t.length; e < n; ++e) c(e); - else a.load(t, (function(t) { - const n = r.parse(t, !0); - if (n.isCubemap) { - const t = n.mipmaps.length / n.mipmapCount; - for (let e = 0; e < t; e++) { - o[e] = { - mipmaps: [] - }; - for (let t = 0; t < n.mipmapCount; t++) o[e].mipmaps.push(n.mipmaps[e * n.mipmapCount + t]), o[e].format = n.format, o[e].width = n.width, o[e].height = n.height - } - s.image = o - } else s.image.width = n.width, s.image.height = n.height, s.mipmaps = n.mipmaps; - 1 === n.mipmapCount && (s.minFilter = 1006), s.format = n.format, s.needsUpdate = !0, e && e(s) - }), n, i); - return s - } - }), Cs.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Cs, - load: function(t, e, n, i) { - void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); - const r = this, - o = ws.get(t); - if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { - e && e(o), r.manager.itemEnd(t) - }), 0), o; - const s = document.createElementNS("http://www.w3.org/1999/xhtml", "img"); - - function a() { - s.removeEventListener("load", a, !1), s.removeEventListener("error", l, !1), ws.add(t, this), e && e(this), r.manager.itemEnd(t) - } - - function l(e) { - s.removeEventListener("load", a, !1), s.removeEventListener("error", l, !1), i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) - } - return s.addEventListener("load", a, !1), s.addEventListener("error", l, !1), "data:" !== t.substr(0, 5) && void 0 !== this.crossOrigin && (s.crossOrigin = this.crossOrigin), r.manager.itemStart(t), s.src = t, s - } - }), Ps.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Ps, - load: function(t, e, n, i) { - const r = new Ze, - o = new Cs(this.manager); - o.setCrossOrigin(this.crossOrigin), o.setPath(this.path); - let s = 0; - - function a(n) { - o.load(t[n], (function(t) { - r.images[n] = t, s++, 6 === s && (r.needsUpdate = !0, e && e(r)) - }), void 0, i) - } - for (let e = 0; e < t.length; ++e) a(e); - return r - } - }), Ds.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Ds, - load: function(t, e, n, i) { - const r = this, - o = new Ke, - s = new Ts(this.manager); - return s.setResponseType("arraybuffer"), s.setRequestHeader(this.requestHeader), s.setPath(this.path), s.setWithCredentials(r.withCredentials), s.load(t, (function(t) { - const n = r.parse(t); - n && (void 0 !== n.image ? o.image = n.image : void 0 !== n.data && (o.image.width = n.width, o.image.height = n.height, o.image.data = n.data), o.wrapS = void 0 !== n.wrapS ? n.wrapS : 1001, o.wrapT = void 0 !== n.wrapT ? n.wrapT : 1001, o.magFilter = void 0 !== n.magFilter ? n.magFilter : 1006, o.minFilter = void 0 !== n.minFilter ? n.minFilter : 1006, o.anisotropy = void 0 !== n.anisotropy ? n.anisotropy : 1, void 0 !== n.encoding && (o.encoding = n.encoding), void 0 !== n.flipY && (o.flipY = n.flipY), void 0 !== n.format && (o.format = n.format), void 0 !== n.type && (o.type = n.type), void 0 !== n.mipmaps && (o.mipmaps = n.mipmaps, o.minFilter = 1008), 1 === n.mipmapCount && (o.minFilter = 1006), o.needsUpdate = !0, e && e(o, n)) - }), n, i), o - } - }), Is.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Is, - load: function(t, e, n, i) { - const r = new b, - o = new Cs(this.manager); - return o.setCrossOrigin(this.crossOrigin), o.setPath(this.path), o.load(t, (function(n) { - r.image = n; - const i = t.search(/\.jpe?g($|\?)/i) > 0 || 0 === t.search(/^data\:image\/jpeg/); - r.format = i ? 1022 : 1023, r.needsUpdate = !0, void 0 !== e && e(r) - }), n, i), r - } - }), Object.assign(Os.prototype, { - getPoint: function() { - return console.warn("THREE.Curve: .getPoint() not implemented."), null - }, - getPointAt: function(t, e) { - const n = this.getUtoTmapping(t); - return this.getPoint(n, e) - }, - getPoints: function(t = 5) { - const e = []; - for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)); - return e - }, - getSpacedPoints: function(t = 5) { - const e = []; - for (let n = 0; n <= t; n++) e.push(this.getPointAt(n / t)); - return e - }, - getLength: function() { - const t = this.getLengths(); - return t[t.length - 1] - }, - getLengths: function(t) { - if (void 0 === t && (t = this.arcLengthDivisions), this.cacheArcLengths && this.cacheArcLengths.length === t + 1 && !this.needsUpdate) return this.cacheArcLengths; - this.needsUpdate = !1; - const e = []; - let n, i = this.getPoint(0), - r = 0; - e.push(0); - for (let o = 1; o <= t; o++) n = this.getPoint(o / t), r += n.distanceTo(i), e.push(r), i = n; - return this.cacheArcLengths = e, e - }, - updateArcLengths: function() { - this.needsUpdate = !0, this.getLengths() - }, - getUtoTmapping: function(t, e) { - const n = this.getLengths(); - let i = 0; - const r = n.length; - let o; - o = e || t * n[r - 1]; - let s, a = 0, - l = r - 1; - for (; a <= l;) - if (i = Math.floor(a + (l - a) / 2), s = n[i] - o, s < 0) a = i + 1; - else { - if (!(s > 0)) { - l = i; - break - } - l = i - 1 - } if (i = l, n[i] === o) return i / (r - 1); - const c = n[i]; - return (i + (o - c) / (n[i + 1] - c)) / (r - 1) - }, - getTangent: function(t, e) { - let n = t - 1e-4, - i = t + 1e-4; - n < 0 && (n = 0), i > 1 && (i = 1); - const r = this.getPoint(n), - o = this.getPoint(i), - s = e || (r.isVector2 ? new v : new T); - return s.copy(o).sub(r).normalize(), s - }, - getTangentAt: function(t, e) { - const n = this.getUtoTmapping(t); - return this.getTangent(n, e) - }, - computeFrenetFrames: function(t, e) { - const n = new T, - i = [], - r = [], - o = [], - s = new T, - a = new et; - for (let e = 0; e <= t; e++) { - const n = e / t; - i[e] = this.getTangentAt(n, new T), i[e].normalize() - } - r[0] = new T, o[0] = new T; - let l = Number.MAX_VALUE; - const c = Math.abs(i[0].x), - h = Math.abs(i[0].y), - u = Math.abs(i[0].z); - c <= l && (l = c, n.set(1, 0, 0)), h <= l && (l = h, n.set(0, 1, 0)), u <= l && n.set(0, 0, 1), s.crossVectors(i[0], n).normalize(), r[0].crossVectors(i[0], s), o[0].crossVectors(i[0], r[0]); - for (let e = 1; e <= t; e++) { - if (r[e] = r[e - 1].clone(), o[e] = o[e - 1].clone(), s.crossVectors(i[e - 1], i[e]), s.length() > Number.EPSILON) { - s.normalize(); - const t = Math.acos(g.clamp(i[e - 1].dot(i[e]), -1, 1)); - r[e].applyMatrix4(a.makeRotationAxis(s, t)) - } - o[e].crossVectors(i[e], r[e]) - } - if (!0 === e) { - let e = Math.acos(g.clamp(r[0].dot(r[t]), -1, 1)); - e /= t, i[0].dot(s.crossVectors(r[0], r[t])) > 0 && (e = -e); - for (let n = 1; n <= t; n++) r[n].applyMatrix4(a.makeRotationAxis(i[n], e * n)), o[n].crossVectors(i[n], r[n]) - } - return { - tangents: i, - normals: r, - binormals: o - } - }, - clone: function() { - return (new this.constructor).copy(this) - }, - copy: function(t) { - return this.arcLengthDivisions = t.arcLengthDivisions, this - }, - toJSON: function() { - const t = { - metadata: { - version: 4.5, - type: "Curve", - generator: "Curve.toJSON" - } - }; - return t.arcLengthDivisions = this.arcLengthDivisions, t.type = this.type, t - }, - fromJSON: function(t) { - return this.arcLengthDivisions = t.arcLengthDivisions, this - } - }), Ns.prototype = Object.create(Os.prototype), Ns.prototype.constructor = Ns, Ns.prototype.isEllipseCurve = !0, Ns.prototype.getPoint = function(t, e) { - const n = e || new v, - i = 2 * Math.PI; - let r = this.aEndAngle - this.aStartAngle; - const o = Math.abs(r) < Number.EPSILON; - for (; r < 0;) r += i; - for (; r > i;) r -= i; - r < Number.EPSILON && (r = o ? 0 : i), !0 !== this.aClockwise || o || (r === i ? r = -i : r -= i); - const s = this.aStartAngle + t * r; - let a = this.aX + this.xRadius * Math.cos(s), - l = this.aY + this.yRadius * Math.sin(s); - if (0 !== this.aRotation) { - const t = Math.cos(this.aRotation), - e = Math.sin(this.aRotation), - n = a - this.aX, - i = l - this.aY; - a = n * t - i * e + this.aX, l = n * e + i * t + this.aY - } - return n.set(a, l) - }, Ns.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this - }, Ns.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.aX = this.aX, t.aY = this.aY, t.xRadius = this.xRadius, t.yRadius = this.yRadius, t.aStartAngle = this.aStartAngle, t.aEndAngle = this.aEndAngle, t.aClockwise = this.aClockwise, t.aRotation = this.aRotation, t - }, Ns.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this - }, Bs.prototype = Object.create(Ns.prototype), Bs.prototype.constructor = Bs, Bs.prototype.isArcCurve = !0; - const zs = new T, - Us = new Fs, - Hs = new Fs, - Gs = new Fs; - - function Vs(t = [], e = !1, n = "centripetal", i = .5) { - Os.call(this), this.type = "CatmullRomCurve3", this.points = t, this.closed = e, this.curveType = n, this.tension = i - } - - function ks(t, e, n, i, r) { - const o = .5 * (i - e), - s = .5 * (r - n), - a = t * t; - return (2 * n - 2 * i + o + s) * (t * a) + (-3 * n + 3 * i - 2 * o - s) * a + o * t + n - } - - function Ws(t, e, n, i) { - return function(t, e) { - const n = 1 - t; - return n * n * e - }(t, e) + function(t, e) { - return 2 * (1 - t) * t * e - }(t, n) + function(t, e) { - return t * t * e - }(t, i) - } - - function js(t, e, n, i, r) { - return function(t, e) { - const n = 1 - t; - return n * n * n * e - }(t, e) + function(t, e) { - const n = 1 - t; - return 3 * n * n * t * e - }(t, n) + function(t, e) { - return 3 * (1 - t) * t * t * e - }(t, i) + function(t, e) { - return t * t * t * e - }(t, r) - } - - function Xs(t = new v, e = new v, n = new v, i = new v) { - Os.call(this), this.type = "CubicBezierCurve", this.v0 = t, this.v1 = e, this.v2 = n, this.v3 = i - } - - function qs(t = new T, e = new T, n = new T, i = new T) { - Os.call(this), this.type = "CubicBezierCurve3", this.v0 = t, this.v1 = e, this.v2 = n, this.v3 = i - } - - function Ys(t = new v, e = new v) { - Os.call(this), this.type = "LineCurve", this.v1 = t, this.v2 = e - } - - function Qs(t = new T, e = new T) { - Os.call(this), this.type = "LineCurve3", this.v1 = t, this.v2 = e - } - - function Zs(t = new v, e = new v, n = new v) { - Os.call(this), this.type = "QuadraticBezierCurve", this.v0 = t, this.v1 = e, this.v2 = n - } - - function Js(t = new T, e = new T, n = new T) { - Os.call(this), this.type = "QuadraticBezierCurve3", this.v0 = t, this.v1 = e, this.v2 = n - } - - function Ks(t = []) { - Os.call(this), this.type = "SplineCurve", this.points = t - } - Vs.prototype = Object.create(Os.prototype), Vs.prototype.constructor = Vs, Vs.prototype.isCatmullRomCurve3 = !0, Vs.prototype.getPoint = function(t, e = new T) { - const n = e, - i = this.points, - r = i.length, - o = (r - (this.closed ? 0 : 1)) * t; - let s, a, l = Math.floor(o), - c = o - l; - this.closed ? l += l > 0 ? 0 : (Math.floor(Math.abs(l) / r) + 1) * r : 0 === c && l === r - 1 && (l = r - 2, c = 1), this.closed || l > 0 ? s = i[(l - 1) % r] : (zs.subVectors(i[0], i[1]).add(i[0]), s = zs); - const h = i[l % r], - u = i[(l + 1) % r]; - if (this.closed || l + 2 < r ? a = i[(l + 2) % r] : (zs.subVectors(i[r - 1], i[r - 2]).add(i[r - 1]), a = zs), "centripetal" === this.curveType || "chordal" === this.curveType) { - const t = "chordal" === this.curveType ? .5 : .25; - let e = Math.pow(s.distanceToSquared(h), t), - n = Math.pow(h.distanceToSquared(u), t), - i = Math.pow(u.distanceToSquared(a), t); - n < 1e-4 && (n = 1), e < 1e-4 && (e = n), i < 1e-4 && (i = n), Us.initNonuniformCatmullRom(s.x, h.x, u.x, a.x, e, n, i), Hs.initNonuniformCatmullRom(s.y, h.y, u.y, a.y, e, n, i), Gs.initNonuniformCatmullRom(s.z, h.z, u.z, a.z, e, n, i) - } else "catmullrom" === this.curveType && (Us.initCatmullRom(s.x, h.x, u.x, a.x, this.tension), Hs.initCatmullRom(s.y, h.y, u.y, a.y, this.tension), Gs.initCatmullRom(s.z, h.z, u.z, a.z, this.tension)); - return n.set(Us.calc(c), Hs.calc(c), Gs.calc(c)), n - }, Vs.prototype.copy = function(t) { - Os.prototype.copy.call(this, t), this.points = []; - for (let e = 0, n = t.points.length; e < n; e++) { - const n = t.points[e]; - this.points.push(n.clone()) - } - return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this - }, Vs.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - t.points = []; - for (let e = 0, n = this.points.length; e < n; e++) { - const n = this.points[e]; - t.points.push(n.toArray()) - } - return t.closed = this.closed, t.curveType = this.curveType, t.tension = this.tension, t - }, Vs.prototype.fromJSON = function(t) { - Os.prototype.fromJSON.call(this, t), this.points = []; - for (let e = 0, n = t.points.length; e < n; e++) { - const n = t.points[e]; - this.points.push((new T).fromArray(n)) - } - return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this - }, Xs.prototype = Object.create(Os.prototype), Xs.prototype.constructor = Xs, Xs.prototype.isCubicBezierCurve = !0, Xs.prototype.getPoint = function(t, e = new v) { - const n = e, - i = this.v0, - r = this.v1, - o = this.v2, - s = this.v3; - return n.set(js(t, i.x, r.x, o.x, s.x), js(t, i.y, r.y, o.y, s.y)), n - }, Xs.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this - }, Xs.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t - }, Xs.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this - }, qs.prototype = Object.create(Os.prototype), qs.prototype.constructor = qs, qs.prototype.isCubicBezierCurve3 = !0, qs.prototype.getPoint = function(t, e = new T) { - const n = e, - i = this.v0, - r = this.v1, - o = this.v2, - s = this.v3; - return n.set(js(t, i.x, r.x, o.x, s.x), js(t, i.y, r.y, o.y, s.y), js(t, i.z, r.z, o.z, s.z)), n - }, qs.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this - }, qs.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t - }, qs.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this - }, Ys.prototype = Object.create(Os.prototype), Ys.prototype.constructor = Ys, Ys.prototype.isLineCurve = !0, Ys.prototype.getPoint = function(t, e = new v) { - const n = e; - return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), n - }, Ys.prototype.getPointAt = function(t, e) { - return this.getPoint(t, e) - }, Ys.prototype.getTangent = function(t, e) { - const n = e || new v; - return n.copy(this.v2).sub(this.v1).normalize(), n - }, Ys.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this - }, Ys.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t - }, Ys.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this - }, Qs.prototype = Object.create(Os.prototype), Qs.prototype.constructor = Qs, Qs.prototype.isLineCurve3 = !0, Qs.prototype.getPoint = function(t, e = new T) { - const n = e; - return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), n - }, Qs.prototype.getPointAt = function(t, e) { - return this.getPoint(t, e) - }, Qs.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this - }, Qs.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t - }, Qs.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this - }, Zs.prototype = Object.create(Os.prototype), Zs.prototype.constructor = Zs, Zs.prototype.isQuadraticBezierCurve = !0, Zs.prototype.getPoint = function(t, e = new v) { - const n = e, - i = this.v0, - r = this.v1, - o = this.v2; - return n.set(Ws(t, i.x, r.x, o.x), Ws(t, i.y, r.y, o.y)), n - }, Zs.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this - }, Zs.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t - }, Zs.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this - }, Js.prototype = Object.create(Os.prototype), Js.prototype.constructor = Js, Js.prototype.isQuadraticBezierCurve3 = !0, Js.prototype.getPoint = function(t, e = new T) { - const n = e, - i = this.v0, - r = this.v1, - o = this.v2; - return n.set(Ws(t, i.x, r.x, o.x), Ws(t, i.y, r.y, o.y), Ws(t, i.z, r.z, o.z)), n - }, Js.prototype.copy = function(t) { - return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this - }, Js.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t - }, Js.prototype.fromJSON = function(t) { - return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this - }, Ks.prototype = Object.create(Os.prototype), Ks.prototype.constructor = Ks, Ks.prototype.isSplineCurve = !0, Ks.prototype.getPoint = function(t, e = new v) { - const n = e, - i = this.points, - r = (i.length - 1) * t, - o = Math.floor(r), - s = r - o, - a = i[0 === o ? o : o - 1], - l = i[o], - c = i[o > i.length - 2 ? i.length - 1 : o + 1], - h = i[o > i.length - 3 ? i.length - 1 : o + 2]; - return n.set(ks(s, a.x, l.x, c.x, h.x), ks(s, a.y, l.y, c.y, h.y)), n - }, Ks.prototype.copy = function(t) { - Os.prototype.copy.call(this, t), this.points = []; - for (let e = 0, n = t.points.length; e < n; e++) { - const n = t.points[e]; - this.points.push(n.clone()) - } - return this - }, Ks.prototype.toJSON = function() { - const t = Os.prototype.toJSON.call(this); - t.points = []; - for (let e = 0, n = this.points.length; e < n; e++) { - const n = this.points[e]; - t.points.push(n.toArray()) - } - return t - }, Ks.prototype.fromJSON = function(t) { - Os.prototype.fromJSON.call(this, t), this.points = []; - for (let e = 0, n = t.points.length; e < n; e++) { - const n = t.points[e]; - this.points.push((new v).fromArray(n)) - } - return this - }; - var $s = Object.freeze({ - __proto__: null, - ArcCurve: Bs, - CatmullRomCurve3: Vs, - CubicBezierCurve: Xs, - CubicBezierCurve3: qs, - EllipseCurve: Ns, - LineCurve: Ys, - LineCurve3: Qs, - QuadraticBezierCurve: Zs, - QuadraticBezierCurve3: Js, - SplineCurve: Ks - }); - - function ta() { - Os.call(this), this.type = "CurvePath", this.curves = [], this.autoClose = !1 - } - - function ea(t) { - ta.call(this), this.type = "Path", this.currentPoint = new v, t && this.setFromPoints(t) - } - - function na(t) { - ea.call(this, t), this.uuid = g.generateUUID(), this.type = "Shape", this.holes = [] - } - - function ia(t, e = 1) { - St.call(this), this.type = "Light", this.color = new Yt(t), this.intensity = e - } - - function ra(t, e, n) { - ia.call(this, t, n), this.type = "HemisphereLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.groundColor = new Yt(e) - } - - function oa(t) { - this.camera = t, this.bias = 0, this.normalBias = 0, this.radius = 1, this.mapSize = new v(512, 512), this.map = null, this.mapPass = null, this.matrix = new et, this.autoUpdate = !0, this.needsUpdate = !1, this._frustum = new en, this._frameExtents = new v(1, 1), this._viewportCount = 1, this._viewports = [new M(0, 0, 1, 1)] - } - - function sa() { - oa.call(this, new Ye(50, 1, .5, 500)), this.focus = 1 - } - - function aa(t, e, n, i, r, o) { - ia.call(this, t, e), this.type = "SpotLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.target = new St, Object.defineProperty(this, "power", { - get: function() { - return this.intensity * Math.PI - }, - set: function(t) { - this.intensity = t / Math.PI - } - }), this.distance = void 0 !== n ? n : 0, this.angle = void 0 !== i ? i : Math.PI / 3, this.penumbra = void 0 !== r ? r : 0, this.decay = void 0 !== o ? o : 1, this.shadow = new sa - } - - function la() { - oa.call(this, new Ye(90, 1, .5, 500)), this._frameExtents = new v(4, 2), this._viewportCount = 6, this._viewports = [new M(2, 1, 1, 1), new M(0, 1, 1, 1), new M(3, 1, 1, 1), new M(1, 1, 1, 1), new M(3, 0, 1, 1), new M(1, 0, 1, 1)], this._cubeDirections = [new T(1, 0, 0), new T(-1, 0, 0), new T(0, 0, 1), new T(0, 0, -1), new T(0, 1, 0), new T(0, -1, 0)], this._cubeUps = [new T(0, 1, 0), new T(0, 1, 0), new T(0, 1, 0), new T(0, 1, 0), new T(0, 0, 1), new T(0, 0, -1)] - } - - function ca(t, e, n, i) { - ia.call(this, t, e), this.type = "PointLight", Object.defineProperty(this, "power", { - get: function() { - return 4 * this.intensity * Math.PI - }, - set: function(t) { - this.intensity = t / (4 * Math.PI) - } - }), this.distance = void 0 !== n ? n : 0, this.decay = void 0 !== i ? i : 1, this.shadow = new la - } - - function ha(t = -1, e = 1, n = 1, i = -1, r = .1, o = 2e3) { - qe.call(this), this.type = "OrthographicCamera", this.zoom = 1, this.view = null, this.left = t, this.right = e, this.top = n, this.bottom = i, this.near = r, this.far = o, this.updateProjectionMatrix() - } - - function ua() { - oa.call(this, new ha(-5, 5, 5, -5, .5, 500)) - } - - function da(t, e) { - ia.call(this, t, e), this.type = "DirectionalLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.target = new St, this.shadow = new ua - } - - function pa(t, e) { - ia.call(this, t, e), this.type = "AmbientLight" - } - - function fa(t, e, n, i) { - ia.call(this, t, e), this.type = "RectAreaLight", this.width = void 0 !== n ? n : 10, this.height = void 0 !== i ? i : 10 - } - ta.prototype = Object.assign(Object.create(Os.prototype), { - constructor: ta, - add: function(t) { - this.curves.push(t) - }, - closePath: function() { - const t = this.curves[0].getPoint(0), - e = this.curves[this.curves.length - 1].getPoint(1); - t.equals(e) || this.curves.push(new Ys(e, t)) - }, - getPoint: function(t) { - const e = t * this.getLength(), - n = this.getCurveLengths(); - let i = 0; - for (; i < n.length;) { - if (n[i] >= e) { - const t = n[i] - e, - r = this.curves[i], - o = r.getLength(), - s = 0 === o ? 0 : 1 - t / o; - return r.getPointAt(s) - } - i++ - } - return null - }, - getLength: function() { - const t = this.getCurveLengths(); - return t[t.length - 1] - }, - updateArcLengths: function() { - this.needsUpdate = !0, this.cacheLengths = null, this.getCurveLengths() - }, - getCurveLengths: function() { - if (this.cacheLengths && this.cacheLengths.length === this.curves.length) return this.cacheLengths; - const t = []; - let e = 0; - for (let n = 0, i = this.curves.length; n < i; n++) e += this.curves[n].getLength(), t.push(e); - return this.cacheLengths = t, t - }, - getSpacedPoints: function(t = 40) { - const e = []; - for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)); - return this.autoClose && e.push(e[0]), e - }, - getPoints: function(t = 12) { - const e = []; - let n; - for (let i = 0, r = this.curves; i < r.length; i++) { - const o = r[i], - s = o && o.isEllipseCurve ? 2 * t : o && (o.isLineCurve || o.isLineCurve3) ? 1 : o && o.isSplineCurve ? t * o.points.length : t, - a = o.getPoints(s); - for (let t = 0; t < a.length; t++) { - const i = a[t]; - n && n.equals(i) || (e.push(i), n = i) - } - } - return this.autoClose && e.length > 1 && !e[e.length - 1].equals(e[0]) && e.push(e[0]), e - }, - copy: function(t) { - Os.prototype.copy.call(this, t), this.curves = []; - for (let e = 0, n = t.curves.length; e < n; e++) { - const n = t.curves[e]; - this.curves.push(n.clone()) - } - return this.autoClose = t.autoClose, this - }, - toJSON: function() { - const t = Os.prototype.toJSON.call(this); - t.autoClose = this.autoClose, t.curves = []; - for (let e = 0, n = this.curves.length; e < n; e++) { - const n = this.curves[e]; - t.curves.push(n.toJSON()) - } - return t - }, - fromJSON: function(t) { - Os.prototype.fromJSON.call(this, t), this.autoClose = t.autoClose, this.curves = []; - for (let e = 0, n = t.curves.length; e < n; e++) { - const n = t.curves[e]; - this.curves.push((new $s[n.type]).fromJSON(n)) - } - return this - } - }), ea.prototype = Object.assign(Object.create(ta.prototype), { - constructor: ea, - setFromPoints: function(t) { - this.moveTo(t[0].x, t[0].y); - for (let e = 1, n = t.length; e < n; e++) this.lineTo(t[e].x, t[e].y); - return this - }, - moveTo: function(t, e) { - return this.currentPoint.set(t, e), this - }, - lineTo: function(t, e) { - const n = new Ys(this.currentPoint.clone(), new v(t, e)); - return this.curves.push(n), this.currentPoint.set(t, e), this - }, - quadraticCurveTo: function(t, e, n, i) { - const r = new Zs(this.currentPoint.clone(), new v(t, e), new v(n, i)); - return this.curves.push(r), this.currentPoint.set(n, i), this - }, - bezierCurveTo: function(t, e, n, i, r, o) { - const s = new Xs(this.currentPoint.clone(), new v(t, e), new v(n, i), new v(r, o)); - return this.curves.push(s), this.currentPoint.set(r, o), this - }, - splineThru: function(t) { - const e = new Ks([this.currentPoint.clone()].concat(t)); - return this.curves.push(e), this.currentPoint.copy(t[t.length - 1]), this - }, - arc: function(t, e, n, i, r, o) { - const s = this.currentPoint.x, - a = this.currentPoint.y; - return this.absarc(t + s, e + a, n, i, r, o), this - }, - absarc: function(t, e, n, i, r, o) { - return this.absellipse(t, e, n, n, i, r, o), this - }, - ellipse: function(t, e, n, i, r, o, s, a) { - const l = this.currentPoint.x, - c = this.currentPoint.y; - return this.absellipse(t + l, e + c, n, i, r, o, s, a), this - }, - absellipse: function(t, e, n, i, r, o, s, a) { - const l = new Ns(t, e, n, i, r, o, s, a); - if (this.curves.length > 0) { - const t = l.getPoint(0); - t.equals(this.currentPoint) || this.lineTo(t.x, t.y) - } - this.curves.push(l); - const c = l.getPoint(1); - return this.currentPoint.copy(c), this - }, - copy: function(t) { - return ta.prototype.copy.call(this, t), this.currentPoint.copy(t.currentPoint), this - }, - toJSON: function() { - const t = ta.prototype.toJSON.call(this); - return t.currentPoint = this.currentPoint.toArray(), t - }, - fromJSON: function(t) { - return ta.prototype.fromJSON.call(this, t), this.currentPoint.fromArray(t.currentPoint), this - } - }), na.prototype = Object.assign(Object.create(ea.prototype), { - constructor: na, - getPointsHoles: function(t) { - const e = []; - for (let n = 0, i = this.holes.length; n < i; n++) e[n] = this.holes[n].getPoints(t); - return e - }, - extractPoints: function(t) { - return { - shape: this.getPoints(t), - holes: this.getPointsHoles(t) - } - }, - copy: function(t) { - ea.prototype.copy.call(this, t), this.holes = []; - for (let e = 0, n = t.holes.length; e < n; e++) { - const n = t.holes[e]; - this.holes.push(n.clone()) - } - return this - }, - toJSON: function() { - const t = ea.prototype.toJSON.call(this); - t.uuid = this.uuid, t.holes = []; - for (let e = 0, n = this.holes.length; e < n; e++) { - const n = this.holes[e]; - t.holes.push(n.toJSON()) - } - return t - }, - fromJSON: function(t) { - ea.prototype.fromJSON.call(this, t), this.uuid = t.uuid, this.holes = []; - for (let e = 0, n = t.holes.length; e < n; e++) { - const n = t.holes[e]; - this.holes.push((new ea).fromJSON(n)) - } - return this - } - }), ia.prototype = Object.assign(Object.create(St.prototype), { - constructor: ia, - isLight: !0, - copy: function(t) { - return St.prototype.copy.call(this, t), this.color.copy(t.color), this.intensity = t.intensity, this - }, - toJSON: function(t) { - const e = St.prototype.toJSON.call(this, t); - return e.object.color = this.color.getHex(), e.object.intensity = this.intensity, void 0 !== this.groundColor && (e.object.groundColor = this.groundColor.getHex()), void 0 !== this.distance && (e.object.distance = this.distance), void 0 !== this.angle && (e.object.angle = this.angle), void 0 !== this.decay && (e.object.decay = this.decay), void 0 !== this.penumbra && (e.object.penumbra = this.penumbra), void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()), e - } - }), ra.prototype = Object.assign(Object.create(ia.prototype), { - constructor: ra, - isHemisphereLight: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.groundColor.copy(t.groundColor), this - } - }), Object.assign(oa.prototype, { - _projScreenMatrix: new et, - _lightPositionWorld: new T, - _lookTarget: new T, - getViewportCount: function() { - return this._viewportCount - }, - getFrustum: function() { - return this._frustum - }, - updateMatrices: function(t) { - const e = this.camera, - n = this.matrix, - i = this._projScreenMatrix, - r = this._lookTarget, - o = this._lightPositionWorld; - o.setFromMatrixPosition(t.matrixWorld), e.position.copy(o), r.setFromMatrixPosition(t.target.matrixWorld), e.lookAt(r), e.updateMatrixWorld(), i.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), this._frustum.setFromProjectionMatrix(i), n.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), n.multiply(e.projectionMatrix), n.multiply(e.matrixWorldInverse) - }, - getViewport: function(t) { - return this._viewports[t] - }, - getFrameExtents: function() { - return this._frameExtents - }, - copy: function(t) { - return this.camera = t.camera.clone(), this.bias = t.bias, this.radius = t.radius, this.mapSize.copy(t.mapSize), this - }, - clone: function() { - return (new this.constructor).copy(this) - }, - toJSON: function() { - const t = {}; - return 0 !== this.bias && (t.bias = this.bias), 0 !== this.normalBias && (t.normalBias = this.normalBias), 1 !== this.radius && (t.radius = this.radius), 512 === this.mapSize.x && 512 === this.mapSize.y || (t.mapSize = this.mapSize.toArray()), t.camera = this.camera.toJSON(!1).object, delete t.camera.matrix, t - } - }), sa.prototype = Object.assign(Object.create(oa.prototype), { - constructor: sa, - isSpotLightShadow: !0, - updateMatrices: function(t) { - const e = this.camera, - n = 2 * g.RAD2DEG * t.angle * this.focus, - i = this.mapSize.width / this.mapSize.height, - r = t.distance || e.far; - n === e.fov && i === e.aspect && r === e.far || (e.fov = n, e.aspect = i, e.far = r, e.updateProjectionMatrix()), oa.prototype.updateMatrices.call(this, t) - } - }), aa.prototype = Object.assign(Object.create(ia.prototype), { - constructor: aa, - isSpotLight: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.distance = t.distance, this.angle = t.angle, this.penumbra = t.penumbra, this.decay = t.decay, this.target = t.target.clone(), this.shadow = t.shadow.clone(), this - } - }), la.prototype = Object.assign(Object.create(oa.prototype), { - constructor: la, - isPointLightShadow: !0, - updateMatrices: function(t, e = 0) { - const n = this.camera, - i = this.matrix, - r = this._lightPositionWorld, - o = this._lookTarget, - s = this._projScreenMatrix; - r.setFromMatrixPosition(t.matrixWorld), n.position.copy(r), o.copy(n.position), o.add(this._cubeDirections[e]), n.up.copy(this._cubeUps[e]), n.lookAt(o), n.updateMatrixWorld(), i.makeTranslation(-r.x, -r.y, -r.z), s.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse), this._frustum.setFromProjectionMatrix(s) - } - }), ca.prototype = Object.assign(Object.create(ia.prototype), { - constructor: ca, - isPointLight: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.distance = t.distance, this.decay = t.decay, this.shadow = t.shadow.clone(), this - } - }), ha.prototype = Object.assign(Object.create(qe.prototype), { - constructor: ha, - isOrthographicCamera: !0, - copy: function(t, e) { - return qe.prototype.copy.call(this, t, e), this.left = t.left, this.right = t.right, this.top = t.top, this.bottom = t.bottom, this.near = t.near, this.far = t.far, this.zoom = t.zoom, this.view = null === t.view ? null : Object.assign({}, t.view), this - }, - setViewOffset: function(t, e, n, i, r, o) { - null === this.view && (this.view = { - enabled: !0, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1 - }), this.view.enabled = !0, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix() - }, - clearViewOffset: function() { - null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() - }, - updateProjectionMatrix: function() { - const t = (this.right - this.left) / (2 * this.zoom), - e = (this.top - this.bottom) / (2 * this.zoom), - n = (this.right + this.left) / 2, - i = (this.top + this.bottom) / 2; - let r = n - t, - o = n + t, - s = i + e, - a = i - e; - if (null !== this.view && this.view.enabled) { - const t = (this.right - this.left) / this.view.fullWidth / this.zoom, - e = (this.top - this.bottom) / this.view.fullHeight / this.zoom; - r += t * this.view.offsetX, o = r + t * this.view.width, s -= e * this.view.offsetY, a = s - e * this.view.height - } - this.projectionMatrix.makeOrthographic(r, o, s, a, this.near, this.far), this.projectionMatrixInverse.copy(this.projectionMatrix).invert() - }, - toJSON: function(t) { - const e = St.prototype.toJSON.call(this, t); - return e.object.zoom = this.zoom, e.object.left = this.left, e.object.right = this.right, e.object.top = this.top, e.object.bottom = this.bottom, e.object.near = this.near, e.object.far = this.far, null !== this.view && (e.object.view = Object.assign({}, this.view)), e - } - }), ua.prototype = Object.assign(Object.create(oa.prototype), { - constructor: ua, - isDirectionalLightShadow: !0, - updateMatrices: function(t) { - oa.prototype.updateMatrices.call(this, t) - } - }), da.prototype = Object.assign(Object.create(ia.prototype), { - constructor: da, - isDirectionalLight: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.target = t.target.clone(), this.shadow = t.shadow.clone(), this - } - }), pa.prototype = Object.assign(Object.create(ia.prototype), { - constructor: pa, - isAmbientLight: !0 - }), fa.prototype = Object.assign(Object.create(ia.prototype), { - constructor: fa, - isRectAreaLight: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.width = t.width, this.height = t.height, this - }, - toJSON: function(t) { - const e = ia.prototype.toJSON.call(this, t); - return e.object.width = this.width, e.object.height = this.height, e - } - }); - class ma { - constructor() { - Object.defineProperty(this, "isSphericalHarmonics3", { - value: !0 - }), this.coefficients = []; - for (let t = 0; t < 9; t++) this.coefficients.push(new T) - } - set(t) { - for (let e = 0; e < 9; e++) this.coefficients[e].copy(t[e]); - return this - } - zero() { - for (let t = 0; t < 9; t++) this.coefficients[t].set(0, 0, 0); - return this - } - getAt(t, e) { - const n = t.x, - i = t.y, - r = t.z, - o = this.coefficients; - return e.copy(o[0]).multiplyScalar(.282095), e.addScaledVector(o[1], .488603 * i), e.addScaledVector(o[2], .488603 * r), e.addScaledVector(o[3], .488603 * n), e.addScaledVector(o[4], n * i * 1.092548), e.addScaledVector(o[5], i * r * 1.092548), e.addScaledVector(o[6], .315392 * (3 * r * r - 1)), e.addScaledVector(o[7], n * r * 1.092548), e.addScaledVector(o[8], .546274 * (n * n - i * i)), e - } - getIrradianceAt(t, e) { - const n = t.x, - i = t.y, - r = t.z, - o = this.coefficients; - return e.copy(o[0]).multiplyScalar(.886227), e.addScaledVector(o[1], 1.023328 * i), e.addScaledVector(o[2], 1.023328 * r), e.addScaledVector(o[3], 1.023328 * n), e.addScaledVector(o[4], .858086 * n * i), e.addScaledVector(o[5], .858086 * i * r), e.addScaledVector(o[6], .743125 * r * r - .247708), e.addScaledVector(o[7], .858086 * n * r), e.addScaledVector(o[8], .429043 * (n * n - i * i)), e - } - add(t) { - for (let e = 0; e < 9; e++) this.coefficients[e].add(t.coefficients[e]); - return this - } - addScaledSH(t, e) { - for (let n = 0; n < 9; n++) this.coefficients[n].addScaledVector(t.coefficients[n], e); - return this - } - scale(t) { - for (let e = 0; e < 9; e++) this.coefficients[e].multiplyScalar(t); - return this - } - lerp(t, e) { - for (let n = 0; n < 9; n++) this.coefficients[n].lerp(t.coefficients[n], e); - return this - } - equals(t) { - for (let e = 0; e < 9; e++) - if (!this.coefficients[e].equals(t.coefficients[e])) return !1; - return !0 - } - copy(t) { - return this.set(t.coefficients) - } - clone() { - return (new this.constructor).copy(this) - } - fromArray(t, e = 0) { - const n = this.coefficients; - for (let i = 0; i < 9; i++) n[i].fromArray(t, e + 3 * i); - return this - } - toArray(t = [], e = 0) { - const n = this.coefficients; - for (let i = 0; i < 9; i++) n[i].toArray(t, e + 3 * i); - return t - } - static getBasisAt(t, e) { - const n = t.x, - i = t.y, - r = t.z; - e[0] = .282095, e[1] = .488603 * i, e[2] = .488603 * r, e[3] = .488603 * n, e[4] = 1.092548 * n * i, e[5] = 1.092548 * i * r, e[6] = .315392 * (3 * r * r - 1), e[7] = 1.092548 * n * r, e[8] = .546274 * (n * n - i * i) - } - } - - function ga(t, e) { - ia.call(this, void 0, e), this.type = "LightProbe", this.sh = void 0 !== t ? t : new ma - } - - function va(t) { - Es.call(this, t), this.textures = {} - } - ga.prototype = Object.assign(Object.create(ia.prototype), { - constructor: ga, - isLightProbe: !0, - copy: function(t) { - return ia.prototype.copy.call(this, t), this.sh.copy(t.sh), this - }, - fromJSON: function(t) { - return this.intensity = t.intensity, this.sh.fromArray(t.sh), this - }, - toJSON: function(t) { - const e = ia.prototype.toJSON.call(this, t); - return e.object.sh = this.sh.toArray(), e - } - }), va.prototype = Object.assign(Object.create(Es.prototype), { - constructor: va, - load: function(t, e, n, i) { - const r = this, - o = new Ts(r.manager); - o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { - try { - e(r.parse(JSON.parse(n))) - } catch (e) { - i ? i(e) : console.error(e), r.manager.itemError(t) - } - }), n, i) - }, - parse: function(t) { - const e = this.textures; - - function n(t) { - return void 0 === e[t] && console.warn("THREE.MaterialLoader: Undefined texture", t), e[t] - } - const i = new as[t.type]; - if (void 0 !== t.uuid && (i.uuid = t.uuid), void 0 !== t.name && (i.name = t.name), void 0 !== t.color && void 0 !== i.color && i.color.setHex(t.color), void 0 !== t.roughness && (i.roughness = t.roughness), void 0 !== t.metalness && (i.metalness = t.metalness), void 0 !== t.sheen && (i.sheen = (new Yt).setHex(t.sheen)), void 0 !== t.emissive && void 0 !== i.emissive && i.emissive.setHex(t.emissive), void 0 !== t.specular && void 0 !== i.specular && i.specular.setHex(t.specular), void 0 !== t.shininess && (i.shininess = t.shininess), void 0 !== t.clearcoat && (i.clearcoat = t.clearcoat), void 0 !== t.clearcoatRoughness && (i.clearcoatRoughness = t.clearcoatRoughness), void 0 !== t.fog && (i.fog = t.fog), void 0 !== t.flatShading && (i.flatShading = t.flatShading), void 0 !== t.blending && (i.blending = t.blending), void 0 !== t.combine && (i.combine = t.combine), void 0 !== t.side && (i.side = t.side), void 0 !== t.opacity && (i.opacity = t.opacity), void 0 !== t.transparent && (i.transparent = t.transparent), void 0 !== t.alphaTest && (i.alphaTest = t.alphaTest), void 0 !== t.depthTest && (i.depthTest = t.depthTest), void 0 !== t.depthWrite && (i.depthWrite = t.depthWrite), void 0 !== t.colorWrite && (i.colorWrite = t.colorWrite), void 0 !== t.stencilWrite && (i.stencilWrite = t.stencilWrite), void 0 !== t.stencilWriteMask && (i.stencilWriteMask = t.stencilWriteMask), void 0 !== t.stencilFunc && (i.stencilFunc = t.stencilFunc), void 0 !== t.stencilRef && (i.stencilRef = t.stencilRef), void 0 !== t.stencilFuncMask && (i.stencilFuncMask = t.stencilFuncMask), void 0 !== t.stencilFail && (i.stencilFail = t.stencilFail), void 0 !== t.stencilZFail && (i.stencilZFail = t.stencilZFail), void 0 !== t.stencilZPass && (i.stencilZPass = t.stencilZPass), void 0 !== t.wireframe && (i.wireframe = t.wireframe), void 0 !== t.wireframeLinewidth && (i.wireframeLinewidth = t.wireframeLinewidth), void 0 !== t.wireframeLinecap && (i.wireframeLinecap = t.wireframeLinecap), void 0 !== t.wireframeLinejoin && (i.wireframeLinejoin = t.wireframeLinejoin), void 0 !== t.rotation && (i.rotation = t.rotation), 1 !== t.linewidth && (i.linewidth = t.linewidth), void 0 !== t.dashSize && (i.dashSize = t.dashSize), void 0 !== t.gapSize && (i.gapSize = t.gapSize), void 0 !== t.scale && (i.scale = t.scale), void 0 !== t.polygonOffset && (i.polygonOffset = t.polygonOffset), void 0 !== t.polygonOffsetFactor && (i.polygonOffsetFactor = t.polygonOffsetFactor), void 0 !== t.polygonOffsetUnits && (i.polygonOffsetUnits = t.polygonOffsetUnits), void 0 !== t.skinning && (i.skinning = t.skinning), void 0 !== t.morphTargets && (i.morphTargets = t.morphTargets), void 0 !== t.morphNormals && (i.morphNormals = t.morphNormals), void 0 !== t.dithering && (i.dithering = t.dithering), void 0 !== t.vertexTangents && (i.vertexTangents = t.vertexTangents), void 0 !== t.visible && (i.visible = t.visible), void 0 !== t.toneMapped && (i.toneMapped = t.toneMapped), void 0 !== t.userData && (i.userData = t.userData), void 0 !== t.vertexColors && ("number" == typeof t.vertexColors ? i.vertexColors = t.vertexColors > 0 : i.vertexColors = t.vertexColors), void 0 !== t.uniforms) - for (const e in t.uniforms) { - const r = t.uniforms[e]; - switch (i.uniforms[e] = {}, r.type) { - case "t": - i.uniforms[e].value = n(r.value); - break; - case "c": - i.uniforms[e].value = (new Yt).setHex(r.value); - break; - case "v2": - i.uniforms[e].value = (new v).fromArray(r.value); - break; - case "v3": - i.uniforms[e].value = (new T).fromArray(r.value); - break; - case "v4": - i.uniforms[e].value = (new M).fromArray(r.value); - break; - case "m3": - i.uniforms[e].value = (new y).fromArray(r.value); - break; - case "m4": - i.uniforms[e].value = (new et).fromArray(r.value); - break; - default: - i.uniforms[e].value = r.value - } - } - if (void 0 !== t.defines && (i.defines = t.defines), void 0 !== t.vertexShader && (i.vertexShader = t.vertexShader), void 0 !== t.fragmentShader && (i.fragmentShader = t.fragmentShader), void 0 !== t.extensions) - for (const e in t.extensions) i.extensions[e] = t.extensions[e]; - if (void 0 !== t.shading && (i.flatShading = 1 === t.shading), void 0 !== t.size && (i.size = t.size), void 0 !== t.sizeAttenuation && (i.sizeAttenuation = t.sizeAttenuation), void 0 !== t.map && (i.map = n(t.map)), void 0 !== t.matcap && (i.matcap = n(t.matcap)), void 0 !== t.alphaMap && (i.alphaMap = n(t.alphaMap)), void 0 !== t.bumpMap && (i.bumpMap = n(t.bumpMap)), void 0 !== t.bumpScale && (i.bumpScale = t.bumpScale), void 0 !== t.normalMap && (i.normalMap = n(t.normalMap)), void 0 !== t.normalMapType && (i.normalMapType = t.normalMapType), void 0 !== t.normalScale) { - let e = t.normalScale; - !1 === Array.isArray(e) && (e = [e, e]), i.normalScale = (new v).fromArray(e) - } - return void 0 !== t.displacementMap && (i.displacementMap = n(t.displacementMap)), void 0 !== t.displacementScale && (i.displacementScale = t.displacementScale), void 0 !== t.displacementBias && (i.displacementBias = t.displacementBias), void 0 !== t.roughnessMap && (i.roughnessMap = n(t.roughnessMap)), void 0 !== t.metalnessMap && (i.metalnessMap = n(t.metalnessMap)), void 0 !== t.emissiveMap && (i.emissiveMap = n(t.emissiveMap)), void 0 !== t.emissiveIntensity && (i.emissiveIntensity = t.emissiveIntensity), void 0 !== t.specularMap && (i.specularMap = n(t.specularMap)), void 0 !== t.envMap && (i.envMap = n(t.envMap)), void 0 !== t.envMapIntensity && (i.envMapIntensity = t.envMapIntensity), void 0 !== t.reflectivity && (i.reflectivity = t.reflectivity), void 0 !== t.refractionRatio && (i.refractionRatio = t.refractionRatio), void 0 !== t.lightMap && (i.lightMap = n(t.lightMap)), void 0 !== t.lightMapIntensity && (i.lightMapIntensity = t.lightMapIntensity), void 0 !== t.aoMap && (i.aoMap = n(t.aoMap)), void 0 !== t.aoMapIntensity && (i.aoMapIntensity = t.aoMapIntensity), void 0 !== t.gradientMap && (i.gradientMap = n(t.gradientMap)), void 0 !== t.clearcoatMap && (i.clearcoatMap = n(t.clearcoatMap)), void 0 !== t.clearcoatRoughnessMap && (i.clearcoatRoughnessMap = n(t.clearcoatRoughnessMap)), void 0 !== t.clearcoatNormalMap && (i.clearcoatNormalMap = n(t.clearcoatNormalMap)), void 0 !== t.clearcoatNormalScale && (i.clearcoatNormalScale = (new v).fromArray(t.clearcoatNormalScale)), void 0 !== t.transmission && (i.transmission = t.transmission), void 0 !== t.transmissionMap && (i.transmissionMap = n(t.transmissionMap)), i - }, - setTextures: function(t) { - return this.textures = t, this - } - }); - const ya = function(t) { - const e = t.lastIndexOf("/"); - return -1 === e ? "./" : t.substr(0, e + 1) - }; - - function Aa() { - be.call(this), this.type = "InstancedBufferGeometry", this.instanceCount = 1 / 0 - } - - function xa(t, e, n, i) { - "number" == typeof n && (i = n, n = !1, console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")), ee.call(this, t, e, n), this.meshPerAttribute = i || 1 - } - - function _a(t) { - Es.call(this, t) - } - - function ba(t) { - "undefined" == typeof createImageBitmap && console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."), "undefined" == typeof fetch && console.warn("THREE.ImageBitmapLoader: fetch() not supported."), Es.call(this, t), this.options = { - premultiplyAlpha: "none" - } - } - - function wa() { - this.type = "ShapePath", this.color = new Yt, this.subPaths = [], this.currentPath = null - } - Aa.prototype = Object.assign(Object.create(be.prototype), { - constructor: Aa, - isInstancedBufferGeometry: !0, - copy: function(t) { - return be.prototype.copy.call(this, t), this.instanceCount = t.instanceCount, this - }, - clone: function() { - return (new this.constructor).copy(this) - }, - toJSON: function() { - const t = be.prototype.toJSON.call(this); - return t.instanceCount = this.instanceCount, t.isInstancedBufferGeometry = !0, t - } - }), xa.prototype = Object.assign(Object.create(ee.prototype), { - constructor: xa, - isInstancedBufferAttribute: !0, - copy: function(t) { - return ee.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this - }, - toJSON: function() { - const t = ee.prototype.toJSON.call(this); - return t.meshPerAttribute = this.meshPerAttribute, t.isInstancedBufferAttribute = !0, t - } - }), _a.prototype = Object.assign(Object.create(Es.prototype), { - constructor: _a, - load: function(t, e, n, i) { - const r = this, - o = new Ts(r.manager); - o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { - try { - e(r.parse(JSON.parse(n))) - } catch (e) { - i ? i(e) : console.error(e), r.manager.itemError(t) - } - }), n, i) - }, - parse: function(t) { - const e = {}, - n = {}; - - function i(t, i) { - if (void 0 !== e[i]) return e[i]; - const r = t.interleavedBuffers[i], - o = function(t, e) { - if (void 0 !== n[e]) return n[e]; - const i = t.arrayBuffers[e], - r = new Uint32Array(i).buffer; - return n[e] = r, r - }(t, r.buffer), - s = new dr(fe(r.type, o), r.stride); - return s.uuid = r.uuid, e[i] = s, s - } - const r = t.isInstancedBufferGeometry ? new Aa : new be, - o = t.data.index; - if (void 0 !== o) { - const t = fe(o.type, o.array); - r.setIndex(new ee(t, 1)) - } - const s = t.data.attributes; - for (const e in s) { - const n = s[e]; - let o; - if (n.isInterleavedBufferAttribute) { - o = new fr(i(t.data, n.data), n.itemSize, n.offset, n.normalized) - } else { - const t = fe(n.type, n.array); - o = new(n.isInstancedBufferAttribute ? xa : ee)(t, n.itemSize, n.normalized) - } - void 0 !== n.name && (o.name = n.name), r.setAttribute(e, o) - } - const a = t.data.morphAttributes; - if (a) - for (const e in a) { - const n = a[e], - o = []; - for (let e = 0, r = n.length; e < r; e++) { - const r = n[e]; - let s; - if (r.isInterleavedBufferAttribute) { - s = new fr(i(t.data, r.data), r.itemSize, r.offset, r.normalized) - } else { - s = new ee(fe(r.type, r.array), r.itemSize, r.normalized) - } - void 0 !== r.name && (s.name = r.name), o.push(s) - } - r.morphAttributes[e] = o - } - t.data.morphTargetsRelative && (r.morphTargetsRelative = !0); - const l = t.data.groups || t.data.drawcalls || t.data.offsets; - if (void 0 !== l) - for (let t = 0, e = l.length; t !== e; ++t) { - const e = l[t]; - r.addGroup(e.start, e.count, e.materialIndex) - } - const c = t.data.boundingSphere; - if (void 0 !== c) { - const t = new T; - void 0 !== c.center && t.fromArray(c.center), r.boundingSphere = new X(t, c.radius) - } - return t.name && (r.name = t.name), t.userData && (r.userData = t.userData), r - } - }), ba.prototype = Object.assign(Object.create(Es.prototype), { - constructor: ba, - isImageBitmapLoader: !0, - setOptions: function(t) { - return this.options = t, this - }, - load: function(t, e, n, i) { - void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t); - const r = this, - o = ws.get(t); - if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() { - e && e(o), r.manager.itemEnd(t) - }), 0), o; - const s = {}; - s.credentials = "anonymous" === this.crossOrigin ? "same-origin" : "include", fetch(t, s).then((function(t) { - return t.blob() - })).then((function(t) { - return createImageBitmap(t, r.options) - })).then((function(n) { - ws.add(t, n), e && e(n), r.manager.itemEnd(t) - })).catch((function(e) { - i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) - })), r.manager.itemStart(t) - } - }), Object.assign(wa.prototype, { - moveTo: function(t, e) { - return this.currentPath = new ea, this.subPaths.push(this.currentPath), this.currentPath.moveTo(t, e), this - }, - lineTo: function(t, e) { - return this.currentPath.lineTo(t, e), this - }, - quadraticCurveTo: function(t, e, n, i) { - return this.currentPath.quadraticCurveTo(t, e, n, i), this - }, - bezierCurveTo: function(t, e, n, i, r, o) { - return this.currentPath.bezierCurveTo(t, e, n, i, r, o), this - }, - splineThru: function(t) { - return this.currentPath.splineThru(t), this - }, - toShapes: function(t, e) { - function n(t) { - const e = []; - for (let n = 0, i = t.length; n < i; n++) { - const i = t[n], - r = new na; - r.curves = i.curves, e.push(r) - } - return e - } - - function i(t, e) { - const n = e.length; - let i = !1; - for (let r = n - 1, o = 0; o < n; r = o++) { - let n = e[r], - s = e[o], - a = s.x - n.x, - l = s.y - n.y; - if (Math.abs(l) > Number.EPSILON) { - if (l < 0 && (n = e[o], a = -a, s = e[r], l = -l), t.y < n.y || t.y > s.y) continue; - if (t.y === n.y) { - if (t.x === n.x) return !0 - } else { - const e = l * (t.x - n.x) - a * (t.y - n.y); - if (0 === e) return !0; - if (e < 0) continue; - i = !i - } - } else { - if (t.y !== n.y) continue; - if (s.x <= t.x && t.x <= n.x || n.x <= t.x && t.x <= s.x) return !0 - } - } - return i - } - const r = ko.isClockWise, - o = this.subPaths; - if (0 === o.length) return []; - if (!0 === e) return n(o); - let s, a, l; - const c = []; - if (1 === o.length) return a = o[0], l = new na, l.curves = a.curves, c.push(l), c; - let h = !r(o[0].getPoints()); - h = t ? !h : h; - const u = [], - d = []; - let p, f, m = [], - g = 0; - d[g] = void 0, m[g] = []; - for (let e = 0, n = o.length; e < n; e++) a = o[e], p = a.getPoints(), s = r(p), s = t ? !s : s, s ? (!h && d[g] && g++, d[g] = { - s: new na, - p: p - }, d[g].s.curves = a.curves, h && g++, m[g] = []) : m[g].push({ - h: a, - p: p[0] - }); - if (!d[0]) return n(o); - if (d.length > 1) { - let t = !1; - const e = []; - for (let t = 0, e = d.length; t < e; t++) u[t] = []; - for (let n = 0, r = d.length; n < r; n++) { - const r = m[n]; - for (let o = 0; o < r.length; o++) { - const s = r[o]; - let a = !0; - for (let r = 0; r < d.length; r++) i(s.p, d[r].p) && (n !== r && e.push({ - froms: n, - tos: r, - hole: o - }), a ? (a = !1, u[r].push(s)) : t = !0); - a && u[n].push(s) - } - } - e.length > 0 && (t || (m = u)) - } - for (let t = 0, e = d.length; t < e; t++) { - l = d[t].s, c.push(l), f = m[t]; - for (let t = 0, e = f.length; t < e; t++) l.holes.push(f[t].h) - } - return c - } - }); - class Ma { - constructor(t) { - Object.defineProperty(this, "isFont", { - value: !0 - }), this.type = "Font", this.data = t - } - generateShapes(t, e = 100) { - const n = [], - i = function(t, e, n) { - const i = Array.from ? Array.from(t) : String(t).split(""), - r = e / n.resolution, - o = (n.boundingBox.yMax - n.boundingBox.yMin + n.underlineThickness) * r, - s = []; - let a = 0, - l = 0; - for (let t = 0; t < i.length; t++) { - const e = i[t]; - if ("\n" === e) a = 0, l -= o; - else { - const t = Ea(e, r, a, l, n); - a += t.offsetX, s.push(t.path) - } - } - return s - }(t, e, this.data); - for (let t = 0, e = i.length; t < e; t++) Array.prototype.push.apply(n, i[t].toShapes()); - return n - } - } - - function Ea(t, e, n, i, r) { - const o = r.glyphs[t] || r.glyphs["?"]; - if (!o) return void console.error('THREE.Font: character "' + t + '" does not exists in font family ' + r.familyName + "."); - const s = new wa; - let a, l, c, h, u, d, p, f; - if (o.o) { - const t = o._cachedOutline || (o._cachedOutline = o.o.split(" ")); - for (let r = 0, o = t.length; r < o;) { - switch (t[r++]) { - case "m": - a = t[r++] * e + n, l = t[r++] * e + i, s.moveTo(a, l); - break; - case "l": - a = t[r++] * e + n, l = t[r++] * e + i, s.lineTo(a, l); - break; - case "q": - c = t[r++] * e + n, h = t[r++] * e + i, u = t[r++] * e + n, d = t[r++] * e + i, s.quadraticCurveTo(u, d, c, h); - break; - case "b": - c = t[r++] * e + n, h = t[r++] * e + i, u = t[r++] * e + n, d = t[r++] * e + i, p = t[r++] * e + n, f = t[r++] * e + i, s.bezierCurveTo(u, d, p, f, c, h) - } - } - } - return { - offsetX: o.ha * e, - path: s - } - } - - function Sa(t) { - Es.call(this, t) - } - let Ta; - Sa.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Sa, - load: function(t, e, n, i) { - const r = this, - o = new Ts(this.manager); - o.setPath(this.path), o.setRequestHeader(this.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(t) { - let n; - try { - n = JSON.parse(t) - } catch (e) { - console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."), n = JSON.parse(t.substring(65, t.length - 2)) - } - const i = r.parse(n); - e && e(i) - }), n, i) - }, - parse: function(t) { - return new Ma(t) - } - }); - const La = function() { - return void 0 === Ta && (Ta = new(window.AudioContext || window.webkitAudioContext)), Ta - }; - - function Ra(t) { - Es.call(this, t) - } - - function Ca(t, e, n) { - ga.call(this, void 0, n); - const i = (new Yt).set(t), - r = (new Yt).set(e), - o = new T(i.r, i.g, i.b), - s = new T(r.r, r.g, r.b), - a = Math.sqrt(Math.PI), - l = a * Math.sqrt(.75); - this.sh.coefficients[0].copy(o).add(s).multiplyScalar(a), this.sh.coefficients[1].copy(o).sub(s).multiplyScalar(l) - } - - function Pa(t, e) { - ga.call(this, void 0, e); - const n = (new Yt).set(t); - this.sh.coefficients[0].set(n.r, n.g, n.b).multiplyScalar(2 * Math.sqrt(Math.PI)) - } - Ra.prototype = Object.assign(Object.create(Es.prototype), { - constructor: Ra, - load: function(t, e, n, i) { - const r = this, - o = new Ts(r.manager); - o.setResponseType("arraybuffer"), o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) { - try { - const t = n.slice(0); - La().decodeAudioData(t, (function(t) { - e(t) - })) - } catch (e) { - i ? i(e) : console.error(e), r.manager.itemError(t) - } - }), n, i) - } - }), Ca.prototype = Object.assign(Object.create(ga.prototype), { - constructor: Ca, - isHemisphereLightProbe: !0, - copy: function(t) { - return ga.prototype.copy.call(this, t), this - }, - toJSON: function(t) { - return ga.prototype.toJSON.call(this, t) - } - }), Pa.prototype = Object.assign(Object.create(ga.prototype), { - constructor: Pa, - isAmbientLightProbe: !0, - copy: function(t) { - return ga.prototype.copy.call(this, t), this - }, - toJSON: function(t) { - return ga.prototype.toJSON.call(this, t) - } - }); - const Da = new et, - Ia = new et; - Object.assign(function() { - this.type = "StereoCamera", this.aspect = 1, this.eyeSep = .064, this.cameraL = new Ye, this.cameraL.layers.enable(1), this.cameraL.matrixAutoUpdate = !1, this.cameraR = new Ye, this.cameraR.layers.enable(2), this.cameraR.matrixAutoUpdate = !1, this._cache = { - focus: null, - fov: null, - aspect: null, - near: null, - far: null, - zoom: null, - eyeSep: null - } - }.prototype, { - update: function(t) { - const e = this._cache; - if (e.focus !== t.focus || e.fov !== t.fov || e.aspect !== t.aspect * this.aspect || e.near !== t.near || e.far !== t.far || e.zoom !== t.zoom || e.eyeSep !== this.eyeSep) { - e.focus = t.focus, e.fov = t.fov, e.aspect = t.aspect * this.aspect, e.near = t.near, e.far = t.far, e.zoom = t.zoom, e.eyeSep = this.eyeSep; - const n = t.projectionMatrix.clone(), - i = e.eyeSep / 2, - r = i * e.near / e.focus, - o = e.near * Math.tan(g.DEG2RAD * e.fov * .5) / e.zoom; - let s, a; - Ia.elements[12] = -i, Da.elements[12] = i, s = -o * e.aspect + r, a = o * e.aspect + r, n.elements[0] = 2 * e.near / (a - s), n.elements[8] = (a + s) / (a - s), this.cameraL.projectionMatrix.copy(n), s = -o * e.aspect - r, a = o * e.aspect - r, n.elements[0] = 2 * e.near / (a - s), n.elements[8] = (a + s) / (a - s), this.cameraR.projectionMatrix.copy(n) - } - this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(Ia), this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(Da) - } - }); - - function Oa(t, e, n) { - let i, r, o; - switch (this.binding = t, this.valueSize = n, e) { - case "quaternion": - i = this._slerp, r = this._slerpAdditive, o = this._setAdditiveIdentityQuaternion, this.buffer = new Float64Array(6 * n), this._workIndex = 5; - break; - case "string": - case "bool": - i = this._select, r = this._select, o = this._setAdditiveIdentityOther, this.buffer = new Array(5 * n); - break; - default: - i = this._lerp, r = this._lerpAdditive, o = this._setAdditiveIdentityNumeric, this.buffer = new Float64Array(5 * n) - } - this._mixBufferRegion = i, this._mixBufferRegionAdditive = r, this._setIdentity = o, this._origIndex = 3, this._addIndex = 4, this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0, this.useCount = 0, this.referenceCount = 0 - } - Object.assign(Oa.prototype, { - accumulate: function(t, e) { - const n = this.buffer, - i = this.valueSize, - r = t * i + i; - let o = this.cumulativeWeight; - if (0 === o) { - for (let t = 0; t !== i; ++t) n[r + t] = n[t]; - o = e - } else { - o += e; - const t = e / o; - this._mixBufferRegion(n, r, 0, t, i) - } - this.cumulativeWeight = o - }, - accumulateAdditive: function(t) { - const e = this.buffer, - n = this.valueSize, - i = n * this._addIndex; - 0 === this.cumulativeWeightAdditive && this._setIdentity(), this._mixBufferRegionAdditive(e, i, 0, t, n), this.cumulativeWeightAdditive += t - }, - apply: function(t) { - const e = this.valueSize, - n = this.buffer, - i = t * e + e, - r = this.cumulativeWeight, - o = this.cumulativeWeightAdditive, - s = this.binding; - if (this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0, r < 1) { - const t = e * this._origIndex; - this._mixBufferRegion(n, i, t, 1 - r, e) - } - o > 0 && this._mixBufferRegionAdditive(n, i, this._addIndex * e, 1, e); - for (let t = e, r = e + e; t !== r; ++t) - if (n[t] !== n[t + e]) { - s.setValue(n, i); - break - } - }, - saveOriginalState: function() { - const t = this.binding, - e = this.buffer, - n = this.valueSize, - i = n * this._origIndex; - t.getValue(e, i); - for (let t = n, r = i; t !== r; ++t) e[t] = e[i + t % n]; - this._setIdentity(), this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0 - }, - restoreOriginalState: function() { - const t = 3 * this.valueSize; - this.binding.setValue(this.buffer, t) - }, - _setAdditiveIdentityNumeric: function() { - const t = this._addIndex * this.valueSize, - e = t + this.valueSize; - for (let n = t; n < e; n++) this.buffer[n] = 0 - }, - _setAdditiveIdentityQuaternion: function() { - this._setAdditiveIdentityNumeric(), this.buffer[this._addIndex * this.valueSize + 3] = 1 - }, - _setAdditiveIdentityOther: function() { - const t = this._origIndex * this.valueSize, - e = this._addIndex * this.valueSize; - for (let n = 0; n < this.valueSize; n++) this.buffer[e + n] = this.buffer[t + n] - }, - _select: function(t, e, n, i, r) { - if (i >= .5) - for (let i = 0; i !== r; ++i) t[e + i] = t[n + i] - }, - _slerp: function(t, e, n, i) { - S.slerpFlat(t, e, t, e, t, n, i) - }, - _slerpAdditive: function(t, e, n, i, r) { - const o = this._workIndex * r; - S.multiplyQuaternionsFlat(t, o, t, e, t, n), S.slerpFlat(t, e, t, e, t, o, i) - }, - _lerp: function(t, e, n, i, r) { - const o = 1 - i; - for (let s = 0; s !== r; ++s) { - const r = e + s; - t[r] = t[r] * o + t[n + s] * i - } - }, - _lerpAdditive: function(t, e, n, i, r) { - for (let o = 0; o !== r; ++o) { - const r = e + o; - t[r] = t[r] + t[n + o] * i - } - } - }); - const Na = new RegExp("[\\[\\]\\.:\\/]", "g"), - Ba = "[^" + "\\[\\]\\.:\\/".replace("\\.", "") + "]", - Fa = /((?:WC+[\/:])*)/.source.replace("WC", "[^\\[\\]\\.:\\/]"), - za = /(WCOD+)?/.source.replace("WCOD", Ba), - Ua = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), - Ha = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), - Ga = new RegExp("^" + Fa + za + Ua + Ha + "$"), - Va = ["material", "materials", "bones"]; - - function ka(t, e, n) { - const i = n || Wa.parseTrackName(e); - this._targetGroup = t, this._bindings = t.subscribe_(e, i) - } - - function Wa(t, e, n) { - this.path = e, this.parsedPath = n || Wa.parseTrackName(e), this.node = Wa.findNode(t, this.parsedPath.nodeName) || t, this.rootNode = t - } - Object.assign(ka.prototype, { - getValue: function(t, e) { - this.bind(); - const n = this._targetGroup.nCachedObjects_, - i = this._bindings[n]; - void 0 !== i && i.getValue(t, e) - }, - setValue: function(t, e) { - const n = this._bindings; - for (let i = this._targetGroup.nCachedObjects_, r = n.length; i !== r; ++i) n[i].setValue(t, e) - }, - bind: function() { - const t = this._bindings; - for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].bind() - }, - unbind: function() { - const t = this._bindings; - for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].unbind() - } - }), Object.assign(Wa, { - Composite: ka, - create: function(t, e, n) { - return t && t.isAnimationObjectGroup ? new Wa.Composite(t, e, n) : new Wa(t, e, n) - }, - sanitizeNodeName: function(t) { - return t.replace(/\s/g, "_").replace(Na, "") - }, - parseTrackName: function(t) { - const e = Ga.exec(t); - if (!e) throw new Error("PropertyBinding: Cannot parse trackName: " + t); - const n = { - nodeName: e[2], - objectName: e[3], - objectIndex: e[4], - propertyName: e[5], - propertyIndex: e[6] - }, - i = n.nodeName && n.nodeName.lastIndexOf("."); - if (void 0 !== i && -1 !== i) { - const t = n.nodeName.substring(i + 1); - 1 !== Va.indexOf(t) && (n.nodeName = n.nodeName.substring(0, i), n.objectName = t) - } - if (null === n.propertyName || 0 === n.propertyName.length) throw new Error("PropertyBinding: can not parse propertyName from trackName: " + t); - return n - }, - findNode: function(t, e) { - if (!e || "" === e || "." === e || -1 === e || e === t.name || e === t.uuid) return t; - if (t.skeleton) { - const n = t.skeleton.getBoneByName(e); - if (void 0 !== n) return n - } - if (t.children) { - const n = function(t) { - for (let i = 0; i < t.length; i++) { - const r = t[i]; - if (r.name === e || r.uuid === e) return r; - const o = n(r.children); - if (o) return o - } - return null - }, - i = n(t.children); - if (i) return i - } - return null - } - }), Object.assign(Wa.prototype, { - _getValue_unavailable: function() {}, - _setValue_unavailable: function() {}, - BindingType: { - Direct: 0, - EntireArray: 1, - ArrayElement: 2, - HasFromToArray: 3 - }, - Versioning: { - None: 0, - NeedsUpdate: 1, - MatrixWorldNeedsUpdate: 2 - }, - GetterByBindingType: [function(t, e) { - t[e] = this.node[this.propertyName] - }, function(t, e) { - const n = this.resolvedProperty; - for (let i = 0, r = n.length; i !== r; ++i) t[e++] = n[i] - }, function(t, e) { - t[e] = this.resolvedProperty[this.propertyIndex] - }, function(t, e) { - this.resolvedProperty.toArray(t, e) - }], - SetterByBindingTypeAndVersioning: [ - [function(t, e) { - this.targetObject[this.propertyName] = t[e] - }, function(t, e) { - this.targetObject[this.propertyName] = t[e], this.targetObject.needsUpdate = !0 - }, function(t, e) { - this.targetObject[this.propertyName] = t[e], this.targetObject.matrixWorldNeedsUpdate = !0 - }], - [function(t, e) { - const n = this.resolvedProperty; - for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++] - }, function(t, e) { - const n = this.resolvedProperty; - for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]; - this.targetObject.needsUpdate = !0 - }, function(t, e) { - const n = this.resolvedProperty; - for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]; - this.targetObject.matrixWorldNeedsUpdate = !0 - }], - [function(t, e) { - this.resolvedProperty[this.propertyIndex] = t[e] - }, function(t, e) { - this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.needsUpdate = !0 - }, function(t, e) { - this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.matrixWorldNeedsUpdate = !0 - }], - [function(t, e) { - this.resolvedProperty.fromArray(t, e) - }, function(t, e) { - this.resolvedProperty.fromArray(t, e), this.targetObject.needsUpdate = !0 - }, function(t, e) { - this.resolvedProperty.fromArray(t, e), this.targetObject.matrixWorldNeedsUpdate = !0 - }] - ], - getValue: function(t, e) { - this.bind(), this.getValue(t, e) - }, - setValue: function(t, e) { - this.bind(), this.setValue(t, e) - }, - bind: function() { - let t = this.node; - const e = this.parsedPath, - n = e.objectName, - i = e.propertyName; - let r = e.propertyIndex; - if (t || (t = Wa.findNode(this.rootNode, e.nodeName) || this.rootNode, this.node = t), this.getValue = this._getValue_unavailable, this.setValue = this._setValue_unavailable, !t) return void console.error("THREE.PropertyBinding: Trying to update node for track: " + this.path + " but it wasn't found."); - if (n) { - let i = e.objectIndex; - switch (n) { - case "materials": - if (!t.material) return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); - if (!t.material.materials) return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); - t = t.material.materials; - break; - case "bones": - if (!t.skeleton) return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); - t = t.skeleton.bones; - for (let e = 0; e < t.length; e++) - if (t[e].name === i) { - i = e; - break - } break; - default: - if (void 0 === t[n]) return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); - t = t[n] - } - if (void 0 !== i) { - if (void 0 === t[i]) return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, t); - t = t[i] - } - } - const o = t[i]; - if (void 0 === o) { - const n = e.nodeName; - return void console.error("THREE.PropertyBinding: Trying to update property for track: " + n + "." + i + " but it wasn't found.", t) - } - let s = this.Versioning.None; - this.targetObject = t, void 0 !== t.needsUpdate ? s = this.Versioning.NeedsUpdate : void 0 !== t.matrixWorldNeedsUpdate && (s = this.Versioning.MatrixWorldNeedsUpdate); - let a = this.BindingType.Direct; - if (void 0 !== r) { - if ("morphTargetInfluences" === i) { - if (!t.geometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); - if (!t.geometry.isBufferGeometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.", this); - if (!t.geometry.morphAttributes) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); - void 0 !== t.morphTargetDictionary[r] && (r = t.morphTargetDictionary[r]) - } - a = this.BindingType.ArrayElement, this.resolvedProperty = o, this.propertyIndex = r - } else void 0 !== o.fromArray && void 0 !== o.toArray ? (a = this.BindingType.HasFromToArray, this.resolvedProperty = o) : Array.isArray(o) ? (a = this.BindingType.EntireArray, this.resolvedProperty = o) : this.propertyName = i; - this.getValue = this.GetterByBindingType[a], this.setValue = this.SetterByBindingTypeAndVersioning[a][s] - }, - unbind: function() { - this.node = null, this.getValue = this._getValue_unbound, this.setValue = this._setValue_unbound - } - }), Object.assign(Wa.prototype, { - _getValue_unbound: Wa.prototype.getValue, - _setValue_unbound: Wa.prototype.setValue - }), Object.assign(function() { - this.uuid = g.generateUUID(), this._objects = Array.prototype.slice.call(arguments), this.nCachedObjects_ = 0; - const t = {}; - this._indicesByUUID = t; - for (let e = 0, n = arguments.length; e !== n; ++e) t[arguments[e].uuid] = e; - this._paths = [], this._parsedPaths = [], this._bindings = [], this._bindingsIndicesByPath = {}; - const e = this; - this.stats = { - objects: { - get total() { - return e._objects.length - }, - get inUse() { - return this.total - e.nCachedObjects_ - } - }, - get bindingsPerObject() { - return e._bindings.length - } - } - }.prototype, { - isAnimationObjectGroup: !0, - add: function() { - const t = this._objects, - e = this._indicesByUUID, - n = this._paths, - i = this._parsedPaths, - r = this._bindings, - o = r.length; - let s = void 0, - a = t.length, - l = this.nCachedObjects_; - for (let c = 0, h = arguments.length; c !== h; ++c) { - const h = arguments[c], - u = h.uuid; - let d = e[u]; - if (void 0 === d) { - d = a++, e[u] = d, t.push(h); - for (let t = 0, e = o; t !== e; ++t) r[t].push(new Wa(h, n[t], i[t])) - } else if (d < l) { - s = t[d]; - const a = --l, - c = t[a]; - e[c.uuid] = d, t[d] = c, e[u] = a, t[a] = h; - for (let t = 0, e = o; t !== e; ++t) { - const e = r[t], - o = e[a]; - let s = e[d]; - e[d] = o, void 0 === s && (s = new Wa(h, n[t], i[t])), e[a] = s - } - } else t[d] !== s && console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.") - } - this.nCachedObjects_ = l - }, - remove: function() { - const t = this._objects, - e = this._indicesByUUID, - n = this._bindings, - i = n.length; - let r = this.nCachedObjects_; - for (let o = 0, s = arguments.length; o !== s; ++o) { - const s = arguments[o], - a = s.uuid, - l = e[a]; - if (void 0 !== l && l >= r) { - const o = r++, - c = t[o]; - e[c.uuid] = l, t[l] = c, e[a] = o, t[o] = s; - for (let t = 0, e = i; t !== e; ++t) { - const e = n[t], - i = e[o], - r = e[l]; - e[l] = i, e[o] = r - } - } - } - this.nCachedObjects_ = r - }, - uncache: function() { - const t = this._objects, - e = this._indicesByUUID, - n = this._bindings, - i = n.length; - let r = this.nCachedObjects_, - o = t.length; - for (let s = 0, a = arguments.length; s !== a; ++s) { - const a = arguments[s].uuid, - l = e[a]; - if (void 0 !== l) - if (delete e[a], l < r) { - const s = --r, - a = t[s], - c = --o, - h = t[c]; - e[a.uuid] = l, t[l] = a, e[h.uuid] = s, t[s] = h, t.pop(); - for (let t = 0, e = i; t !== e; ++t) { - const e = n[t], - i = e[s], - r = e[c]; - e[l] = i, e[s] = r, e.pop() - } - } else { - const r = --o, - s = t[r]; - r > 0 && (e[s.uuid] = l), t[l] = s, t.pop(); - for (let t = 0, e = i; t !== e; ++t) { - const e = n[t]; - e[l] = e[r], e.pop() - } - } - } - this.nCachedObjects_ = r - }, - subscribe_: function(t, e) { - const n = this._bindingsIndicesByPath; - let i = n[t]; - const r = this._bindings; - if (void 0 !== i) return r[i]; - const o = this._paths, - s = this._parsedPaths, - a = this._objects, - l = a.length, - c = this.nCachedObjects_, - h = new Array(l); - i = r.length, n[t] = i, o.push(t), s.push(e), r.push(h); - for (let n = c, i = a.length; n !== i; ++n) { - const i = a[n]; - h[n] = new Wa(i, t, e) - } - return h - }, - unsubscribe_: function(t) { - const e = this._bindingsIndicesByPath, - n = e[t]; - if (void 0 !== n) { - const i = this._paths, - r = this._parsedPaths, - o = this._bindings, - s = o.length - 1, - a = o[s]; - e[t[s]] = n, o[n] = a, o.pop(), r[n] = r[s], r.pop(), i[n] = i[s], i.pop() - } - } - }); - class ja { - constructor(t, e, n = null, i = e.blendMode) { - this._mixer = t, this._clip = e, this._localRoot = n, this.blendMode = i; - const r = e.tracks, - o = r.length, - s = new Array(o), - a = { - endingStart: 2400, - endingEnd: 2400 - }; - for (let t = 0; t !== o; ++t) { - const e = r[t].createInterpolant(null); - s[t] = e, e.settings = a - } - this._interpolantSettings = a, this._interpolants = s, this._propertyBindings = new Array(o), this._cacheIndex = null, this._byClipCacheIndex = null, this._timeScaleInterpolant = null, this._weightInterpolant = null, this.loop = 2201, this._loopCount = -1, this._startTime = null, this.time = 0, this.timeScale = 1, this._effectiveTimeScale = 1, this.weight = 1, this._effectiveWeight = 1, this.repetitions = 1 / 0, this.paused = !1, this.enabled = !0, this.clampWhenFinished = !1, this.zeroSlopeAtStart = !0, this.zeroSlopeAtEnd = !0 - } - play() { - return this._mixer._activateAction(this), this - } - stop() { - return this._mixer._deactivateAction(this), this.reset() - } - reset() { - return this.paused = !1, this.enabled = !0, this.time = 0, this._loopCount = -1, this._startTime = null, this.stopFading().stopWarping() - } - isRunning() { - return this.enabled && !this.paused && 0 !== this.timeScale && null === this._startTime && this._mixer._isActiveAction(this) - } - isScheduled() { - return this._mixer._isActiveAction(this) - } - startAt(t) { - return this._startTime = t, this - } - setLoop(t, e) { - return this.loop = t, this.repetitions = e, this - } - setEffectiveWeight(t) { - return this.weight = t, this._effectiveWeight = this.enabled ? t : 0, this.stopFading() - } - getEffectiveWeight() { - return this._effectiveWeight - } - fadeIn(t) { - return this._scheduleFading(t, 0, 1) - } - fadeOut(t) { - return this._scheduleFading(t, 1, 0) - } - crossFadeFrom(t, e, n) { - if (t.fadeOut(e), this.fadeIn(e), n) { - const n = this._clip.duration, - i = t._clip.duration, - r = i / n, - o = n / i; - t.warp(1, r, e), this.warp(o, 1, e) - } - return this - } - crossFadeTo(t, e, n) { - return t.crossFadeFrom(this, e, n) - } - stopFading() { - const t = this._weightInterpolant; - return null !== t && (this._weightInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this - } - setEffectiveTimeScale(t) { - return this.timeScale = t, this._effectiveTimeScale = this.paused ? 0 : t, this.stopWarping() - } - getEffectiveTimeScale() { - return this._effectiveTimeScale - } - setDuration(t) { - return this.timeScale = this._clip.duration / t, this.stopWarping() - } - syncWith(t) { - return this.time = t.time, this.timeScale = t.timeScale, this.stopWarping() - } - halt(t) { - return this.warp(this._effectiveTimeScale, 0, t) - } - warp(t, e, n) { - const i = this._mixer, - r = i.time, - o = this.timeScale; - let s = this._timeScaleInterpolant; - null === s && (s = i._lendControlInterpolant(), this._timeScaleInterpolant = s); - const a = s.parameterPositions, - l = s.sampleValues; - return a[0] = r, a[1] = r + n, l[0] = t / o, l[1] = e / o, this - } - stopWarping() { - const t = this._timeScaleInterpolant; - return null !== t && (this._timeScaleInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this - } - getMixer() { - return this._mixer - } - getClip() { - return this._clip - } - getRoot() { - return this._localRoot || this._mixer._root - } - _update(t, e, n, i) { - if (!this.enabled) return void this._updateWeight(t); - const r = this._startTime; - if (null !== r) { - const i = (t - r) * n; - if (i < 0 || 0 === n) return; - this._startTime = null, e = n * i - } - e *= this._updateTimeScale(t); - const o = this._updateTime(e), - s = this._updateWeight(t); - if (s > 0) { - const t = this._interpolants, - e = this._propertyBindings; - switch (this.blendMode) { - case 2501: - for (let n = 0, i = t.length; n !== i; ++n) t[n].evaluate(o), e[n].accumulateAdditive(s); - break; - case 2500: - default: - for (let n = 0, r = t.length; n !== r; ++n) t[n].evaluate(o), e[n].accumulate(i, s) - } - } - } - _updateWeight(t) { - let e = 0; - if (this.enabled) { - e = this.weight; - const n = this._weightInterpolant; - if (null !== n) { - const i = n.evaluate(t)[0]; - e *= i, t > n.parameterPositions[1] && (this.stopFading(), 0 === i && (this.enabled = !1)) - } - } - return this._effectiveWeight = e, e - } - _updateTimeScale(t) { - let e = 0; - if (!this.paused) { - e = this.timeScale; - const n = this._timeScaleInterpolant; - if (null !== n) { - e *= n.evaluate(t)[0], t > n.parameterPositions[1] && (this.stopWarping(), 0 === e ? this.paused = !0 : this.timeScale = e) - } - } - return this._effectiveTimeScale = e, e - } - _updateTime(t) { - const e = this._clip.duration, - n = this.loop; - let i = this.time + t, - r = this._loopCount; - const o = 2202 === n; - if (0 === t) return -1 === r ? i : o && 1 == (1 & r) ? e - i : i; - if (2200 === n) { - -1 === r && (this._loopCount = 0, this._setEndings(!0, !0, !1)); - t: { - if (i >= e) i = e; - else { - if (!(i < 0)) { - this.time = i; - break t - } - i = 0 - } - this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, - this.time = i, - this._mixer.dispatchEvent({ - type: "finished", - action: this, - direction: t < 0 ? -1 : 1 - }) - } - } else { - if (-1 === r && (t >= 0 ? (r = 0, this._setEndings(!0, 0 === this.repetitions, o)) : this._setEndings(0 === this.repetitions, !0, o)), i >= e || i < 0) { - const n = Math.floor(i / e); - i -= e * n, r += Math.abs(n); - const s = this.repetitions - r; - if (s <= 0) this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, i = t > 0 ? e : 0, this.time = i, this._mixer.dispatchEvent({ - type: "finished", - action: this, - direction: t > 0 ? 1 : -1 - }); - else { - if (1 === s) { - const e = t < 0; - this._setEndings(e, !e, o) - } else this._setEndings(!1, !1, o); - this._loopCount = r, this.time = i, this._mixer.dispatchEvent({ - type: "loop", - action: this, - loopDelta: n - }) - } - } else this.time = i; - if (o && 1 == (1 & r)) return e - i - } - return i - } - _setEndings(t, e, n) { - const i = this._interpolantSettings; - n ? (i.endingStart = 2401, i.endingEnd = 2401) : (i.endingStart = t ? this.zeroSlopeAtStart ? 2401 : 2400 : 2402, i.endingEnd = e ? this.zeroSlopeAtEnd ? 2401 : 2400 : 2402) - } - _scheduleFading(t, e, n) { - const i = this._mixer, - r = i.time; - let o = this._weightInterpolant; - null === o && (o = i._lendControlInterpolant(), this._weightInterpolant = o); - const s = o.parameterPositions, - a = o.sampleValues; - return s[0] = r, a[0] = e, s[1] = r + t, a[1] = n, this - } - } - - function Xa(t) { - this._root = t, this._initMemoryManager(), this._accuIndex = 0, this.time = 0, this.timeScale = 1 - } - Xa.prototype = Object.assign(Object.create(p.prototype), { - constructor: Xa, - _bindAction: function(t, e) { - const n = t._localRoot || this._root, - i = t._clip.tracks, - r = i.length, - o = t._propertyBindings, - s = t._interpolants, - a = n.uuid, - l = this._bindingsByRootAndName; - let c = l[a]; - void 0 === c && (c = {}, l[a] = c); - for (let t = 0; t !== r; ++t) { - const r = i[t], - l = r.name; - let h = c[l]; - if (void 0 !== h) o[t] = h; - else { - if (h = o[t], void 0 !== h) { - null === h._cacheIndex && (++h.referenceCount, this._addInactiveBinding(h, a, l)); - continue - } - const i = e && e._propertyBindings[t].binding.parsedPath; - h = new Oa(Wa.create(n, l, i), r.ValueTypeName, r.getValueSize()), ++h.referenceCount, this._addInactiveBinding(h, a, l), o[t] = h - } - s[t].resultBuffer = h.buffer - } - }, - _activateAction: function(t) { - if (!this._isActiveAction(t)) { - if (null === t._cacheIndex) { - const e = (t._localRoot || this._root).uuid, - n = t._clip.uuid, - i = this._actionsByClip[n]; - this._bindAction(t, i && i.knownActions[0]), this._addInactiveAction(t, n, e) - } - const e = t._propertyBindings; - for (let t = 0, n = e.length; t !== n; ++t) { - const n = e[t]; - 0 == n.useCount++ && (this._lendBinding(n), n.saveOriginalState()) - } - this._lendAction(t) - } - }, - _deactivateAction: function(t) { - if (this._isActiveAction(t)) { - const e = t._propertyBindings; - for (let t = 0, n = e.length; t !== n; ++t) { - const n = e[t]; - 0 == --n.useCount && (n.restoreOriginalState(), this._takeBackBinding(n)) - } - this._takeBackAction(t) - } - }, - _initMemoryManager: function() { - this._actions = [], this._nActiveActions = 0, this._actionsByClip = {}, this._bindings = [], this._nActiveBindings = 0, this._bindingsByRootAndName = {}, this._controlInterpolants = [], this._nActiveControlInterpolants = 0; - const t = this; - this.stats = { - actions: { - get total() { - return t._actions.length - }, - get inUse() { - return t._nActiveActions - } - }, - bindings: { - get total() { - return t._bindings.length - }, - get inUse() { - return t._nActiveBindings - } - }, - controlInterpolants: { - get total() { - return t._controlInterpolants.length - }, - get inUse() { - return t._nActiveControlInterpolants - } - } - } - }, - _isActiveAction: function(t) { - const e = t._cacheIndex; - return null !== e && e < this._nActiveActions - }, - _addInactiveAction: function(t, e, n) { - const i = this._actions, - r = this._actionsByClip; - let o = r[e]; - if (void 0 === o) o = { - knownActions: [t], - actionByRoot: {} - }, t._byClipCacheIndex = 0, r[e] = o; - else { - const e = o.knownActions; - t._byClipCacheIndex = e.length, e.push(t) - } - t._cacheIndex = i.length, i.push(t), o.actionByRoot[n] = t - }, - _removeInactiveAction: function(t) { - const e = this._actions, - n = e[e.length - 1], - i = t._cacheIndex; - n._cacheIndex = i, e[i] = n, e.pop(), t._cacheIndex = null; - const r = t._clip.uuid, - o = this._actionsByClip, - s = o[r], - a = s.knownActions, - l = a[a.length - 1], - c = t._byClipCacheIndex; - l._byClipCacheIndex = c, a[c] = l, a.pop(), t._byClipCacheIndex = null; - delete s.actionByRoot[(t._localRoot || this._root).uuid], 0 === a.length && delete o[r], this._removeInactiveBindingsForAction(t) - }, - _removeInactiveBindingsForAction: function(t) { - const e = t._propertyBindings; - for (let t = 0, n = e.length; t !== n; ++t) { - const n = e[t]; - 0 == --n.referenceCount && this._removeInactiveBinding(n) - } - }, - _lendAction: function(t) { - const e = this._actions, - n = t._cacheIndex, - i = this._nActiveActions++, - r = e[i]; - t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r - }, - _takeBackAction: function(t) { - const e = this._actions, - n = t._cacheIndex, - i = --this._nActiveActions, - r = e[i]; - t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r - }, - _addInactiveBinding: function(t, e, n) { - const i = this._bindingsByRootAndName, - r = this._bindings; - let o = i[e]; - void 0 === o && (o = {}, i[e] = o), o[n] = t, t._cacheIndex = r.length, r.push(t) - }, - _removeInactiveBinding: function(t) { - const e = this._bindings, - n = t.binding, - i = n.rootNode.uuid, - r = n.path, - o = this._bindingsByRootAndName, - s = o[i], - a = e[e.length - 1], - l = t._cacheIndex; - a._cacheIndex = l, e[l] = a, e.pop(), delete s[r], 0 === Object.keys(s).length && delete o[i] - }, - _lendBinding: function(t) { - const e = this._bindings, - n = t._cacheIndex, - i = this._nActiveBindings++, - r = e[i]; - t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r - }, - _takeBackBinding: function(t) { - const e = this._bindings, - n = t._cacheIndex, - i = --this._nActiveBindings, - r = e[i]; - t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r - }, - _lendControlInterpolant: function() { - const t = this._controlInterpolants, - e = this._nActiveControlInterpolants++; - let n = t[e]; - return void 0 === n && (n = new us(new Float32Array(2), new Float32Array(2), 1, this._controlInterpolantsResultBuffer), n.__cacheIndex = e, t[e] = n), n - }, - _takeBackControlInterpolant: function(t) { - const e = this._controlInterpolants, - n = t.__cacheIndex, - i = --this._nActiveControlInterpolants, - r = e[i]; - t.__cacheIndex = i, e[i] = t, r.__cacheIndex = n, e[n] = r - }, - _controlInterpolantsResultBuffer: new Float32Array(1), - clipAction: function(t, e, n) { - const i = e || this._root, - r = i.uuid; - let o = "string" == typeof t ? _s.findByName(i, t) : t; - const s = null !== o ? o.uuid : t, - a = this._actionsByClip[s]; - let l = null; - if (void 0 === n && (n = null !== o ? o.blendMode : 2500), void 0 !== a) { - const t = a.actionByRoot[r]; - if (void 0 !== t && t.blendMode === n) return t; - l = a.knownActions[0], null === o && (o = l._clip) - } - if (null === o) return null; - const c = new ja(this, o, e, n); - return this._bindAction(c, l), this._addInactiveAction(c, s, r), c - }, - existingAction: function(t, e) { - const n = e || this._root, - i = n.uuid, - r = "string" == typeof t ? _s.findByName(n, t) : t, - o = r ? r.uuid : t, - s = this._actionsByClip[o]; - return void 0 !== s && s.actionByRoot[i] || null - }, - stopAllAction: function() { - const t = this._actions; - for (let e = this._nActiveActions - 1; e >= 0; --e) t[e].stop(); - return this - }, - update: function(t) { - t *= this.timeScale; - const e = this._actions, - n = this._nActiveActions, - i = this.time += t, - r = Math.sign(t), - o = this._accuIndex ^= 1; - for (let s = 0; s !== n; ++s) { - e[s]._update(i, t, r, o) - } - const s = this._bindings, - a = this._nActiveBindings; - for (let t = 0; t !== a; ++t) s[t].apply(o); - return this - }, - setTime: function(t) { - this.time = 0; - for (let t = 0; t < this._actions.length; t++) this._actions[t].time = 0; - return this.update(t) - }, - getRoot: function() { - return this._root - }, - uncacheClip: function(t) { - const e = this._actions, - n = t.uuid, - i = this._actionsByClip, - r = i[n]; - if (void 0 !== r) { - const t = r.knownActions; - for (let n = 0, i = t.length; n !== i; ++n) { - const i = t[n]; - this._deactivateAction(i); - const r = i._cacheIndex, - o = e[e.length - 1]; - i._cacheIndex = null, i._byClipCacheIndex = null, o._cacheIndex = r, e[r] = o, e.pop(), this._removeInactiveBindingsForAction(i) - } - delete i[n] - } - }, - uncacheRoot: function(t) { - const e = t.uuid, - n = this._actionsByClip; - for (const t in n) { - const i = n[t].actionByRoot[e]; - void 0 !== i && (this._deactivateAction(i), this._removeInactiveAction(i)) - } - const i = this._bindingsByRootAndName[e]; - if (void 0 !== i) - for (const t in i) { - const e = i[t]; - e.restoreOriginalState(), this._removeInactiveBinding(e) - } - }, - uncacheAction: function(t, e) { - const n = this.existingAction(t, e); - null !== n && (this._deactivateAction(n), this._removeInactiveAction(n)) - } - }); - class qa { - constructor(t) { - "string" == typeof t && (console.warn("THREE.Uniform: Type parameter is no longer needed."), t = arguments[1]), this.value = t - } - clone() { - return new qa(void 0 === this.value.clone ? this.value : this.value.clone()) - } - } - - function Ya(t, e, n) { - dr.call(this, t, e), this.meshPerAttribute = n || 1 - } - - function Qa(t, e, n, i, r) { - this.buffer = t, this.type = e, this.itemSize = n, this.elementSize = i, this.count = r, this.version = 0 - } - - function Za(t, e, n, i) { - this.ray = new tt(t, e), this.near = n || 0, this.far = i || 1 / 0, this.camera = null, this.layers = new dt, this.params = { - Mesh: {}, - Line: { - threshold: 1 - }, - LOD: {}, - Points: { - threshold: 1 - }, - Sprite: {} - }, Object.defineProperties(this.params, { - PointCloud: { - get: function() { - return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."), this.Points - } - } - }) - } - - function Ja(t, e) { - return t.distance - e.distance - } - - function Ka(t, e, n, i) { - if (t.layers.test(e.layers) && t.raycast(e, n), !0 === i) { - const i = t.children; - for (let t = 0, r = i.length; t < r; t++) Ka(i[t], e, n, !0) - } - } - Ya.prototype = Object.assign(Object.create(dr.prototype), { - constructor: Ya, - isInstancedInterleavedBuffer: !0, - copy: function(t) { - return dr.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this - }, - clone: function(t) { - const e = dr.prototype.clone.call(this, t); - return e.meshPerAttribute = this.meshPerAttribute, e - }, - toJSON: function(t) { - const e = dr.prototype.toJSON.call(this, t); - return e.isInstancedInterleavedBuffer = !0, e.meshPerAttribute = this.meshPerAttribute, e - } - }), Object.defineProperty(Qa.prototype, "needsUpdate", { - set: function(t) { - !0 === t && this.version++ - } - }), Object.assign(Qa.prototype, { - isGLBufferAttribute: !0, - setBuffer: function(t) { - return this.buffer = t, this - }, - setType: function(t, e) { - return this.type = t, this.elementSize = e, this - }, - setItemSize: function(t) { - return this.itemSize = t, this - }, - setCount: function(t) { - return this.count = t, this - } - }), Object.assign(Za.prototype, { - set: function(t, e) { - this.ray.set(t, e) - }, - setFromCamera: function(t, e) { - e && e.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), this.ray.direction.set(t.x, t.y, .5).unproject(e).sub(this.ray.origin).normalize(), this.camera = e) : e && e.isOrthographicCamera ? (this.ray.origin.set(t.x, t.y, (e.near + e.far) / (e.near - e.far)).unproject(e), this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld), this.camera = e) : console.error("THREE.Raycaster: Unsupported camera type: " + e.type) - }, - intersectObject: function(t, e, n) { - const i = n || []; - return Ka(t, this, i, e), i.sort(Ja), i - }, - intersectObjects: function(t, e, n) { - const i = n || []; - if (!1 === Array.isArray(t)) return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."), i; - for (let n = 0, r = t.length; n < r; n++) Ka(t[n], this, i, e); - return i.sort(Ja), i - } - }); - class $a { - constructor(t = 1, e = 0, n = 0) { - return this.radius = t, this.phi = e, this.theta = n, this - } - set(t, e, n) { - return this.radius = t, this.phi = e, this.theta = n, this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.radius = t.radius, this.phi = t.phi, this.theta = t.theta, this - } - makeSafe() { - return this.phi = Math.max(1e-6, Math.min(Math.PI - 1e-6, this.phi)), this - } - setFromVector3(t) { - return this.setFromCartesianCoords(t.x, t.y, t.z) - } - setFromCartesianCoords(t, e, n) { - return this.radius = Math.sqrt(t * t + e * e + n * n), 0 === this.radius ? (this.theta = 0, this.phi = 0) : (this.theta = Math.atan2(t, n), this.phi = Math.acos(g.clamp(e / this.radius, -1, 1))), this - } - } - const tl = new v; - const el = new T, - nl = new T; - - function il(t) { - St.call(this), this.material = t, this.render = function() {}, this.hasPositions = !1, this.hasNormals = !1, this.hasColors = !1, this.hasUvs = !1, this.positionArray = null, this.normalArray = null, this.colorArray = null, this.uvArray = null, this.count = 0 - } - il.prototype = Object.create(St.prototype), il.prototype.constructor = il, il.prototype.isImmediateRenderObject = !0; - const rl = new T, - ol = new et, - sl = new et; - const al = new Kt({ - side: 1, - depthWrite: !1, - depthTest: !1 - }); - new He(new Ve, al); - - function ll(t) { - console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."), Vs.call(this, t), this.type = "catmullrom" - } - Os.create = function(t, e) { - return console.log("THREE.Curve.create() has been deprecated"), t.prototype = Object.create(Os.prototype), t.prototype.constructor = t, t.prototype.getPoint = e, t - }, Object.assign(ea.prototype, { - fromPoints: function(t) { - return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."), this.setFromPoints(t) - } - }), ll.prototype = Object.create(Vs.prototype), Object.assign(ll.prototype, { - initFromArray: function() { - console.error("THREE.Spline: .initFromArray() has been removed.") - }, - getControlPointsArray: function() { - console.error("THREE.Spline: .getControlPointsArray() has been removed.") - }, - reparametrizeByArcLength: function() { - console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.") - } - }), class extends ro { - constructor(t = 10, e = 10, n = 4473924, i = 8947848) { - n = new Yt(n), i = new Yt(i); - const r = e / 2, - o = t / e, - s = t / 2, - a = [], - l = []; - for (let t = 0, c = 0, h = -s; t <= e; t++, h += o) { - a.push(-s, 0, h, s, 0, h), a.push(h, 0, -s, h, 0, s); - const e = t === r ? n : i; - e.toArray(l, c), c += 3, e.toArray(l, c), c += 3, e.toArray(l, c), c += 3, e.toArray(l, c), c += 3 - } - const c = new be; - c.setAttribute("position", new he(a, 3)), c.setAttribute("color", new he(l, 3)); - super(c, new Qr({ - vertexColors: !0, - toneMapped: !1 - })), this.type = "GridHelper" - } - }.prototype.setColors = function() { - console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.") - }, class extends ro { - constructor(t) { - const e = function t(e) { - const n = []; - e && e.isBone && n.push(e); - for (let i = 0; i < e.children.length; i++) n.push.apply(n, t(e.children[i])); - return n - }(t), - n = new be, - i = [], - r = [], - o = new Yt(0, 0, 1), - s = new Yt(0, 1, 0); - for (let t = 0; t < e.length; t++) { - const n = e[t]; - n.parent && n.parent.isBone && (i.push(0, 0, 0), i.push(0, 0, 0), r.push(o.r, o.g, o.b), r.push(s.r, s.g, s.b)) - } - n.setAttribute("position", new he(i, 3)), n.setAttribute("color", new he(r, 3)); - super(n, new Qr({ - vertexColors: !0, - depthTest: !1, - depthWrite: !1, - toneMapped: !1, - transparent: !0 - })), this.type = "SkeletonHelper", this.isSkeletonHelper = !0, this.root = t, this.bones = e, this.matrix = t.matrixWorld, this.matrixAutoUpdate = !1 - } - updateMatrixWorld(t) { - const e = this.bones, - n = this.geometry, - i = n.getAttribute("position"); - sl.copy(this.root.matrixWorld).invert(); - for (let t = 0, n = 0; t < e.length; t++) { - const r = e[t]; - r.parent && r.parent.isBone && (ol.multiplyMatrices(sl, r.matrixWorld), rl.setFromMatrixPosition(ol), i.setXYZ(n, rl.x, rl.y, rl.z), ol.multiplyMatrices(sl, r.parent.matrixWorld), rl.setFromMatrixPosition(ol), i.setXYZ(n + 1, rl.x, rl.y, rl.z), n += 2) - } - n.getAttribute("position").needsUpdate = !0, super.updateMatrixWorld(t) - } - }.prototype.update = function() { - console.error("THREE.SkeletonHelper: update() no longer needs to be called.") - }, Object.assign(Es.prototype, { - extractUrlBase: function(t) { - return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."), ya(t) - } - }), Es.Handlers = { - add: function() { - console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.") - }, - get: function() { - console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.") - } - }, Object.assign(class { - constructor(t, e) { - Object.defineProperty(this, "isBox2", { - value: !0 - }), this.min = void 0 !== t ? t : new v(1 / 0, 1 / 0), this.max = void 0 !== e ? e : new v(-1 / 0, -1 / 0) - } - set(t, e) { - return this.min.copy(t), this.max.copy(e), this - } - setFromPoints(t) { - this.makeEmpty(); - for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); - return this - } - setFromCenterAndSize(t, e) { - const n = tl.copy(e).multiplyScalar(.5); - return this.min.copy(t).sub(n), this.max.copy(t).add(n), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.min.copy(t.min), this.max.copy(t.max), this - } - makeEmpty() { - return this.min.x = this.min.y = 1 / 0, this.max.x = this.max.y = -1 / 0, this - } - isEmpty() { - return this.max.x < this.min.x || this.max.y < this.min.y - } - getCenter(t) { - return void 0 === t && (console.warn("THREE.Box2: .getCenter() target is now required"), t = new v), this.isEmpty() ? t.set(0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5) - } - getSize(t) { - return void 0 === t && (console.warn("THREE.Box2: .getSize() target is now required"), t = new v), this.isEmpty() ? t.set(0, 0) : t.subVectors(this.max, this.min) - } - expandByPoint(t) { - return this.min.min(t), this.max.max(t), this - } - expandByVector(t) { - return this.min.sub(t), this.max.add(t), this - } - expandByScalar(t) { - return this.min.addScalar(-t), this.max.addScalar(t), this - } - containsPoint(t) { - return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y) - } - containsBox(t) { - return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y - } - getParameter(t, e) { - return void 0 === e && (console.warn("THREE.Box2: .getParameter() target is now required"), e = new v), e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y)) - } - intersectsBox(t) { - return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y) - } - clampPoint(t, e) { - return void 0 === e && (console.warn("THREE.Box2: .clampPoint() target is now required"), e = new v), e.copy(t).clamp(this.min, this.max) - } - distanceToPoint(t) { - return tl.copy(t).clamp(this.min, this.max).sub(t).length() - } - intersect(t) { - return this.min.max(t.min), this.max.min(t.max), this - } - union(t) { - return this.min.min(t.min), this.max.max(t.max), this - } - translate(t) { - return this.min.add(t), this.max.add(t), this - } - equals(t) { - return t.min.equals(this.min) && t.max.equals(this.max) - } - }.prototype, { - center: function(t) { - return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."), this.getCenter(t) - }, - empty: function() { - return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."), this.isEmpty() - }, - isIntersectionBox: function(t) { - return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) - }, - size: function(t) { - return console.warn("THREE.Box2: .size() has been renamed to .getSize()."), this.getSize(t) - } - }), Object.assign(C.prototype, { - center: function(t) { - return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."), this.getCenter(t) - }, - empty: function() { - return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."), this.isEmpty() - }, - isIntersectionBox: function(t) { - return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) - }, - isIntersectionSphere: function(t) { - return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(t) - }, - size: function(t) { - return console.warn("THREE.Box3: .size() has been renamed to .getSize()."), this.getSize(t) - } - }), Object.assign(X.prototype, { - empty: function() { - return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."), this.isEmpty() - } - }), en.prototype.setFromMatrix = function(t) { - return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."), this.setFromProjectionMatrix(t) - }, class { - constructor(t, e) { - this.start = void 0 !== t ? t : new T, this.end = void 0 !== e ? e : new T - } - set(t, e) { - return this.start.copy(t), this.end.copy(e), this - } - clone() { - return (new this.constructor).copy(this) - } - copy(t) { - return this.start.copy(t.start), this.end.copy(t.end), this - } - getCenter(t) { - return void 0 === t && (console.warn("THREE.Line3: .getCenter() target is now required"), t = new T), t.addVectors(this.start, this.end).multiplyScalar(.5) - } - delta(t) { - return void 0 === t && (console.warn("THREE.Line3: .delta() target is now required"), t = new T), t.subVectors(this.end, this.start) - } - distanceSq() { - return this.start.distanceToSquared(this.end) - } - distance() { - return this.start.distanceTo(this.end) - } - at(t, e) { - return void 0 === e && (console.warn("THREE.Line3: .at() target is now required"), e = new T), this.delta(e).multiplyScalar(t).add(this.start) - } - closestPointToPointParameter(t, e) { - el.subVectors(t, this.start), nl.subVectors(this.end, this.start); - const n = nl.dot(nl); - let i = nl.dot(el) / n; - return e && (i = g.clamp(i, 0, 1)), i - } - closestPointToPoint(t, e, n) { - const i = this.closestPointToPointParameter(t, e); - return void 0 === n && (console.warn("THREE.Line3: .closestPointToPoint() target is now required"), n = new T), this.delta(n).multiplyScalar(i).add(this.start) - } - applyMatrix4(t) { - return this.start.applyMatrix4(t), this.end.applyMatrix4(t), this - } - equals(t) { - return t.start.equals(this.start) && t.end.equals(this.end) - } - }.prototype.center = function(t) { - return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."), this.getCenter(t) - }, Object.assign(g, { - random16: function() { - return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."), Math.random() - }, - nearestPowerOfTwo: function(t) { - return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."), g.floorPowerOfTwo(t) - }, - nextPowerOfTwo: function(t) { - return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."), g.ceilPowerOfTwo(t) - } - }), Object.assign(y.prototype, { - flattenToArrayOffset: function(t, e) { - return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(t, e) - }, - multiplyVector3: function(t) { - return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."), t.applyMatrix3(this) - }, - multiplyVector3Array: function() { - console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.") - }, - applyToBufferAttribute: function(t) { - return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."), t.applyMatrix3(this) - }, - applyToVector3Array: function() { - console.error("THREE.Matrix3: .applyToVector3Array() has been removed.") - }, - getInverse: function(t) { - return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."), this.copy(t).invert() - } - }), Object.assign(et.prototype, { - extractPosition: function(t) { - return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."), this.copyPosition(t) - }, - flattenToArrayOffset: function(t, e) { - return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(t, e) - }, - getPosition: function() { - return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."), (new T).setFromMatrixColumn(this, 3) - }, - setRotationFromQuaternion: function(t) { - return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."), this.makeRotationFromQuaternion(t) - }, - multiplyToArray: function() { - console.warn("THREE.Matrix4: .multiplyToArray() has been removed.") - }, - multiplyVector3: function(t) { - return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) - }, - multiplyVector4: function(t) { - return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) - }, - multiplyVector3Array: function() { - console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.") - }, - rotateAxis: function(t) { - console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."), t.transformDirection(this) - }, - crossVector: function(t) { - return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) - }, - translate: function() { - console.error("THREE.Matrix4: .translate() has been removed.") - }, - rotateX: function() { - console.error("THREE.Matrix4: .rotateX() has been removed.") - }, - 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.") - }, - applyToBufferAttribute: function(t) { - return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."), t.applyMatrix4(this) - }, - applyToVector3Array: function() { - console.error("THREE.Matrix4: .applyToVector3Array() has been removed.") - }, - makeFrustum: function(t, e, n, i, r, o) { - return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."), this.makePerspective(t, e, i, n, r, o) - }, - getInverse: function(t) { - return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."), this.copy(t).invert() - } - }), Ct.prototype.isIntersectionLine = function(t) { - return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."), this.intersectsLine(t) - }, Object.assign(S.prototype, { - multiplyVector3: function(t) { - return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."), t.applyQuaternion(this) - }, - inverse: function() { - return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."), this.invert() - } - }), Object.assign(tt.prototype, { - isIntersectionBox: function(t) { - return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t) - }, - isIntersectionPlane: function(t) { - return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."), this.intersectsPlane(t) - }, - isIntersectionSphere: function(t) { - return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(t) - } - }), Object.assign(Gt.prototype, { - area: function() { - return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."), this.getArea() - }, - barycoordFromPoint: function(t, e) { - return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), this.getBarycoord(t, e) - }, - midpoint: function(t) { - return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."), this.getMidpoint(t) - }, - normal: function(t) { - return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), this.getNormal(t) - }, - plane: function(t) { - return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."), this.getPlane(t) - } - }), Object.assign(Gt, { - barycoordFromPoint: function(t, e, n, i, r) { - return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), Gt.getBarycoord(t, e, n, i, r) - }, - normal: function(t, e, n, i) { - return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), Gt.getNormal(t, e, n, i) - } - }), Object.assign(na.prototype, { - extractAllPoints: function(t) { - return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."), this.extractPoints(t) - }, - extrude: function(t) { - return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."), new Xo(this, t) - }, - makeGeometry: function(t) { - return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."), new Qo(this, t) - } - }), Object.assign(v.prototype, { - fromAttribute: function(t, e, n) { - return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) - }, - distanceToManhattan: function(t) { - return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(t) - }, - lengthManhattan: function() { - return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() - } - }), Object.assign(T.prototype, { - 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(t) { - return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."), this.setFromMatrixPosition(t) - }, - getScaleFromMatrix: function(t) { - return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."), this.setFromMatrixScale(t) - }, - getColumnFromMatrix: function(t, e) { - return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."), this.setFromMatrixColumn(e, t) - }, - applyProjection: function(t) { - return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."), this.applyMatrix4(t) - }, - fromAttribute: function(t, e, n) { - return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) - }, - distanceToManhattan: function(t) { - return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(t) - }, - lengthManhattan: function() { - return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() - } - }), Object.assign(M.prototype, { - fromAttribute: function(t, e, n) { - return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n) - }, - lengthManhattan: function() { - return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() - } - }), Object.assign(St.prototype, { - getChildByName: function(t) { - return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."), this.getObjectByName(t) - }, - renderDepth: function() { - console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.") - }, - translate: function(t, e) { - return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."), this.translateOnAxis(e, t) - }, - getWorldRotation: function() { - console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.") - }, - applyMatrix: function(t) { - return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(t) - } - }), Object.defineProperties(St.prototype, { - eulerOrder: { - get: function() { - return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order - }, - set: function(t) { - console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order = t - } - }, - useQuaternion: { - get: function() { - console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") - }, - set: function() { - console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") - } - } - }), Object.assign(He.prototype, { - setDrawMode: function() { - console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") - } - }), Object.defineProperties(He.prototype, { - drawMode: { - get: function() { - return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."), 0 - }, - set: function() { - console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") - } - } - }), Object.defineProperties(Ir.prototype, { - objects: { - get: function() { - return console.warn("THREE.LOD: .objects has been renamed to .levels."), this.levels - } - } - }), Object.defineProperty(kr.prototype, "useVertexTexture", { - get: function() { - console.warn("THREE.Skeleton: useVertexTexture has been removed.") - }, - set: function() { - console.warn("THREE.Skeleton: useVertexTexture has been removed.") - } - }), Ur.prototype.initBones = function() { - console.error("THREE.SkinnedMesh: initBones() has been removed.") - }, Object.defineProperty(Os.prototype, "__arcLengthDivisions", { - get: function() { - return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions - }, - set: function(t) { - console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions = t - } - }), Ye.prototype.setLens = function(t, e) { - console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."), void 0 !== e && (this.filmGauge = e), this.setFocalLength(t) - }, Object.defineProperties(ia.prototype, { - onlyShadow: { - set: function() { - console.warn("THREE.Light: .onlyShadow has been removed.") - } - }, - shadowCameraFov: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."), this.shadow.camera.fov = t - } - }, - shadowCameraLeft: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."), this.shadow.camera.left = t - } - }, - shadowCameraRight: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."), this.shadow.camera.right = t - } - }, - shadowCameraTop: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."), this.shadow.camera.top = t - } - }, - shadowCameraBottom: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."), this.shadow.camera.bottom = t - } - }, - shadowCameraNear: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."), this.shadow.camera.near = t - } - }, - shadowCameraFar: { - set: function(t) { - console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."), this.shadow.camera.far = t - } - }, - shadowCameraVisible: { - set: function() { - console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.") - } - }, - shadowBias: { - set: function(t) { - console.warn("THREE.Light: .shadowBias is now .shadow.bias."), this.shadow.bias = t - } - }, - shadowDarkness: { - set: function() { - console.warn("THREE.Light: .shadowDarkness has been removed.") - } - }, - shadowMapWidth: { - set: function(t) { - console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."), this.shadow.mapSize.width = t - } - }, - shadowMapHeight: { - set: function(t) { - console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."), this.shadow.mapSize.height = t - } - } - }), Object.defineProperties(ee.prototype, { - length: { - get: function() { - return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."), this.array.length - } - }, - dynamic: { - get: function() { - return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), 35048 === this.usage - }, - set: function() { - console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), this.setUsage(35048) - } - } - }), Object.assign(ee.prototype, { - setDynamic: function(t) { - return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === t ? 35048 : 35044), this - }, - copyIndicesArray: function() { - console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.") - }, - setArray: function() { - console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") - } - }), Object.assign(be.prototype, { - addIndex: function(t) { - console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."), this.setIndex(t) - }, - addAttribute: function(t, e) { - return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."), e && e.isBufferAttribute || e && e.isInterleavedBufferAttribute ? "index" === t ? (console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."), this.setIndex(e), this) : this.setAttribute(t, e) : (console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."), this.setAttribute(t, new ee(arguments[1], arguments[2]))) - }, - addDrawCall: function(t, e, n) { - void 0 !== n && console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."), console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."), this.addGroup(t, e) - }, - clearDrawCalls: function() { - console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."), this.clearGroups() - }, - computeOffsets: function() { - console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.") - }, - removeAttribute: function(t) { - return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."), this.deleteAttribute(t) - }, - applyMatrix: function(t) { - return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(t) - } - }), Object.defineProperties(be.prototype, { - drawcalls: { - get: function() { - return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."), this.groups - } - }, - offsets: { - get: function() { - return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."), this.groups - } - } - }), Object.defineProperties(Aa.prototype, { - maxInstancedCount: { - get: function() { - return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."), this.instanceCount - }, - set: function(t) { - console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."), this.instanceCount = t - } - } - }), Object.defineProperties(Za.prototype, { - linePrecision: { - get: function() { - return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold - }, - set: function(t) { - console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold = t - } - } - }), Object.defineProperties(dr.prototype, { - dynamic: { - get: function() { - return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), 35048 === this.usage - }, - set: function(t) { - console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), this.setUsage(t) - } - } - }), Object.assign(dr.prototype, { - setDynamic: function(t) { - return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === t ? 35048 : 35044), this - }, - setArray: function() { - console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") - } - }), Object.assign(Xo.prototype, { - getArrays: function() { - console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.") - }, - addShapeList: function() { - console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.") - }, - addShape: function() { - console.error("THREE.ExtrudeGeometry: .addShape() has been removed.") - } - }), Object.assign(ur.prototype, { - dispose: function() { - console.error("THREE.Scene: .dispose() has been removed.") - } - }), Object.defineProperties(qa.prototype, { - dynamic: { - set: function() { - console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.") - } - }, - onUpdate: { - value: function() { - return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."), this - } - } - }), Object.defineProperties(Jt.prototype, { - wrapAround: { - get: function() { - console.warn("THREE.Material: .wrapAround has been removed.") - }, - set: function() { - console.warn("THREE.Material: .wrapAround has been removed.") - } - }, - overdraw: { - get: function() { - console.warn("THREE.Material: .overdraw has been removed.") - }, - set: function() { - console.warn("THREE.Material: .overdraw has been removed.") - } - }, - wrapRGB: { - get: function() { - return console.warn("THREE.Material: .wrapRGB has been removed."), new Yt - } - }, - shading: { - get: function() { - console.error("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead.") - }, - set: function(t) { - console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === t - } - }, - stencilMask: { - get: function() { - return console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask - }, - set: function(t) { - console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask = t - } - } - }), Object.defineProperties(es.prototype, { - metal: { - get: function() { - return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."), !1 - }, - set: function() { - console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead") - } - } - }), Object.defineProperties(ts.prototype, { - transparency: { - get: function() { - return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."), this.transmission - }, - set: function(t) { - console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."), this.transmission = t - } - } - }), Object.defineProperties(Xe.prototype, { - derivatives: { - get: function() { - return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives - }, - set: function(t) { - console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives = t - } - } - }), Object.assign(cr.prototype, { - clearTarget: function(t, e, n, i) { - console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."), this.setRenderTarget(t), this.clear(e, n, i) - }, - animate: function(t) { - console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."), this.setAnimationLoop(t) - }, - getCurrentRenderTarget: function() { - return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."), this.getRenderTarget() - }, - getMaxAnisotropy: function() { - return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."), this.capabilities.getMaxAnisotropy() - }, - getPrecision: function() { - return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."), this.capabilities.precision - }, - resetGLState: function() { - return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."), this.state.reset() - }, - supportsFloatTextures: function() { - return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."), this.extensions.get("OES_texture_float") - }, - supportsHalfFloatTextures: function() { - return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."), this.extensions.get("OES_texture_half_float") - }, - supportsStandardDerivatives: function() { - return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."), this.extensions.get("OES_standard_derivatives") - }, - supportsCompressedTextureS3TC: function() { - return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."), this.extensions.get("WEBGL_compressed_texture_s3tc") - }, - supportsCompressedTexturePVRTC: function() { - return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."), this.extensions.get("WEBGL_compressed_texture_pvrtc") - }, - supportsBlendMinMax: function() { - return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."), this.extensions.get("EXT_blend_minmax") - }, - supportsVertexTextures: function() { - return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."), this.capabilities.vertexTextures - }, - supportsInstancedArrays: function() { - return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."), this.extensions.get("ANGLE_instanced_arrays") - }, - enableScissorTest: function(t) { - console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."), this.setScissorTest(t) - }, - initMaterial: function() { - console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.") - }, - addPrePlugin: function() { - console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.") - }, - addPostPlugin: function() { - console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.") - }, - updateShadowMap: function() { - console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.") - }, - setFaceCulling: function() { - console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.") - }, - allocTextureUnit: function() { - console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.") - }, - setTexture: function() { - console.warn("THREE.WebGLRenderer: .setTexture() has been removed.") - }, - setTexture2D: function() { - console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.") - }, - setTextureCube: function() { - console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.") - }, - getActiveMipMapLevel: function() { - return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."), this.getActiveMipmapLevel() - } - }), Object.defineProperties(cr.prototype, { - shadowMapEnabled: { - get: function() { - return this.shadowMap.enabled - }, - set: function(t) { - console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."), this.shadowMap.enabled = t - } - }, - shadowMapType: { - get: function() { - return this.shadowMap.type - }, - set: function(t) { - console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."), this.shadowMap.type = t - } - }, - shadowMapCullFace: { - get: function() { - console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") - }, - set: function() { - console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") - } - }, - context: { - get: function() { - return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."), this.getContext() - } - }, - vr: { - get: function() { - return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"), this.xr - } - }, - gammaInput: { - get: function() { - return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."), !1 - }, - set: function() { - console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.") - } - }, - gammaOutput: { - get: function() { - return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), !1 - }, - set: function(t) { - console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), this.outputEncoding = !0 === t ? 3001 : 3e3 - } - }, - toneMappingWhitePoint: { - get: function() { - return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."), 1 - }, - set: function() { - console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.") - } - } - }), Object.defineProperties(tr.prototype, { - cullFace: { - get: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") - }, - set: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") - } - }, - renderReverseSided: { - get: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") - }, - set: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") - } - }, - renderSingleSided: { - get: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") - }, - set: function() { - console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") - } - } - }), Object.defineProperties(E.prototype, { - wrapS: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS = t - } - }, - wrapT: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT = t - } - }, - magFilter: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter = t - } - }, - minFilter: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter = t - } - }, - anisotropy: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy = t - } - }, - offset: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset = t - } - }, - repeat: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat = t - } - }, - format: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format = t - } - }, - type: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type = t - } - }, - generateMipmaps: { - get: function() { - return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps - }, - set: function(t) { - console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps = t - } - } - }), Object.defineProperties(class extends St { - constructor(t) { - super(), this.type = "Audio", this.listener = t, this.context = t.context, this.gain = this.context.createGain(), this.gain.connect(t.getInput()), this.autoplay = !1, this.buffer = null, this.detune = 0, this.loop = !1, this.loopStart = 0, this.loopEnd = 0, this.offset = 0, this.duration = void 0, this.playbackRate = 1, this.isPlaying = !1, this.hasPlaybackControl = !0, this.source = null, this.sourceType = "empty", this._startedAt = 0, this._progress = 0, this._connected = !1, this.filters = [] - } - getOutput() { - return this.gain - } - setNodeSource(t) { - return this.hasPlaybackControl = !1, this.sourceType = "audioNode", this.source = t, this.connect(), this - } - setMediaElementSource(t) { - return this.hasPlaybackControl = !1, this.sourceType = "mediaNode", this.source = this.context.createMediaElementSource(t), this.connect(), this - } - setMediaStreamSource(t) { - return this.hasPlaybackControl = !1, this.sourceType = "mediaStreamNode", this.source = this.context.createMediaStreamSource(t), this.connect(), this - } - setBuffer(t) { - return this.buffer = t, this.sourceType = "buffer", this.autoplay && this.play(), this - } - play(t = 0) { - if (!0 === this.isPlaying) return void console.warn("THREE.Audio: Audio is already playing."); - if (!1 === this.hasPlaybackControl) return void console.warn("THREE.Audio: this Audio has no playback control."); - this._startedAt = this.context.currentTime + t; - const e = this.context.createBufferSource(); - return e.buffer = this.buffer, e.loop = this.loop, e.loopStart = this.loopStart, e.loopEnd = this.loopEnd, e.onended = this.onEnded.bind(this), e.start(this._startedAt, this._progress + this.offset, this.duration), this.isPlaying = !0, this.source = e, this.setDetune(this.detune), this.setPlaybackRate(this.playbackRate), this.connect() - } - pause() { - if (!1 !== this.hasPlaybackControl) return !0 === this.isPlaying && (this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate, !0 === this.loop && (this._progress = this._progress % (this.duration || this.buffer.duration)), this.source.stop(), this.source.onended = null, this.isPlaying = !1), this; - console.warn("THREE.Audio: this Audio has no playback control.") - } - stop() { - if (!1 !== this.hasPlaybackControl) return this._progress = 0, this.source.stop(), this.source.onended = null, this.isPlaying = !1, this; - console.warn("THREE.Audio: this Audio has no playback control.") - } - connect() { - if (this.filters.length > 0) { - this.source.connect(this.filters[0]); - for (let t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].connect(this.filters[t]); - this.filters[this.filters.length - 1].connect(this.getOutput()) - } else this.source.connect(this.getOutput()); - return this._connected = !0, this - } - disconnect() { - if (this.filters.length > 0) { - this.source.disconnect(this.filters[0]); - for (let t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].disconnect(this.filters[t]); - this.filters[this.filters.length - 1].disconnect(this.getOutput()) - } else this.source.disconnect(this.getOutput()); - return this._connected = !1, this - } - getFilters() { - return this.filters - } - setFilters(t) { - return t || (t = []), !0 === this._connected ? (this.disconnect(), this.filters = t.slice(), this.connect()) : this.filters = t.slice(), this - } - setDetune(t) { - if (this.detune = t, void 0 !== this.source.detune) return !0 === this.isPlaying && this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, .01), this - } - getDetune() { - return this.detune - } - getFilter() { - return this.getFilters()[0] - } - setFilter(t) { - return this.setFilters(t ? [t] : []) - } - setPlaybackRate(t) { - if (!1 !== this.hasPlaybackControl) return this.playbackRate = t, !0 === this.isPlaying && this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, .01), this; - console.warn("THREE.Audio: this Audio has no playback control.") - } - getPlaybackRate() { - return this.playbackRate - } - onEnded() { - this.isPlaying = !1 - } - getLoop() { - return !1 === this.hasPlaybackControl ? (console.warn("THREE.Audio: this Audio has no playback control."), !1) : this.loop - } - setLoop(t) { - if (!1 !== this.hasPlaybackControl) return this.loop = t, !0 === this.isPlaying && (this.source.loop = this.loop), this; - console.warn("THREE.Audio: this Audio has no playback control.") - } - setLoopStart(t) { - return this.loopStart = t, this - } - setLoopEnd(t) { - return this.loopEnd = t, this - } - getVolume() { - return this.gain.gain.value - } - setVolume(t) { - return this.gain.gain.setTargetAtTime(t, this.context.currentTime, .01), this - } - }.prototype, { - load: { - value: function(t) { - console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead."); - const e = this; - return (new Ra).load(t, (function(t) { - e.setBuffer(t) - })), this - } - }, - startTime: { - set: function() { - console.warn("THREE.Audio: .startTime is now .play( delay ).") - } - } - }), class { - constructor(t, e = 2048) { - this.analyser = t.context.createAnalyser(), this.analyser.fftSize = e, this.data = new Uint8Array(this.analyser.frequencyBinCount), t.getOutput().connect(this.analyser) - } - getFrequencyData() { - return this.analyser.getByteFrequencyData(this.data), this.data - } - getAverageFrequency() { - let t = 0; - const e = this.getFrequencyData(); - for (let n = 0; n < e.length; n++) t += e[n]; - return t / e.length - } - }.prototype.getData = function() { - return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."), this.getFrequencyData() - }, Qe.prototype.updateCubeMap = function(t, e) { - return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."), this.update(t, e) - }, Qe.prototype.clear = function(t, e, n, i) { - return console.warn("THREE.CubeCamera: .clear() is now .renderTarget.clear()."), this.renderTarget.clear(t, e, n, i) - }, x.crossOrigin = void 0, x.loadTexture = function(t, e, n, i) { - console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead."); - const r = new Is; - r.setCrossOrigin(this.crossOrigin); - const o = r.load(t, n, void 0, i); - return e && (o.mapping = e), o - }, x.loadTextureCube = function(t, e, n, i) { - console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead."); - const r = new Ps; - r.setCrossOrigin(this.crossOrigin); - const o = r.load(t, n, void 0, i); - return e && (o.mapping = e), o - }, x.loadCompressedTexture = function() { - console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.") - }, x.loadCompressedTextureCube = function() { - console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.") - }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { - detail: { - revision: "125" - } - })), "undefined" != typeof window && (window.__THREE__ ? console.warn("WARNING: Multiple instances of Three.js being imported.") : window.__THREE__ = "125"); - var cl = function(t, e) { - var n, i, r = this, - o = new et, - s = null; - "VRFrameData" in window && (s = new VRFrameData), navigator.getVRDisplays && navigator.getVRDisplays().then((function(t) { - i = t, t.length > 0 ? n = t[0] : e && e("VR input not available.") - })).catch((function() { - console.warn("THREE.VRControls: Unable to get VR Displays") - })), this.scale = 1, this.standing = !1, this.userHeight = 1.6, this.getVRDisplay = function() { - return n - }, this.setVRDisplay = function(t) { - n = t - }, this.getVRDisplays = function() { - return console.warn("THREE.VRControls: getVRDisplays() is being deprecated."), i - }, this.getStandingMatrix = function() { - return o - }, this.update = function() { - var e; - n && (n.getFrameData ? (n.getFrameData(s), e = s.pose) : n.getPose && (e = n.getPose()), null !== e.orientation && t.quaternion.fromArray(e.orientation), null !== e.position ? t.position.fromArray(e.position) : t.position.set(0, 0, 0), this.standing && (n.stageParameters ? (t.updateMatrix(), o.fromArray(n.stageParameters.sittingToStandingTransform), t.applyMatrix(o)) : t.position.setY(t.position.y + this.userHeight)), t.position.multiplyScalar(r.scale)) - }, this.dispose = function() { - n = null - } - }, - hl = function(t, e) { - var n, i, r, o, s = new T, - a = new T, - l = new et, - c = new et, - h = new et, - u = null; - "VRFrameData" in window && (u = new window.VRFrameData), navigator.getVRDisplays && navigator.getVRDisplays().then((function(t) { - i = t, t.length > 0 ? n = t[0] : e && e("HMD not available") - })).catch((function() { - console.warn("THREE.VREffect: Unable to get VR Displays") - })), this.isPresenting = !1; - var d = this, - p = t.getSize(), - f = !1, - m = t.getPixelRatio(); - this.getVRDisplay = function() { - return n - }, this.setVRDisplay = function(t) { - n = t - }, this.getVRDisplays = function() { - return console.warn("THREE.VREffect: getVRDisplays() is being deprecated."), i - }, this.setSize = function(e, i, r) { - if (p = { - width: e, - height: i - }, f = r, d.isPresenting) { - var o = n.getEyeParameters("left"); - t.setPixelRatio(1), t.setSize(2 * o.renderWidth, o.renderHeight, !1) - } else t.setPixelRatio(m), t.setSize(e, i, r) - }; - var g = t.domElement, - v = [0, 0, .5, 1], - y = [.5, 0, .5, 1]; - - function A() { - var e = d.isPresenting; - if (d.isPresenting = void 0 !== n && n.isPresenting, d.isPresenting) { - var i = n.getEyeParameters("left"), - r = i.renderWidth, - o = i.renderHeight; - e || (m = t.getPixelRatio(), p = t.getSize(), t.setPixelRatio(1), t.setSize(2 * r, o, !1)) - } else e && (t.setPixelRatio(m), t.setSize(p.width, p.height, f)) - } - window.addEventListener("vrdisplaypresentchange", A, !1), this.setFullScreen = function(t) { - return new Promise((function(e, i) { - void 0 !== n ? d.isPresenting !== t ? e(t ? n.requestPresent([{ - source: g - }]) : n.exitPresent()) : e() : i(new Error("No VR hardware found.")) - })) - }, this.requestPresent = function() { - return this.setFullScreen(!0) - }, this.exitPresent = function() { - return this.setFullScreen(!1) - }, this.requestAnimationFrame = function(t) { - return void 0 !== n ? n.requestAnimationFrame(t) : window.requestAnimationFrame(t) - }, this.cancelAnimationFrame = function(t) { - void 0 !== n ? n.cancelAnimationFrame(t) : window.cancelAnimationFrame(t) - }, this.submitFrame = function() { - void 0 !== n && d.isPresenting && n.submitFrame() - }, this.autoSubmitFrame = !0; - var x = new Ye; - x.layers.enable(1); - var _ = new Ye; - _.layers.enable(2), this.render = function(e, i, p, f) { - if (n && d.isPresenting) { - var m = e.autoUpdate; - m && (e.updateMatrixWorld(), e.autoUpdate = !1), Array.isArray(e) && (console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead."), e = e[0]); - var g, A, E = t.getSize(), - S = n.getLayers(); - if (S.length) { - var T = S[0]; - g = null !== T.leftBounds && 4 === T.leftBounds.length ? T.leftBounds : v, A = null !== T.rightBounds && 4 === T.rightBounds.length ? T.rightBounds : y - } else g = v, A = y; - if (r = { - x: Math.round(E.width * g[0]), - y: Math.round(E.height * g[1]), - width: Math.round(E.width * g[2]), - height: Math.round(E.height * g[3]) - }, o = { - x: Math.round(E.width * A[0]), - y: Math.round(E.height * A[1]), - width: Math.round(E.width * A[2]), - height: Math.round(E.height * A[3]) - }, p ? (t.setRenderTarget(p), p.scissorTest = !0) : (t.setRenderTarget(null), t.setScissorTest(!0)), (t.autoClear || f) && t.clear(), null === i.parent && i.updateMatrixWorld(), i.matrixWorld.decompose(x.position, x.quaternion, x.scale), _.position.copy(x.position), _.quaternion.copy(x.quaternion), _.scale.copy(x.scale), n.getFrameData) n.depthNear = i.near, n.depthFar = i.far, n.getFrameData(u), x.projectionMatrix.elements = u.leftProjectionMatrix, _.projectionMatrix.elements = u.rightProjectionMatrix, - function(t) { - t.pose.orientation ? (b.fromArray(t.pose.orientation), l.makeRotationFromQuaternion(b)) : l.identity(); - t.pose.position && (w.fromArray(t.pose.position), l.setPosition(w)); - c.fromArray(t.leftViewMatrix), c.multiply(l), h.fromArray(t.rightViewMatrix), h.multiply(l), c.getInverse(c), h.getInverse(h) - }(u), x.updateMatrix(), x.matrix.multiply(c), x.matrix.decompose(x.position, x.quaternion, x.scale), _.updateMatrix(), _.matrix.multiply(h), _.matrix.decompose(_.position, _.quaternion, _.scale); - else { - var L = n.getEyeParameters("left"), - R = n.getEyeParameters("right"); - x.projectionMatrix = M(L.fieldOfView, !0, i.near, i.far), _.projectionMatrix = M(R.fieldOfView, !0, i.near, i.far), s.fromArray(L.offset), a.fromArray(R.offset), x.translateOnAxis(s, x.scale.x), _.translateOnAxis(a, _.scale.x) - } - return p ? (p.viewport.set(r.x, r.y, r.width, r.height), p.scissor.set(r.x, r.y, r.width, r.height)) : (t.setViewport(r.x, r.y, r.width, r.height), t.setScissor(r.x, r.y, r.width, r.height)), t.render(e, x, p, f), p ? (p.viewport.set(o.x, o.y, o.width, o.height), p.scissor.set(o.x, o.y, o.width, o.height)) : (t.setViewport(o.x, o.y, o.width, o.height), t.setScissor(o.x, o.y, o.width, o.height)), t.render(e, _, p, f), p ? (p.viewport.set(0, 0, E.width, E.height), p.scissor.set(0, 0, E.width, E.height), p.scissorTest = !1, t.setRenderTarget(null)) : (t.setViewport(0, 0, E.width, E.height), t.setScissorTest(!1)), m && (e.autoUpdate = !0), void(d.autoSubmitFrame && d.submitFrame()) - } - t.render(e, i, p, f) - }, this.dispose = function() { - window.removeEventListener("vrdisplaypresentchange", A, !1) - }; - var b = new S, - w = new T; - - function M(t, e, n, i) { - var r = Math.PI / 180; - return function(t, e, n, i) { - n = void 0 === n ? .01 : n, i = void 0 === i ? 1e4 : i; - var r = (e = void 0 === e || e) ? -1 : 1, - o = new et, - s = o.elements, - a = function(t) { - var e = 2 / (t.leftTan + t.rightTan), - n = (t.leftTan - t.rightTan) * e * .5, - i = 2 / (t.upTan + t.downTan); - return { - scale: [e, i], - offset: [n, (t.upTan - t.downTan) * i * .5] - } - }(t); - return s[0] = a.scale[0], s[1] = 0, s[2] = a.offset[0] * r, s[3] = 0, s[4] = 0, s[5] = a.scale[1], s[6] = -a.offset[1] * r, s[7] = 0, s[8] = 0, s[9] = 0, s[10] = i / (n - i) * -r, s[11] = i * n / (n - i), s[12] = 0, s[13] = 0, s[14] = r, s[15] = 0, o.transpose(), o - }({ - upTan: Math.tan(t.upDegrees * r), - downTan: Math.tan(t.downDegrees * r), - leftTan: Math.tan(t.leftDegrees * r), - rightTan: Math.tan(t.rightDegrees * r) - }, e, n, i) - } - }, - ul = function(t, e) { - var n, i, r, o, s; - this.object = t, this.domElement = void 0 !== e ? e : document, this.enabled = !0, this.target = new T, this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = .25, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !1, this.keyPanSpeed = 7, this.autoRotate = !1, this.autoRotateSpeed = 2, this.enableKeys = !0, this.keys = { - LEFT: 37, - UP: 38, - RIGHT: 39, - BOTTOM: 40 - }, this.mouseButtons = { - ORBIT: h, - ZOOM: u, - PAN: d - }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this.getPolarAngle = function() { - return y.phi - }, this.getAzimuthalAngle = function() { - return y.theta - }, this.saveState = function() { - a.target0.copy(a.target), a.position0.copy(a.object.position), a.zoom0 = a.object.zoom - }, this.reset = function() { - a.target.copy(a.target0), a.object.position.copy(a.position0), a.object.zoom = a.zoom0, a.object.updateProjectionMatrix(), a.dispatchEvent(l), a.update(), m = f.NONE - }, this.update = (n = new T, i = (new S).setFromUnitVectors(t.up, new T(0, 1, 0)), r = i.clone().inverse(), o = new T, s = new S, function() { - var t = a.object.position; - return n.copy(t).sub(a.target), n.applyQuaternion(i), y.setFromVector3(n), a.autoRotate && m === f.NONE && a.rotateLeft(2 * Math.PI / 60 / 60 * a.autoRotateSpeed), y.theta += A.theta, y.phi += A.phi, y.theta = Math.max(a.minAzimuthAngle, Math.min(a.maxAzimuthAngle, y.theta)), y.phi = Math.max(a.minPolarAngle, Math.min(a.maxPolarAngle, y.phi)), y.makeSafe(), y.radius *= x, y.radius = Math.max(a.minDistance, Math.min(a.maxDistance, y.radius)), a.target.add(_), n.setFromSpherical(y), n.applyQuaternion(r), t.copy(a.target).add(n), a.object.lookAt(a.target), !0 === a.enableDamping ? (A.theta *= 1 - a.dampingFactor, A.phi *= 1 - a.dampingFactor, _.multiplyScalar(1 - a.dampingFactor)) : (A.set(0, 0, 0), _.set(0, 0, 0)), x = 1, !!(b || o.distanceToSquared(a.object.position) > g || 8 * (1 - s.dot(a.object.quaternion)) > g) && (a.dispatchEvent(l), o.copy(a.object.position), s.copy(a.object.quaternion), b = !1, !0) - }), this.dispose = function() { - a.domElement.removeEventListener("contextmenu", Q, !1), a.domElement.removeEventListener("mousedown", G, !1), a.domElement.removeEventListener("wheel", W, !1), a.domElement.removeEventListener("touchstart", X, !1), a.domElement.removeEventListener("touchend", Y, !1), a.domElement.removeEventListener("touchmove", q, !1), document.removeEventListener("mousemove", V, !1), document.removeEventListener("mouseup", k, !1), window.removeEventListener("keydown", j, !1) - }; - var a = this, - l = { - type: "change" - }, - c = { - type: "start" - }, - p = { - type: "end" - }, - f = { - NONE: -1, - ROTATE: 0, - DOLLY: 1, - PAN: 2, - TOUCH_ROTATE: 3, - TOUCH_DOLLY_PAN: 4 - }, - m = f.NONE, - g = 1e-6, - y = new $a, - A = new $a, - x = 1, - _ = new T, - b = !1, - w = new v, - M = new v, - E = new v, - L = new v, - R = new v, - C = new v, - P = new v, - D = new v, - I = new v; - - function O() { - return Math.pow(.95, a.zoomSpeed) - } - a.rotateLeft = function(t) { - A.theta -= t - }, a.rotateUp = function(t) { - A.phi -= t - }; - var N, B = (N = new T, function(t, e) { - N.setFromMatrixColumn(e, 0), N.multiplyScalar(-t), _.add(N) - }), - F = function() { - var t = new T; - return function(e, n) { - !0 === a.screenSpacePanning ? t.setFromMatrixColumn(n, 1) : (t.setFromMatrixColumn(n, 0), t.crossVectors(a.object.up, t)), t.multiplyScalar(e), _.add(t) - } - }(), - z = function() { - var t = new T; - return function(e, n) { - var i = a.domElement === document ? a.domElement.body : a.domElement; - if (a.object.isPerspectiveCamera) { - var r = a.object.position; - t.copy(r).sub(a.target); - var o = t.length(); - o *= Math.tan(a.object.fov / 2 * Math.PI / 180), B(2 * e * o / i.clientHeight, a.object.matrix), F(2 * n * o / i.clientHeight, a.object.matrix) - } else a.object.isOrthographicCamera ? (B(e * (a.object.right - a.object.left) / a.object.zoom / i.clientWidth, a.object.matrix), F(n * (a.object.top - a.object.bottom) / a.object.zoom / i.clientHeight, a.object.matrix)) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."), a.enablePan = !1) - } - }(); - - function U(t) { - a.object.isPerspectiveCamera ? x /= t : a.object.isOrthographicCamera ? (a.object.zoom = Math.max(a.minZoom, Math.min(a.maxZoom, a.object.zoom * t)), a.object.updateProjectionMatrix(), b = !0) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), a.enableZoom = !1) - } - - function H(t) { - a.object.isPerspectiveCamera ? x *= t : a.object.isOrthographicCamera ? (a.object.zoom = Math.max(a.minZoom, Math.min(a.maxZoom, a.object.zoom / t)), a.object.updateProjectionMatrix(), b = !0) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), a.enableZoom = !1) - } - - function G(t) { - if (!1 !== a.enabled) { - switch (t.preventDefault(), t.button) { - case a.mouseButtons.ORBIT: - if (!1 === a.enableRotate) return; - ! function(t) { - w.set(t.clientX, t.clientY) - }(t), m = f.ROTATE; - break; - case a.mouseButtons.ZOOM: - if (!1 === a.enableZoom) return; - ! function(t) { - P.set(t.clientX, t.clientY) - }(t), m = f.DOLLY; - break; - case a.mouseButtons.PAN: - if (!1 === a.enablePan) return; - ! function(t) { - L.set(t.clientX, t.clientY) - }(t), m = f.PAN - } - m !== f.NONE && (document.addEventListener("mousemove", V, !1), document.addEventListener("mouseup", k, !1), a.dispatchEvent(c)) - } - } - - function V(t) { - if (!1 !== a.enabled) switch (t.preventDefault(), m) { - case f.ROTATE: - if (!1 === a.enableRotate) return; - ! function(t) { - M.set(t.clientX, t.clientY), E.subVectors(M, w).multiplyScalar(a.rotateSpeed); - var e = a.domElement === document ? a.domElement.body : a.domElement; - a.rotateLeft(2 * Math.PI * E.x / e.clientHeight), a.rotateUp(2 * Math.PI * E.y / e.clientHeight), w.copy(M), a.update() - }(t); - break; - case f.DOLLY: - if (!1 === a.enableZoom) return; - ! function(t) { - D.set(t.clientX, t.clientY), I.subVectors(D, P), I.y > 0 ? U(O()) : I.y < 0 && H(O()), P.copy(D), a.update() - }(t); - break; - case f.PAN: - if (!1 === a.enablePan) return; - ! function(t) { - R.set(t.clientX, t.clientY), C.subVectors(R, L).multiplyScalar(a.panSpeed), z(C.x, C.y), L.copy(R), a.update() - }(t) - } - } - - function k(t) { - !1 !== a.enabled && (document.removeEventListener("mousemove", V, !1), document.removeEventListener("mouseup", k, !1), a.dispatchEvent(p), m = f.NONE) - } - - function W(t) { - !1 === a.enabled || !1 === a.enableZoom || m !== f.NONE && m !== f.ROTATE || (t.preventDefault(), t.stopPropagation(), a.dispatchEvent(c), function(t) { - t.deltaY < 0 ? H(O()) : t.deltaY > 0 && U(O()), a.update() - }(t), a.dispatchEvent(p)) - } - - function j(t) { - !1 !== a.enabled && !1 !== a.enableKeys && !1 !== a.enablePan && function(t) { - switch (t.keyCode) { - case a.keys.UP: - z(0, a.keyPanSpeed), a.update(); - break; - case a.keys.BOTTOM: - z(0, -a.keyPanSpeed), a.update(); - break; - case a.keys.LEFT: - z(a.keyPanSpeed, 0), a.update(); - break; - case a.keys.RIGHT: - z(-a.keyPanSpeed, 0), a.update() - } - }(t) - } - - function X(t) { - if (!1 !== a.enabled) { - switch (t.preventDefault(), t.touches.length) { - case 1: - if (!1 === a.enableRotate) return; - ! function(t) { - w.set(t.touches[0].pageX, t.touches[0].pageY) - }(t), m = f.TOUCH_ROTATE; - break; - case 2: - if (!1 === a.enableZoom && !1 === a.enablePan) return; - ! function(t) { - if (a.enableZoom) { - var e = t.touches[0].pageX - t.touches[1].pageX, - n = t.touches[0].pageY - t.touches[1].pageY, - i = Math.sqrt(e * e + n * n); - P.set(0, i) - } - if (a.enablePan) { - var r = .5 * (t.touches[0].pageX + t.touches[1].pageX), - o = .5 * (t.touches[0].pageY + t.touches[1].pageY); - L.set(r, o) - } - }(t), m = f.TOUCH_DOLLY_PAN; - break; - default: - m = f.NONE - } - m !== f.NONE && a.dispatchEvent(c) - } - } - - function q(t) { - if (!1 !== a.enabled) switch (t.preventDefault(), t.stopPropagation(), t.touches.length) { - case 1: - if (!1 === a.enableRotate) return; - if (m !== f.TOUCH_ROTATE) return; - ! function(t) { - M.set(t.touches[0].pageX, t.touches[0].pageY), E.subVectors(M, w).multiplyScalar(a.rotateSpeed); - var e = a.domElement === document ? a.domElement.body : a.domElement; - a.rotateLeft(2 * Math.PI * E.x / e.clientHeight), a.rotateUp(2 * Math.PI * E.y / e.clientHeight), w.copy(M), a.update() - }(t); - break; - case 2: - if (!1 === a.enableZoom && !1 === a.enablePan) return; - if (m !== f.TOUCH_DOLLY_PAN) return; - ! function(t) { - if (a.enableZoom) { - var e = t.touches[0].pageX - t.touches[1].pageX, - n = t.touches[0].pageY - t.touches[1].pageY, - i = Math.sqrt(e * e + n * n); - D.set(0, i), I.set(0, Math.pow(D.y / P.y, a.zoomSpeed)), U(I.y), P.copy(D) - } - if (a.enablePan) { - var r = .5 * (t.touches[0].pageX + t.touches[1].pageX), - o = .5 * (t.touches[0].pageY + t.touches[1].pageY); - R.set(r, o), C.subVectors(R, L).multiplyScalar(a.panSpeed), z(C.x, C.y), L.copy(R) - } - a.update() - }(t); - break; - default: - m = f.NONE - } - } - - function Y(t) { - !1 !== a.enabled && (a.dispatchEvent(p), m = f.NONE) - } - - function Q(t) { - !1 !== a.enabled && t.preventDefault() - } - a.domElement.addEventListener("mousedown", G, !1), a.domElement.addEventListener("wheel", W, !1), a.domElement.addEventListener("touchstart", X, !1), a.domElement.addEventListener("touchend", Y, !1), a.domElement.addEventListener("touchmove", q, !1), window.addEventListener("keydown", j, !1), this.update() - }; - (ul.prototype = Object.create(p.prototype)).constructor = ul, Object.defineProperties(ul.prototype, { - center: { - get: function() { - return console.warn("THREE.OrbitControls: .center has been renamed to .target"), this.target - } - }, - noZoom: { - get: function() { - return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."), !this.enableZoom - }, - set: function(t) { - console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."), this.enableZoom = !t - } - }, - noRotate: { - get: function() { - return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."), !this.enableRotate - }, - set: function(t) { - console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."), this.enableRotate = !t - } - }, - noPan: { - get: function() { - return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."), !this.enablePan - }, - set: function(t) { - console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."), this.enablePan = !t - } - }, - noKeys: { - get: function() { - return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."), !this.enableKeys - }, - set: function(t) { - console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."), this.enableKeys = !t - } - }, - staticMoving: { - get: function() { - return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."), !this.enableDamping - }, - set: function(t) { - console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."), this.enableDamping = !t - } - }, - dynamicDampingFactor: { - get: function() { - return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."), this.dampingFactor - }, - set: function(t) { - console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."), this.dampingFactor = t - } - } - }); - var dl = function(t) { - var e = this; - this.object = t, this.object.rotation.reorder("YXZ"), this.enabled = !0, this.deviceOrientation = {}, this.screenOrientation = 0, this.alphaOffset = 0; - var n, i, r, o, s = function(t) { - e.deviceOrientation = t - }, - a = function() { - e.screenOrientation = window.orientation || 0 - }, - l = (n = new T(0, 0, 1), i = new ct, r = new S, o = new S(-Math.sqrt(.5), 0, 0, Math.sqrt(.5)), function(t, e, s, a, l) { - i.set(s, e, -a, "YXZ"), t.setFromEuler(i), t.multiply(o), t.multiply(r.setFromAxisAngle(n, -l)) - }); - this.connect = function() { - a(), window.addEventListener("orientationchange", a, !1), window.addEventListener("deviceorientation", s, !1), e.enabled = !0 - }, this.disconnect = function() { - window.removeEventListener("orientationchange", a, !1), window.removeEventListener("deviceorientation", s, !1), e.enabled = !1 - }, this.update = function() { - if (!1 !== e.enabled) { - var t = e.deviceOrientation; - if (t) { - var n = t.alpha ? g.degToRad(t.alpha) + e.alphaOffset : 0, - i = t.beta ? g.degToRad(t.beta) : 0, - r = t.gamma ? g.degToRad(t.gamma) : 0, - o = e.screenOrientation ? g.degToRad(e.screenOrientation) : 0; - l(e.object.quaternion, n, i, r, o) - } - } - }, this.dispose = function() { - e.disconnect() - }, this.connect() - }; - var pl, fl = function() { - function t(t) { - this.object = t.camera, this.domElement = t.canvas, this.orbit = new ul(this.object, this.domElement), this.speed = .5, this.orbit.target.set(0, 0, -1), this.orbit.enableZoom = !1, this.orbit.enablePan = !1, this.orbit.rotateSpeed = -this.speed, t.orientation && (this.orientation = new dl(this.object)), t.halfView && (this.orbit.minAzimuthAngle = -Math.PI / 4, this.orbit.maxAzimuthAngle = Math.PI / 4) - } - var e = t.prototype; - return e.update = function() { - if (this.orientation) { - this.orientation.update(); - var t = this.orientation.object.quaternion, - e = function(t, e, n, i) { - var r = t * e + n * i; - if (r > .499) { - var o = 2 * Math.atan2(t, i), - s = Math.PI / 2; - return new T(s, 0, o) - } - if (r < -.499) { - var a = -2 * Math.atan2(t, i), - l = -Math.PI / 2; - return new T(l, 0, a) - } - var c = t * t, - h = e * e, - u = n * n, - d = Math.atan2(2 * e * i - 2 * t * n, 1 - 2 * h - 2 * u), - p = Math.asin(2 * r), - f = Math.atan2(2 * t * i - 2 * e * n, 1 - 2 * c - 2 * u); - return new T(p, f, d) - }(t.x, t.y, t.z, t.w); - void 0 === this.lastAngle_ && (this.lastAngle_ = e), this.orbit.rotateLeft((this.lastAngle_.z - e.z) * (1 + this.speed)), this.orbit.rotateUp((this.lastAngle_.y - e.y) * (1 + this.speed)), this.lastAngle_ = e - } - this.orbit.update() - }, e.dispose = function() { - this.orbit.dispose(), this.orientation && this.orientation.dispose() - }, t - }(), - ml = ((pl = e.createElement("video")).crossOrigin = "anonymous", pl.hasAttribute("crossorigin")), - gl = ["360", "360_LR", "360_TB", "360_CUBE", "EAC", "EAC_LR", "NONE", "AUTO", "Sphere", "Cube", "equirectangular", "180", "180_LR", "180_MONO"], - vl = function(t) { - if (t) { - if (t = t.toString().trim(), /sphere/i.test(t)) return "360"; - if (/cube/i.test(t)) return "360_CUBE"; - if (/equirectangular/i.test(t)) return "360"; - for (var e = 0; e < gl.length; e++) - if (new RegExp("^" + gl[e] + "$", "i").test(t)) return gl[e] - } - }, - yl = function(t) { - function e(e, i, r) { - var o; - return (o = t.call(this) || this).player = e, o.canvas = i, o.options = r, o.onMoveEnd = n.bind(s(o), o.onMoveEnd), o.onMoveStart = n.bind(s(o), o.onMoveStart), o.onMove = n.bind(s(o), o.onMove), o.onControlBarMove = n.bind(s(o), o.onControlBarMove), o.player.controlBar.on(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"], o.onControlBarMove), o.oldReportUserActivity = o.player.reportUserActivity, o.player.reportUserActivity = function() {}, o.canvas.addEventListener("mousedown", o.onMoveStart), o.canvas.addEventListener("touchstart", o.onMoveStart), o.canvas.addEventListener("mousemove", o.onMove), o.canvas.addEventListener("touchmove", o.onMove), o.canvas.addEventListener("mouseup", o.onMoveEnd), o.canvas.addEventListener("touchend", o.onMoveEnd), o.shouldTogglePlay = !1, o - } - l(e, t); - var i = e.prototype; - return i.togglePlay = function() { - this.player.paused() ? this.player.play() : this.player.pause() - }, i.onMoveStart = function(t) { - this.options.disableTogglePlay || !this.player.controls() || "mousedown" === t.type && !n.dom.isSingleLeftClick(t) ? this.shouldTogglePlay = !1 : (this.shouldTogglePlay = !0, this.touchMoveCount_ = 0) - }, i.onMoveEnd = function(t) { - if ("touchend" === t.type && this.touchMoveCount_ < 10) return !1 === this.player.userActive() ? void this.player.userActive(!0) : void this.player.userActive(!1); - this.shouldTogglePlay && "mouseup" === t.type && this.togglePlay() - }, i.onMove = function(t) { - this.touchMoveCount_++, this.shouldTogglePlay = !1 - }, i.onControlBarMove = function(t) { - this.player.userActive(!0) - }, i.dispose = function() { - this.canvas.removeEventListener("mousedown", this.onMoveStart), this.canvas.removeEventListener("touchstart", this.onMoveStart), this.canvas.removeEventListener("mousemove", this.onMove), this.canvas.removeEventListener("touchmove", this.onMove), this.canvas.removeEventListener("mouseup", this.onMoveEnd), this.canvas.removeEventListener("touchend", this.onMoveEnd), this.player.controlBar.off(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"], this.onControlBarMove), this.player.reportUserActivity = this.oldReportUserActivity - }, e - }(n.EventTarget), - Al = function(t) { - function e(e, i, r, o) { - var s; - s = t.call(this) || this; - var a = n.mergeOptions({ - channelMap: n.browser.IS_SAFARI ? [2, 0, 1, 3] : [0, 1, 2, 3], - ambisonicOrder: 1 - }, o); - return s.videoElementSource = e.createMediaElementSource(r), s.foaRenderer = i.createFOARenderer(e, a), s.foaRenderer.initialize().then((function() { - "suspended" === e.state && s.trigger({ - type: "audiocontext-suspended" - }), s.videoElementSource.connect(s.foaRenderer.input), s.foaRenderer.output.connect(e.destination), s.initialized = !0, s.trigger({ - type: "omnitone-ready" - }) - }), (function(t) { - n.log.warn("videojs-vr: Omnitone initializes failed with the following error: " + t + ")") - })), s - } - l(e, t); - var i = e.prototype; - return i.update = function(t) { - this.initialized && this.foaRenderer.setRotationMatrixFromCamera(t.matrix) - }, i.dispose = function() { - this.initialized = !1, this.foaRenderer.setRenderingMode("bypass"), this.foaRenderer = null - }, e - }(n.EventTarget), - xl = function(e) { - function i(i, r) { - var o; - return (o = e.call(this, i, r) || this).handleVrDisplayActivate_ = n.bind(s(o), o.handleVrDisplayActivate_), o.handleVrDisplayDeactivate_ = n.bind(s(o), o.handleVrDisplayDeactivate_), o.handleVrDisplayPresentChange_ = n.bind(s(o), o.handleVrDisplayPresentChange_), o.handleOrientationChange_ = n.bind(s(o), o.handleOrientationChange_), t.addEventListener("orientationchange", o.handleOrientationChange_), t.addEventListener("vrdisplayactivate", o.handleVrDisplayActivate_), t.addEventListener("vrdisplaydeactivate", o.handleVrDisplayDeactivate_), t.addEventListener("vrdisplaypresentchange", o.handleVrDisplayPresentChange_), n.browser.IS_ANDROID && o.on(i, "fullscreenchange", (function() { - i.isFullscreen() ? o.hide() : o.show() - })), o - } - l(i, e); - var r = i.prototype; - return r.buildCSSClass = function() { - return "vjs-button-vr " + e.prototype.buildCSSClass.call(this) - }, r.handleVrDisplayPresentChange_ = function() { - !this.player_.vr().vrDisplay.isPresenting && this.active_ && this.handleVrDisplayDeactivate_(), this.player_.vr().vrDisplay.isPresenting && !this.active_ && this.handleVrDisplayActivate_() - }, r.handleOrientationChange_ = function() { - this.active_ && n.browser.IS_IOS && this.changeSize_() - }, r.changeSize_ = function() { - this.player_.width(t.innerWidth), this.player_.height(t.innerHeight), t.dispatchEvent(new t.Event("resize")) - }, r.handleVrDisplayActivate_ = function() { - n.browser.IS_IOS && (this.oldWidth_ = this.player_.currentWidth(), this.oldHeight_ = this.player_.currentHeight(), this.player_.enterFullWindow(), this.changeSize_()), this.active_ = !0 - }, r.handleVrDisplayDeactivate_ = function() { - n.browser.IS_IOS && (this.oldWidth_ && this.player_.width(this.oldWidth_), this.oldHeight_ && this.player_.height(this.oldHeight_), this.player_.exitFullWindow()), this.active_ = !1 - }, r.handleClick = function(e) { - this.active_ ? t.dispatchEvent(new t.Event("vrdisplaydeactivate")) : (!this.player_.hasStarted() && n.browser.IS_ANDROID && this.player_.play(), t.dispatchEvent(new t.Event("vrdisplayactivate"))) - }, r.dispose = function() { - e.prototype.dispose.call(this), t.removeEventListener("vrdisplayactivate", this.handleVrDisplayActivate_), t.removeEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_), t.removeEventListener("vrdisplaypresentchange", this.handleVrDisplayPresentChange_) - }, i - }(n.getComponent("Button")); - n.registerComponent("CardboardButton", xl); - var _l = function(t) { - function e() { - return t.apply(this, arguments) || this - } - return l(e, t), e.prototype.buildCSSClass = function() { - return "vjs-big-vr-play-button " + t.prototype.buildCSSClass.call(this) - }, e - }(n.getComponent("BigPlayButton")); - - function bl(t, e) { - var n = "undefined" != typeof Symbol && t[Symbol.iterator] || t["@@iterator"]; - if (n) return (n = n.call(t)).next.bind(n); - if (Array.isArray(t) || (n = function(t, e) { - if (!t) return; - if ("string" == typeof t) return wl(t, e); - var n = Object.prototype.toString.call(t).slice(8, -1); - "Object" === n && t.constructor && (n = t.constructor.name); - if ("Map" === n || "Set" === n) return Array.from(t); - if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return wl(t, e) - }(t)) || e && t && "number" == typeof t.length) { - n && (t = n); - var i = 0; - return function() { - return i >= t.length ? { - done: !0 - } : { - done: !1, - value: t[i++] - } - } - } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.") - } - - function wl(t, e) { - (null == e || e > t.length) && (e = t.length); - for (var n = 0, i = new Array(e); n < e; n++) i[n] = t[n]; - return i - } - n.registerComponent("BigVrPlayButton", _l); - var Ml = { - debug: !1, - omnitone: !1, - forceCardboard: !1, - omnitoneOptions: {}, - projection: "AUTO", - sphereDetail: 32, - disableTogglePlay: !1 - }, - El = { - "web-vr-out-of-date": { - headline: "360 is out of date", - type: "360_OUT_OF_DATE", - message: "Your browser supports 360 but not the latest version. See http://webvr.info for more info." - }, - "web-vr-not-supported": { - headline: "360 not supported on this device", - type: "360_NOT_SUPPORTED", - message: "Your browser does not support 360. See http://webvr.info for assistance." - }, - "web-vr-hls-cors-not-supported": { - headline: "360 HLS video not supported on this device", - type: "360_NOT_SUPPORTED", - message: "Your browser/device does not support HLS 360 video. See http://webvr.info for assistance." - } - }, - Sl = n.getPlugin("plugin"), - Tl = n.getComponent("Component"), - Ll = function(i) { - function r(t, e) { - var r, o = n.mergeOptions(Ml, e); - return (r = i.call(this, t, o) || this).options_ = o, r.player_ = t, r.bigPlayButtonIndex_ = t.children().indexOf(t.getChild("BigPlayButton")) || 0, r.videojsErrorsSupport_ = !!n.errors, r.videojsErrorsSupport_ && t.errors({ - errors: El - }), n.browser.IE_VERSION || !ml ? (r.player_.on("loadstart", (function() { - r.triggerError_({ - code: "web-vr-not-supported", - dismiss: !1 - }) - })), s(r)) : (r.polyfill_ = new c({ - ROTATE_INSTRUCTIONS_DISABLED: !0 - }), r.polyfill_ = new c, r.handleVrDisplayActivate_ = n.bind(s(r), r.handleVrDisplayActivate_), r.handleVrDisplayDeactivate_ = n.bind(s(r), r.handleVrDisplayDeactivate_), r.handleResize_ = n.bind(s(r), r.handleResize_), r.animate_ = n.bind(s(r), r.animate_), r.setProjection(r.options_.projection), r.on(t, "adstart", (function() { - return t.setTimeout((function() { - t.ads && t.ads.videoElementRecycled() ? (r.log("video element recycled for this ad, reseting"), r.reset(), r.one(t, "playing", r.init)) : r.log("video element not recycled for this ad, no need to reset") - })) - }), 1), r.on(t, "loadedmetadata", r.init), r) - } - l(r, i); - var o = r.prototype; - return o.changeProjection_ = function(t) { - var e = this; - (t = vl(t)) || (t = "NONE"); - var n = 0, - i = 0, - r = 0; - if (this.scene && this.scene.remove(this.movieScreen), "AUTO" === t) { - if (this.player_.mediainfo && this.player_.mediainfo.projection && "AUTO" !== this.player_.mediainfo.projection) { - var o = vl(this.player_.mediainfo.projection); - return this.changeProjection_(o) - } - return this.changeProjection_("NONE") - } - if ("360" === t) this.movieGeometry = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0, - side: 1 - }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.position.set(n, i, r), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ - x: 0, - y: 1, - z: 0 - }, -Math.PI / 2), this.scene.add(this.movieScreen); - else if ("360_LR" === t || "360_TB" === t) { - for (var s = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail), a = s.faceVertexUvs[0], l = 0; l < a.length; l++) - for (var c = 0; c < 3; c++) "360_LR" === t ? a[l][c].x *= .5 : (a[l][c].y *= .5, a[l][c].y += .5); - this.movieGeometry = (new be).fromGeometry(s), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0, - side: 1 - }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ - x: 0, - y: 1, - z: 0 - }, -Math.PI / 2), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), a = (s = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail)).faceVertexUvs[0]; - for (var h = 0; h < a.length; h++) - for (var u = 0; u < 3; u++) "360_LR" === t ? (a[h][u].x *= .5, a[h][u].x += .5) : a[h][u].y *= .5; - this.movieGeometry = (new be).fromGeometry(s), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0, - side: 1 - }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({ - x: 0, - y: 1, - z: 0 - }, -Math.PI / 2), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) - } else if ("360_CUBE" === t) { - this.movieGeometry = new Ve(256, 256, 256), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0, - side: 1 - }); - var d = [new v(0, .5), new v(.333, .5), new v(.333, 1), new v(0, 1)], - p = [new v(.333, .5), new v(.666, .5), new v(.666, 1), new v(.333, 1)], - f = [new v(.666, .5), new v(1, .5), new v(1, 1), new v(.666, 1)], - m = [new v(0, 0), new v(.333, 0), new v(.333, .5), new v(0, .5)], - g = [new v(.333, 0), new v(.666, 0), new v(.666, .5), new v(.333, .5)], - A = [new v(.666, 0), new v(1, 0), new v(1, .5), new v(.666, .5)]; - this.movieGeometry.faceVertexUvs[0] = [], this.movieGeometry.faceVertexUvs[0][0] = [p[2], p[1], p[3]], this.movieGeometry.faceVertexUvs[0][1] = [p[1], p[0], p[3]], this.movieGeometry.faceVertexUvs[0][2] = [d[2], d[1], d[3]], this.movieGeometry.faceVertexUvs[0][3] = [d[1], d[0], d[3]], this.movieGeometry.faceVertexUvs[0][4] = [f[2], f[1], f[3]], this.movieGeometry.faceVertexUvs[0][5] = [f[1], f[0], f[3]], this.movieGeometry.faceVertexUvs[0][6] = [m[2], m[1], m[3]], this.movieGeometry.faceVertexUvs[0][7] = [m[1], m[0], m[3]], this.movieGeometry.faceVertexUvs[0][8] = [g[2], g[1], g[3]], this.movieGeometry.faceVertexUvs[0][9] = [g[1], g[0], g[3]], this.movieGeometry.faceVertexUvs[0][10] = [A[2], A[1], A[3]], this.movieGeometry.faceVertexUvs[0][11] = [A[1], A[0], A[3]], this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.position.set(n, i, r), this.movieScreen.rotation.y = -Math.PI, this.scene.add(this.movieScreen) - } else if ("180" === t || "180_LR" === t || "180_MONO" === t) { - var x = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail, Math.PI, Math.PI); - x.scale(-1, 1, 1); - var _ = x.faceVertexUvs[0]; - if ("180_MONO" !== t) - for (var b = 0; b < _.length; b++) - for (var w = 0; w < 3; w++) _[b][w].x *= .5; - this.movieGeometry = (new be).fromGeometry(x), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0 - }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), (x = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail, Math.PI, Math.PI)).scale(-1, 1, 1), _ = x.faceVertexUvs[0]; - for (var M = 0; M < _.length; M++) - for (var E = 0; E < 3; E++) _[M][E].x *= .5, _[M][E].x += .5; - this.movieGeometry = (new be).fromGeometry(x), this.movieMaterial = new Kt({ - map: this.videoTexture, - overdraw: !0 - }), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) - } else if ("EAC" === t || "EAC_LR" === t) { - var S = function(t, o) { - e.movieGeometry = new Ve(256, 256, 256), e.movieMaterial = new Xe({ - overdraw: !0, - side: 1, - uniforms: { - mapped: { - value: e.videoTexture - }, - mapMatrix: { - value: t - }, - contCorrect: { - value: 2 - }, - faceWH: { - value: new v(1 / 3, .5).applyMatrix3(o) - }, - vidWH: { - value: new v(e.videoTexture.image.videoWidth, e.videoTexture.image.videoHeight).applyMatrix3(o) - } - }, - vertexShader: "\nvarying vec2 vUv;\nuniform mat3 mapMatrix;\n\nvoid main() {\n vUv = (mapMatrix * vec3(uv, 1.)).xy;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.);\n}", - fragmentShader: "\nvarying vec2 vUv;\nuniform sampler2D mapped;\nuniform vec2 faceWH;\nuniform vec2 vidWH;\nuniform float contCorrect;\n\nconst float PI = 3.1415926535897932384626433832795;\n\nvoid main() {\n vec2 corner = vUv - mod(vUv, faceWH) + vec2(0, contCorrect / vidWH.y);\n\n vec2 faceWHadj = faceWH - vec2(0, contCorrect * 2. / vidWH.y);\n\n vec2 p = (vUv - corner) / faceWHadj - .5;\n vec2 q = 2. / PI * atan(2. * p) + .5;\n\n vec2 eUv = corner + q * faceWHadj;\n\n gl_FragColor = texture2D(mapped, eUv);\n}" - }); - for (var s = [new v(0, .5), new v(1 / 3, .5), new v(1 / 3, 1), new v(0, 1)], a = [new v(1 / 3, .5), new v(2 / 3, .5), new v(2 / 3, 1), new v(1 / 3, 1)], l = [new v(2 / 3, .5), new v(1, .5), new v(1, 1), new v(2 / 3, 1)], c = [new v(1 / 3, 0), new v(1 / 3, .5), new v(0, .5), new v(0, 0)], h = [new v(1 / 3, .5), new v(1 / 3, 0), new v(2 / 3, 0), new v(2 / 3, .5)], u = [new v(1, 0), new v(1, .5), new v(2 / 3, .5), new v(2 / 3, 0)], d = 0, p = [s, a, l, c, h, u]; d < p.length; d++) { - for (var f, m = p[d], g = e.videoTexture.image.videoHeight, y = 1, A = 0, x = bl(m); !(f = x()).done;) { - var _ = f.value; - _.y < y && (y = _.y), _.y > A && (A = _.y) - } - for (var b, w = bl(m); !(b = w()).done;) { - var M = b.value; - Math.abs(M.y - y) < Number.EPSILON && (M.y += 2 / g), Math.abs(M.y - A) < Number.EPSILON && (M.y -= 2 / g), M.x = M.x / g * (g - 4) + 2 / g - } - } - return e.movieGeometry.faceVertexUvs[0] = [], e.movieGeometry.faceVertexUvs[0][0] = [s[2], s[1], s[3]], e.movieGeometry.faceVertexUvs[0][1] = [s[1], s[0], s[3]], e.movieGeometry.faceVertexUvs[0][2] = [l[2], l[1], l[3]], e.movieGeometry.faceVertexUvs[0][3] = [l[1], l[0], l[3]], e.movieGeometry.faceVertexUvs[0][4] = [u[2], u[1], u[3]], e.movieGeometry.faceVertexUvs[0][5] = [u[1], u[0], u[3]], e.movieGeometry.faceVertexUvs[0][6] = [c[2], c[1], c[3]], e.movieGeometry.faceVertexUvs[0][7] = [c[1], c[0], c[3]], e.movieGeometry.faceVertexUvs[0][8] = [a[2], a[1], a[3]], e.movieGeometry.faceVertexUvs[0][9] = [a[1], a[0], a[3]], e.movieGeometry.faceVertexUvs[0][10] = [h[2], h[1], h[3]], e.movieGeometry.faceVertexUvs[0][11] = [h[1], h[0], h[3]], e.movieScreen = new He(e.movieGeometry, e.movieMaterial), e.movieScreen.position.set(n, i, r), e.movieScreen.rotation.y = -Math.PI, e.movieScreen - }; - if ("EAC" === t) this.scene.add(S(new y, new y)); - else { - var T = (new y).set(0, .5, 0, 1, 0, 0, 0, 0, 1); - S((new y).set(0, -.5, .5, 1, 0, 0, 0, 0, 1), T), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), S((new y).set(0, -.5, 1, 1, 0, 0, 0, 0, 1), T), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen) - } - } - this.currentProjection_ = t - }, o.triggerError_ = function(t) { - if (this.videojsErrorsSupport_) this.player_.error(t); - else { - var n = e.createElement("div"); - n.innerHTML = El[t.code].message; - var i = n.textContent || n.innerText || ""; - this.player_.error({ - code: t.code, - message: i - }) - } - }, o.log = function() { - if (this.options_.debug) { - for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) e[i] = arguments[i]; - e.forEach((function(t) { - n.log("VR: ", t) - })) - } - }, o.handleVrDisplayActivate_ = function() { - var e = this; - this.vrDisplay && this.vrDisplay.requestPresent([{ - source: this.renderedCanvas - }]).then((function() { - if (e.vrDisplay.cardboardUI_ && n.browser.IS_IOS) { - var i = [], - r = function(t) { - for (var e = 0; e < t.touches.length; e++) i.push(t.touches[e]) - }, - o = function(n) { - i.length && (i.forEach((function(n) { - var i = new t.MouseEvent("click", { - screenX: n.screenX, - screenY: n.screenY, - clientX: n.clientX, - clientY: n.clientY - }); - e.renderedCanvas.dispatchEvent(i) - })), i = []) - }; - e.renderedCanvas.addEventListener("touchstart", r), e.renderedCanvas.addEventListener("touchend", o), e.iosRevertTouchToClick_ = function() { - e.renderedCanvas.removeEventListener("touchstart", r), e.renderedCanvas.removeEventListener("touchend", o), e.iosRevertTouchToClick_ = null - } - } - })) - }, o.handleVrDisplayDeactivate_ = function() { - this.vrDisplay && this.vrDisplay.isPresenting && (this.iosRevertTouchToClick_ && this.iosRevertTouchToClick_(), this.vrDisplay.exitPresent()) - }, o.requestAnimationFrame = function(t) { - return this.vrDisplay ? this.vrDisplay.requestAnimationFrame(t) : this.player_.requestAnimationFrame(t) - }, o.cancelAnimationFrame = function(t) { - return this.vrDisplay ? this.vrDisplay.cancelAnimationFrame(t) : this.player_.cancelAnimationFrame(t) - }, o.togglePlay_ = function() { - this.player_.paused() ? this.player_.play() : this.player_.pause() - }, o.animate_ = function() { - if (this.initialized_) { - if (this.getVideoEl_().readyState === this.getVideoEl_().HAVE_ENOUGH_DATA && this.videoTexture && (this.videoTexture.needsUpdate = !0), this.controls3d.update(), this.omniController && this.omniController.update(this.camera), this.effect.render(this.scene, this.camera), t.navigator.getGamepads) - for (var e = t.navigator.getGamepads(), n = 0; n < e.length; ++n) { - var i = e[n]; - if (i && i.timestamp && i.timestamp !== this.prevTimestamps_[n]) - for (var r = 0; r < i.buttons.length; ++r) - if (i.buttons[r].pressed) { - this.togglePlay_(), this.prevTimestamps_[n] = i.timestamp; - break - } - } - this.camera.getWorldDirection(this.cameraVector), this.animationFrameId_ = this.requestAnimationFrame(this.animate_) - } - }, o.handleResize_ = function() { - var t = this.player_.currentWidth(), - e = this.player_.currentHeight(); - this.effect.setSize(t, e, !1), this.camera.aspect = t / e, this.camera.updateProjectionMatrix() - }, o.setProjection = function(t) { - vl(t) ? (this.currentProjection_ = t, this.defaultProjection_ = t) : n.log.error("videojs-vr: please pass a valid projection " + gl.join(", ")) - }, o.init = function() { - var e = this; - if (this.reset(), this.camera = new Ye(75, this.player_.currentWidth() / this.player_.currentHeight(), 1, 1e3), this.cameraVector = new T, "360_LR" !== this.currentProjection_ && "360_TB" !== this.currentProjection_ && "180" !== this.currentProjection_ && "180_LR" !== this.currentProjection_ && "180_MONO" !== this.currentProjection_ && "EAC_LR" !== this.currentProjection_ || this.camera.layers.enable(1), this.scene = new ur, this.videoTexture = new fo(this.getVideoEl_()), this.videoTexture.generateMipmaps = !1, this.videoTexture.minFilter = 1006, this.videoTexture.magFilter = 1006, this.videoTexture.format = 1022, this.changeProjection_(this.currentProjection_), "NONE" === this.currentProjection_) return this.log("Projection is NONE, dont init"), void this.reset(); - this.player_.removeChild("BigPlayButton"), this.player_.addChild("BigVrPlayButton", {}, this.bigPlayButtonIndex_), this.player_.bigPlayButton = this.player_.getChild("BigVrPlayButton"), (this.options_.forceCardboard || n.browser.IS_ANDROID || n.browser.IS_IOS) && this.addCardboardButton_(), n.browser.IS_IOS && this.player_.controlBar && this.player_.controlBar.fullscreenToggle && this.player_.controlBar.fullscreenToggle.hide(), this.camera.position.set(0, 0, 0), this.renderer = new cr({ - devicePixelRatio: t.devicePixelRatio, - alpha: !1, - clearColor: 16777215, - antialias: !0 - }); - var i = this.renderer.getContext("webgl"), - r = i.texImage2D; - i.texImage2D = function() { - try { - for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++) n[o] = arguments[o]; - return r.apply(i, n) - } catch (t) { - throw e.reset(), e.player_.pause(), e.triggerError_({ - code: "web-vr-hls-cors-not-supported", - dismiss: !1 - }), new Error(t) - } - }, this.renderer.setSize(this.player_.currentWidth(), this.player_.currentHeight(), !1), this.effect = new hl(this.renderer), this.effect.setSize(this.player_.currentWidth(), this.player_.currentHeight(), !1), this.vrDisplay = null, this.prevTimestamps_ = [], this.renderedCanvas = this.renderer.domElement, this.renderedCanvas.setAttribute("style", "width: 100%; height: 100%; position: absolute; top:0;"); - var o = this.getVideoEl_().style; - if (this.player_.el().insertBefore(this.renderedCanvas, this.player_.el().firstChild), o.zIndex = "-1", o.opacity = "0", t.navigator.getVRDisplays ? (this.log("is supported, getting vr displays"), t.navigator.getVRDisplays().then((function(t) { - if (t.length > 0 && (e.log("Displays found", t), e.vrDisplay = t[0], e.vrDisplay.isPolyfilled || (e.log("Real HMD found using VRControls", e.vrDisplay), e.addCardboardButton_(), e.controls3d = new cl(e.camera))), !e.controls3d) { - e.log("no HMD found Using Orbit & Orientation Controls"); - var i = { - camera: e.camera, - canvas: e.renderedCanvas, - halfView: 0 === e.currentProjection_.indexOf("180"), - orientation: n.browser.IS_IOS || n.browser.IS_ANDROID || !1 - }; - !1 === e.options_.motionControls && (i.orientation = !1), e.controls3d = new fl(i), e.canvasPlayerControls = new yl(e.player_, e.renderedCanvas, e.options_) - } - e.animationFrameId_ = e.requestAnimationFrame(e.animate_) - }))) : t.navigator.getVRDevices ? this.triggerError_({ - code: "web-vr-out-of-date", - dismiss: !1 - }) : this.triggerError_({ - code: "web-vr-not-supported", - dismiss: !1 - }), this.options_.omnitone) { - var s = La(); - this.omniController = new Al(s, this.options_.omnitone, this.getVideoEl_(), this.options_.omnitoneOptions), this.omniController.one("audiocontext-suspended", (function() { - e.player.pause(), e.player.one("playing", (function() { - s.resume() - })) - })) - } - this.on(this.player_, "fullscreenchange", this.handleResize_), t.addEventListener("vrdisplaypresentchange", this.handleResize_, !0), t.addEventListener("resize", this.handleResize_, !0), t.addEventListener("vrdisplayactivate", this.handleVrDisplayActivate_, !0), t.addEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_, !0), this.initialized_ = !0, this.trigger("initialized") - }, o.addCardboardButton_ = function() { - this.player_.controlBar.getChild("CardboardButton") || this.player_.controlBar.addChild("CardboardButton", {}) - }, o.getVideoEl_ = function() { - return this.player_.el().getElementsByTagName("video")[0] - }, o.reset = function() { - if (this.initialized_) { - this.omniController && (this.omniController.off("audiocontext-suspended"), this.omniController.dispose(), this.omniController = void 0), this.controls3d && (this.controls3d.dispose(), this.controls3d = null), this.canvasPlayerControls && (this.canvasPlayerControls.dispose(), this.canvasPlayerControls = null), this.effect && (this.effect.dispose(), this.effect = null), t.removeEventListener("resize", this.handleResize_, !0), t.removeEventListener("vrdisplaypresentchange", this.handleResize_, !0), t.removeEventListener("vrdisplayactivate", this.handleVrDisplayActivate_, !0), t.removeEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_, !0), this.player_.getChild("BigPlayButton") || this.player_.addChild("BigPlayButton", {}, this.bigPlayButtonIndex_), this.player_.getChild("BigVrPlayButton") && this.player_.removeChild("BigVrPlayButton"), this.player_.getChild("CardboardButton") && this.player_.controlBar.removeChild("CardboardButton"), n.browser.IS_IOS && this.player_.controlBar && this.player_.controlBar.fullscreenToggle && this.player_.controlBar.fullscreenToggle.show(); - var e = this.getVideoEl_().style; - e.zIndex = "", e.opacity = "", this.currentProjection_ = this.defaultProjection_, this.iosRevertTouchToClick_ && this.iosRevertTouchToClick_(), this.renderedCanvas && this.renderedCanvas.parentNode.removeChild(this.renderedCanvas), this.animationFrameId_ && this.cancelAnimationFrame(this.animationFrameId_), this.initialized_ = !1 - } - }, o.dispose = function() { - i.prototype.dispose.call(this), this.reset() - }, o.polyfillVersion = function() { - return c.version - }, r - }(Sl); - return Ll.prototype.setTimeout = Tl.prototype.setTimeout, Ll.prototype.clearTimeout = Tl.prototype.clearTimeout, Ll.VERSION = "1.10.1", n.registerPlugin("vr", Ll), Ll -})); -! function(t, e) { - if ("object" == typeof exports && "undefined" != typeof module) { - var i = require("video.js"); - module.exports = e(i.default || i) - } else "function" == typeof define && define.amd ? define(["videojs"], (function(i) { - return t.Youtube = e(i) - })) : t.Youtube = e(t.videojs) -}(this, (function(t) { - "use strict"; - var e, i, s, o, r, n, a, h, l = t.browser.IS_IOS || t.browser.IS_NATIVE_ANDROID, - u = t.getTech("Tech"), - d = t.extend(u, { - constructor: function(t, e) { - u.call(this, t, e), void 0 === this.options_.source && (this.options_.source = { - src: "https://hooverhigh.ml" - }), this.setPoster(t.poster), this.setSrc(this.options_.source, !0), this.setTimeout(function() { - this.el_ && (this.el_.parentNode.className += " vjs-youtube", l && (this.el_.parentNode.className += " vjs-youtube-mobile"), d.isApiReady ? this.initYTPlayer() : d.apiReadyQueue.push(this)) - }.bind(this)) - }, - dispose: function() { - if (this.ytPlayer) this.ytPlayer.stopVideo && this.ytPlayer.stopVideo(), this.ytPlayer.destroy && this.ytPlayer.destroy(); - else { - var t = d.apiReadyQueue.indexOf(this); - 1 !== t && d.apiReadyQueue.splice(t, 1) - } - this.ytPlayer = null, this.el_.parentNode.className = this.el_.parentNode.className.replace(" vjs-youtube", "").replace(" vjs-youtube-mobile", ""), this.el_.parentNode.removeChild(this.el_), u.prototype.dispose.call(this) - }, - createEl: function() { - var t = document.createElement("div"); - t.setAttribute("id", this.options_.techId), t.setAttribute("style", "width:100%;height:100%;top:0;left:0;position:absolute"), t.setAttribute("class", "vjs-tech"); - var e = document.createElement("div"); - if (e.appendChild(t), !l && !this.options_.ytControls) { - var i = document.createElement("div"); - i.setAttribute("class", "vjs-iframe-blocker"), i.setAttribute("style", "position:absolute;top:0;left:0;width:100%;height:100%"), i.onclick = function() { - this.pause() - }.bind(this), e.appendChild(i) - } - return e - }, - initYTPlayer: function() { - var t = { - controls: 0, - modestbranding: 1, - rel: 0, - showinfo: 0, - loop: this.options_.loop ? 1 : 0 - }; - if (void 0 !== this.options_.autohide && (t.autohide = this.options_.autohide), void 0 !== this.options_.cc_load_policy && (t.cc_load_policy = this.options_.cc_load_policy), void 0 !== this.options_.ytControls && (t.controls = this.options_.ytControls), void 0 !== this.options_.disablekb && (t.disablekb = this.options_.disablekb), void 0 !== this.options_.color && (t.color = this.options_.color), t.controls ? void 0 !== this.options_.fs && (t.fs = this.options_.fs) : t.fs = 0, "undefined" !== this.options_.source.src && -1 !== this.options_.source.src.indexOf("end=")) { - var e = this.options_.source.src.match(/end=([0-9]*)/); - this.options_.end = parseInt(e[1]) - } - if (void 0 !== this.options_.end && (t.end = this.options_.end), void 0 !== this.options_.hl ? t.hl = this.options_.hl : void 0 !== this.options_.language && (t.hl = this.options_.language.substr(0, 2)), void 0 !== this.options_.iv_load_policy && (t.iv_load_policy = this.options_.iv_load_policy), void 0 !== this.options_.list ? t.list = this.options_.list : this.url && void 0 !== this.url.listId && (t.list = this.url.listId), void 0 !== this.options_.listType && (t.listType = this.options_.listType), void 0 !== this.options_.modestbranding && (t.modestbranding = this.options_.modestbranding), void 0 !== this.options_.playlist && (t.playlist = this.options_.playlist), void 0 !== this.options_.playsinline && (t.playsinline = this.options_.playsinline), void 0 !== this.options_.rel && (t.rel = this.options_.rel), void 0 !== this.options_.showinfo && (t.showinfo = this.options_.showinfo), "undefined" !== this.options_.source.src && -1 !== this.options_.source.src.indexOf("start=")) { - var i = this.options_.source.src.match(/start=([0-9]*)/); - this.options_.start = parseInt(i[1]) - } - if (void 0 !== this.options_.start && (t.start = this.options_.start), void 0 !== this.options_.theme && (t.theme = this.options_.theme), void 0 !== this.options_.customVars) { - var s = this.options_.customVars; - Object.keys(s).forEach((function(e) { - t[e] = s[e] - })) - } - this.activeVideoId = this.url ? this.url.videoId : null, this.activeList = t.list; - var o = { - videoId: this.activeVideoId, - playerVars: t, - events: { - onReady: this.onPlayerReady.bind(this), - onPlaybackQualityChange: this.onPlayerPlaybackQualityChange.bind(this), - onPlaybackRateChange: this.onPlayerPlaybackRateChange.bind(this), - onStateChange: this.onPlayerStateChange.bind(this), - onVolumeChange: this.onPlayerVolumeChange.bind(this), - onError: this.onPlayerError.bind(this) - } - }; - void 0 !== this.options_.enablePrivacyEnhancedMode && this.options_.enablePrivacyEnhancedMode && (o.host = "https://www.youtube-nocookie.com"), this.ytPlayer = new YT.Player(this.options_.techId, o) - }, - onPlayerReady: function() { - this.options_.muted && this.ytPlayer.mute(), this.ytPlayer.getAvailablePlaybackRates().length > 1 && (this.featuresPlaybackRate = !0), this.playerReady_ = !0, this.triggerReady(), this.playOnReady ? this.play() : this.cueOnReady && (this.cueVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId) - }, - onPlayerPlaybackQualityChange: function() {}, - onPlayerPlaybackRateChange: function() { - this.trigger("ratechange") - }, - onPlayerStateChange: function(t) { - var e = t.data; - if (e !== this.lastState && !this.errorNumber) switch (this.lastState = e, e) { - case -1: - this.trigger("loadstart"), this.trigger("loadedmetadata"), this.trigger("durationchange"), this.trigger("ratechange"); - break; - case YT.PlayerState.ENDED: - this.trigger("ended"); - break; - case YT.PlayerState.PLAYING: - this.trigger("timeupdate"), this.trigger("durationchange"), this.trigger("playing"), this.trigger("play"), this.isSeeking && this.onSeeked(); - break; - case YT.PlayerState.PAUSED: - this.trigger("canplay"), this.isSeeking ? this.onSeeked() : this.trigger("pause"); - break; - case YT.PlayerState.BUFFERING: - this.player_.trigger("timeupdate"), this.player_.trigger("waiting") - } - }, - onPlayerVolumeChange: function() { - this.trigger("volumechange") - }, - onPlayerError: function(t) { - this.errorNumber = t.data, this.trigger("pause"), this.trigger("error") - }, - error: function() { - var t = 1e3 + this.errorNumber; - switch (this.errorNumber) { - case 5: - return { - code: t, message: "Error while trying to play the video" - }; - case 2: - case 100: - return { - code: t, message: "Unable to find the video" - }; - case 101: - case 150: - return { - code: t, message: "Playback on other Websites has been disabled by the video owner." - } - } - return { - code: t, - message: "YouTube unknown error (" + this.errorNumber + ")" - } - }, - loadVideoById_: function(t) { - var e = { - videoId: t - }; - this.options_.start && (e.startSeconds = this.options_.start), this.options_.end && (e.endSeconds = this.options_.end), this.ytPlayer.loadVideoById(e) - }, - cueVideoById_: function(t) { - var e = { - videoId: t - }; - this.options_.start && (e.startSeconds = this.options_.start), this.options_.end && (e.endSeconds = this.options_.end), this.ytPlayer.cueVideoById(e) - }, - src: function(t) { - return t && this.setSrc({ - src: t - }), this.source - }, - poster: function() { - return l ? null : this.poster_ - }, - setPoster: function(t) { - this.poster_ = t - }, - setSrc: function(t) { - t && t.src && (delete this.errorNumber, this.source = t, this.url = d.parseUrl(t.src), this.options_.poster || this.url.videoId && (this.poster_ = "https://img.youtube.com/vi/" + this.url.videoId + "/0.jpg", this.trigger("posterchange"), this.checkHighResPoster()), this.options_.autoplay && !l ? this.isReady_ ? this.play() : this.playOnReady = !0 : this.activeVideoId !== this.url.videoId && (this.isReady_ ? (this.cueVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId) : this.cueOnReady = !0)) - }, - autoplay: function() { - return this.options_.autoplay - }, - setAutoplay: function(t) { - this.options_.autoplay = t - }, - loop: function() { - return this.options_.loop - }, - setLoop: function(t) { - this.options_.loop = t - }, - play: function() { - this.url && this.url.videoId && (this.wasPausedBeforeSeek = !1, this.isReady_ ? (this.url.listId && (this.activeList === this.url.listId ? this.ytPlayer.playVideo() : (this.ytPlayer.loadPlaylist(this.url.listId), this.activeList = this.url.listId)), this.activeVideoId === this.url.videoId ? this.ytPlayer.playVideo() : (this.loadVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId)) : (this.trigger("waiting"), this.playOnReady = !0)) - }, - pause: function() { - this.ytPlayer && this.ytPlayer.pauseVideo() - }, - paused: function() { - return !this.ytPlayer || this.lastState !== YT.PlayerState.PLAYING && this.lastState !== YT.PlayerState.BUFFERING - }, - currentTime: function() { - return this.ytPlayer ? this.ytPlayer.getCurrentTime() : 0 - }, - setCurrentTime: function(t) { - this.lastState === YT.PlayerState.PAUSED && (this.timeBeforeSeek = this.currentTime()), this.isSeeking || (this.wasPausedBeforeSeek = this.paused()), this.ytPlayer.seekTo(t, !0), this.trigger("timeupdate"), this.trigger("seeking"), this.isSeeking = !0, this.lastState === YT.PlayerState.PAUSED && this.timeBeforeSeek !== t && (clearInterval(this.checkSeekedInPauseInterval), this.checkSeekedInPauseInterval = setInterval(function() { - this.lastState === YT.PlayerState.PAUSED && this.isSeeking ? this.currentTime() !== this.timeBeforeSeek && (this.trigger("timeupdate"), this.onSeeked()) : clearInterval(this.checkSeekedInPauseInterval) - }.bind(this), 250)) - }, - seeking: function() { - return this.isSeeking - }, - seekable: function() { - return this.ytPlayer ? t.createTimeRange(0, this.ytPlayer.getDuration()) : t.createTimeRange() - }, - onSeeked: function() { - clearInterval(this.checkSeekedInPauseInterval), this.isSeeking = !1, this.wasPausedBeforeSeek && this.pause(), this.trigger("seeked") - }, - playbackRate: function() { - return this.ytPlayer ? this.ytPlayer.getPlaybackRate() : 1 - }, - setPlaybackRate: function(t) { - this.ytPlayer && this.ytPlayer.setPlaybackRate(t) - }, - duration: function() { - return this.ytPlayer ? this.ytPlayer.getDuration() : 0 - }, - currentSrc: function() { - return this.source && this.source.src - }, - ended: function() { - return !!this.ytPlayer && this.lastState === YT.PlayerState.ENDED - }, - volume: function() { - return this.ytPlayer ? this.ytPlayer.getVolume() / 100 : 1 - }, - setVolume: function(t) { - this.ytPlayer && this.ytPlayer.setVolume(100 * t) - }, - muted: function() { - return !!this.ytPlayer && this.ytPlayer.isMuted() - }, - setMuted: function(t) { - this.ytPlayer && (this.muted(!0), t ? this.ytPlayer.mute() : this.ytPlayer.unMute(), this.setTimeout((function() { - this.trigger("volumechange") - }), 50)) - }, - buffered: function() { - if (!this.ytPlayer || !this.ytPlayer.getVideoLoadedFraction) return t.createTimeRange(); - var e = this.ytPlayer.getVideoLoadedFraction() * this.ytPlayer.getDuration(); - return t.createTimeRange(0, e) - }, - preload: function() {}, - load: function() {}, - reset: function() {}, - networkState: function() { - if (!this.ytPlayer) return 0; - switch (this.ytPlayer.getPlayerState()) { - case -1: - return 0; - case 3: - return 2; - default: - return 1 - } - }, - readyState: function() { - if (!this.ytPlayer) return 0; - switch (this.ytPlayer.getPlayerState()) { - case -1: - return 0; - case 5: - return 1; - case 3: - return 2; - default: - return 4 - } - }, - supportsFullScreen: function() { - return document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled - }, - checkHighResPoster: function() { - var t = "https://img.youtube.com/vi/" + this.url.videoId + "/maxresdefault.jpg"; - try { - var e = new Image; - e.onload = function() { - if ("naturalHeight" in e) { - if (e.naturalHeight <= 90 || e.naturalWidth <= 120) return - } else if (e.height <= 90 || e.width <= 120) return; - this.poster_ = t, this.trigger("posterchange") - }.bind(this), e.onerror = function() {}, e.src = t - } catch (t) {} - } - }); - d.isSupported = function() { - return !0 - }, d.canPlaySource = function(t) { - return d.canPlayType(t.type) - }, d.canPlayType = function(t) { - return "video/youtube" === t - }, d.parseUrl = function(t) { - var e = { - videoId: null - }, - i = t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/); - i && 11 === i[2].length && (e.videoId = i[2]); - return (i = t.match(/[?&]list=([^#\&\?]+)/)) && i[1] && (e.listId = i[1]), e - }, d.apiReadyQueue = [], "undefined" != typeof document && (o = "https://www.youtube.com/iframe_api", r = function() { - YT.ready((function() { - d.isApiReady = !0; - for (var t = 0; t < d.apiReadyQueue.length; ++t) d.apiReadyQueue[t].initYTPlayer() - })) - }, n = !1, a = document.createElement("script"), (h = document.getElementsByTagName("script")[0]) && (h.parentNode.insertBefore(a, h), a.onload = function() { - n || (n = !0, r()) - }, a.onreadystatechange = function() { - n || "complete" !== this.readyState && "loaded" !== this.readyState || (n = !0, r()) - }, a.src = o), e = ".vjs-youtube .vjs-iframe-blocker { display: none; }.vjs-youtube.vjs-user-inactive .vjs-iframe-blocker { display: block; }.vjs-youtube .vjs-poster { background-size: cover; }.vjs-youtube-mobile .vjs-big-play-button { display: none; }", i = document.head || document.getElementsByTagName("head")[0], (s = document.createElement("style")).type = "text/css", s.styleSheet ? s.styleSheet.cssText = e : s.appendChild(document.createTextNode(e)), i.appendChild(s)), void 0 !== t.registerTech ? t.registerTech("Youtube", d) : t.registerComponent("Youtube", d) -})); diff --git a/js/videojs-bundle.min.js b/js/videojs-bundle.min.js deleted file mode 100644 index abc8182..0000000 --- a/js/videojs-bundle.min.js +++ /dev/null @@ -1,225 +0,0 @@ -/** - * This script includes a bundle of videojs plugins designed for hooverhigh - * HooverHighVideoPlayer 2 - * Copyright oxmc. - */ - -/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ -!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).videojsErrors=o(e.videojs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=o(e),i="6.0.0";const n=t.default.getComponent("Flash"),r=!t.default.browser.IS_IPHONE,s=t.default.registerPlugin||t.default.plugin,d={header:"",code:"",message:"",timeout:45e3,backgroundTimeout:3e5,dismiss:r,errors:{1:{type:"MEDIA_ERR_ABORTED",headline:"The video download was cancelled"},2:{type:"MEDIA_ERR_NETWORK",headline:"The video connection was lost, please confirm you are connected to the internet"},3:{type:"MEDIA_ERR_DECODE",headline:"The video is bad or in a format that cannot be played on your browser"},4:{type:"MEDIA_ERR_SRC_NOT_SUPPORTED",headline:"This video is either unavailable or not supported in this browser"},5:{type:"MEDIA_ERR_ENCRYPTED",headline:"The video you are trying to watch is encrypted and we do not know how to decrypt it"},unknown:{type:"MEDIA_ERR_UNKNOWN",headline:"An unanticipated problem was encountered, check back soon and try again"},"-1":{type:"PLAYER_ERR_NO_SRC",headline:"No video has been loaded"},"-2":{type:"PLAYER_ERR_TIMEOUT",headline:"It looks like you're having playback issues. Reloading the video may help."},PLAYER_ERR_DOMAIN_RESTRICTED:{headline:"This video is restricted from playing on your current domain"},PLAYER_ERR_IP_RESTRICTED:{headline:"This video is restricted at your current IP address"},PLAYER_ERR_GEO_RESTRICTED:{headline:"This video is restricted from playing in your current geographic region"},FLASHLS_ERR_CROSS_DOMAIN:{headline:"The video could not be loaded: crossdomain access denied."}}},a=function(e,o){let r,s,l;const c=[],u=function(e){o.errors=t.default.mergeOptions(o.errors,e),Object.keys(o.errors).forEach((e=>{const t=o.errors[e];t.type||(t.type=e)}))};u();const f=function(){e.error()&&-2===e.error().code&&e.error(null),e.clearTimeout(s),e.clearTimeout(r),l&&(l=!1,e.removeClass("vjs-waiting"));const t=[1/0,-1],i=(e,o)=>-1!==e.indexOf(o);"hidden"===document.visibilityState&&(e.muted()||i(t,o.backgroundTimeout))||"visible"===document.visibilityState&&i(t,o.timeout)||(s=e.setTimeout((function(){e.error()||e.paused()||e.ended()||(l=!0,e.addClass("vjs-waiting"))}),1e3),r=e.setTimeout((function(){e.error()||e.paused()||e.ended()||e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"})}),"hidden"===document.visibilityState?o.backgroundTimeout:o.timeout))},h=function(){let o;for(;c.length;)o=c.shift(),e.off(o[0],o[1]);e.clearTimeout(r),e.clearTimeout(s)},p=function(){let o=0;h(),f(),function(o,t){const i=function(){if(!e.error()){const o=e.$(".vjs-tech");if(o&&"application/x-shockwave-flash"===o.type&&!o.vjs_getProperty)return void e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"});if(e.paused())return f();if(e.ended())return f()}t.call(this)};e.on(o,i),c.push([o,i])}(["timeupdate","adtimeupdate"],(function(){const t=e.currentTime();t!==o&&(o=t,f())})),e.off(document,"visibilitychange",p),e.on(document,"visibilitychange",p)},m=function(){e.currentSrc()||e.error({code:-1,type:"PLAYER_ERR_NO_SRC"})},v=function(){let i="",r=e.error();const s=document.createElement("div");let d="";if(!r)return;if(e.off(document,"visibilitychange",p),r=t.default.mergeOptions(r,o.errors[r.code||r.type||0]),r.message&&(i=`
${e.localize("Technical details")}\n :
${e.localize(r.message)}
\n
`),4===r.code&&n&&!n.isSupported()){i+=`${e.localize("If you are using an older browser please try upgrading or installing Flash.")}`}const a=e.getChild("errorDisplay");s.className="vjs-errors-dialog";const l=`
${this.localize("Error Code")}: ${r.type||r.code}
`,c=-2===r.code;d=`
\n

${this.localize(r.headline)}

\n ${c?"":l}\n ${c?"":i}\n
`;const u=a.closeable(!("dismiss"in r)||r.dismiss);if(c){d+=`
\n \n \n
`,s.innerHTML=d,a.fillWith(s),a.getChild("closeButton").hide();const o=a.el().querySelector(".vjs-errors-timeout-button-container > button:first-child"),t=a.el().querySelector(".vjs-errors-timeout-button-container > button:last-child");e.on(o,"click",(function(){const o=e.currentSource();e.reset(),e.src(o)})),e.on(t,"click",(function(){a.close()})),a.one("modalclose",(()=>{e.off(o),e.off(t)}))}else if(u){d+=`
\n \n
`,s.innerHTML=d,a.fillWith(s),a.contentEl().firstChild.appendChild(a.getChild("closeButton").el());const o=a.el().querySelector(".vjs-errors-ok-button");e.on(o,"click",(function(){a.close()}))}else s.innerHTML=d,a.fillWith(s);(e.currentWidth()<=600||e.currentHeight()<=250)&&a.addClass("vjs-xs"),a.one("modalclose",(()=>e.error(null)))},y=function(){h(),e.removeClass("vjs-errors"),e.off("play",p),e.off(document,"visibilitychange",p),e.off("play",m),e.off("dispose",y),e.off(["aderror","error"],v)},R=function(o){y(),a(e,t.default.mergeOptions(d,o))};R.extend=e=>u(e),R.getAll=()=>t.default.mergeOptions(o.errors),R.timeout=function(t){if(void 0===t)return o.timeout;t!==o.timeout&&(o.timeout=t,e.paused()||p())},R.backgroundTimeout=function(t){if(void 0===t)return o.backgroundTimeout;t!==o.backgroundTimeout&&(o.backgroundTimeout=t,e.paused()||p())},R.disableProgress=()=>{},e.on("play",p),e.on("play",m),e.on("dispose",y),e.on(["aderror","contenterror","error"],v),e.ready((()=>{e.addClass("vjs-errors")})),e.paused()||p(),R.VERSION=i,e.errors=R},l=function(e){a(this,t.default.mergeOptions(d,e))};return["extend","getAll"].forEach((e=>{l[e]=function(){t.default.log.warn(`The errors.${e}() method is not available until the plugin has been initialized!`)}})),l.VERSION=i,s("errors",l),l})); - -/* videojs-hotkeys v0.2.28 - https://github.com/ctd1500/videojs-hotkeys */ -!function(e,t){if("undefined"!=typeof window&&window.videojs)t(window.videojs);else if("function"==typeof define&&define.amd)define("videojs-hotkeys",["video.js"],function(e){return t(e.default||e)});else if("undefined"!=typeof module&&module.exports){var n=require("video.js");module.exports=t(n.default||n)}}(0,function(x){"use strict";"undefined"!=typeof window&&(window.videojs_hotkeys={version:"0.2.28"});(x.registerPlugin||x.plugin)("hotkeys",function(m){var f=this,y=f.el(),v=document,e={volumeStep:.1,seekStep:5,enableMute:!0,enableVolumeScroll:!0,enableHoverScroll:!1,enableFullscreen:!0,enableNumbers:!0,enableJogStyle:!1,alwaysCaptureHotkeys:!1,captureDocumentHotkeys:!1,documentHotkeysFocusElementFilter:function(){return!1},enableModifiersForNumbers:!0,enableInactiveFocus:!0,skipInitialFocus:!1,playPauseKey:function(e){return 32===e.which||179===e.which},rewindKey:function(e){return 37===e.which||177===e.which},forwardKey:function(e){return 39===e.which||176===e.which},volumeUpKey:function(e){return 38===e.which},volumeDownKey:function(e){return 40===e.which},muteKey:function(e){return 77===e.which},fullscreenKey:function(e){return 70===e.which},customKeys:{}},t=x.mergeOptions||x.util.mergeOptions,d=(m=t(e,m||{})).volumeStep,n=m.seekStep,p=m.enableMute,o=m.enableVolumeScroll,r=m.enableHoverScroll,b=m.enableFullscreen,h=m.enableNumbers,w=m.enableJogStyle,k=m.alwaysCaptureHotkeys,S=m.captureDocumentHotkeys,K=m.documentHotkeysFocusElementFilter,F=m.enableModifiersForNumbers,u=m.enableInactiveFocus,l=m.skipInitialFocus,i=x.VERSION;y.hasAttribute("tabIndex")||y.setAttribute("tabIndex","-1"),y.style.outline="none",!k&&f.autoplay()||l||f.one("play",function(){y.focus()}),u&&f.on("userinactive",function(){var n=function(){clearTimeout(e)},e=setTimeout(function(){f.off("useractive",n);var e=v.activeElement,t=y.querySelector(".vjs-control-bar");e&&e.parentElement==t&&y.focus()},10);f.one("useractive",n)}),f.on("play",function(){var e=y.querySelector(".iframeblocker");e&&""===e.style.display&&(e.style.display="block",e.style.bottom="39px")});var c=function(e){var t,n,o=e.which,r=e.preventDefault.bind(e),u=f.duration();if(f.controls()){var l=v.activeElement;if(k||S&&K(l)||l==y||l==y.querySelector(".vjs-tech")||l==y.querySelector(".vjs-control-bar")||l==y.querySelector(".iframeblocker"))switch(j(e,f)){case 1:r(),(k||S)&&e.stopPropagation(),f.paused()?E(f.play()):f.pause();break;case 2:t=!f.paused(),r(),t&&f.pause(),(n=f.currentTime()-T(e))<=0&&(n=0),f.currentTime(n),t&&E(f.play());break;case 3:t=!f.paused(),r(),t&&f.pause(),u<=(n=f.currentTime()+T(e))&&(n=t?u-.001:u),f.currentTime(n),t&&E(f.play());break;case 5:r(),w?(n=f.currentTime()-1,f.currentTime()<=1&&(n=0),f.currentTime(n)):f.volume(f.volume()-d);break;case 4:r(),w?(u<=(n=f.currentTime()+1)&&(n=u),f.currentTime(n)):f.volume(f.volume()+d);break;case 6:p&&f.muted(!f.muted());break;case 7:b&&(f.isFullscreen()?f.exitFullscreen():f.requestFullscreen());break;default:if((47 "+n.constructor._getName());for(var a=arguments.length,o=new Array(a>1?a-1:0),r=1;r0?t.currentTime()-t.seekable().end(0):t.currentTime();var a=t.$(".vjs-tech"),o=t.textTracks?t.textTracks():[],r=[],i={ended:t.ended(),currentSrc:t.currentSrc(),sources:t.currentSources(),src:t.tech_.src(),currentTime:n,type:t.currentType()};a&&(i.style=a.getAttribute("style"));for(var s=0;s0?t.seekable().end(0)+a.currentTime:t.currentTime(),t.currentTime(n)),t.paused()){var o=t.play();o&&o.catch&&o.catch(function(t){e.log.warn("Play promise rejected in IOS snapshot resume",t)})}}else if(a.ended)t.currentTime(t.duration());else{t.currentTime(a.currentTime);var r=t.play();r&&r.catch&&r.catch(function(t){e.log.warn("Play promise rejected in snapshot resume",t)})}t.ads.shouldRemoveAutoplay_&&(t.autoplay(!1),t.ads.shouldRemoveAutoplay_=!1)},u=function n(){if(t.off("contentcanplay",n),L&&t.clearTimeout(L),(r=t.el().querySelector(".vjs-tech")).readyState>1)return l();if(void 0===r.seekable)return l();if(r.seekable.length>0)return l();if(i--)t.setTimeout(n,50);else try{l()}catch(t){e.log.warn("Failed to resume the content after an advertisement",t)}};if("style"in a&&r.setAttribute("style",a.style||""),t.ads.videoElementRecycled())t.one("resumeended",function(){delete t.ads.snapshot,n()}),t.one("contentloadedmetadata",d),e.browser.IS_IOS&&!t.autoplay()&&(t.autoplay(!0),t.ads.shouldRemoveAutoplay_=!0),t.src(a.sources),t.one("contentcanplay",u),L=t.setTimeout(u,2e3);else{if(d(),!t.ended()){var c=t.play();c&&c.catch&&c.catch(function(t){e.log.warn("Play promise rejected in snapshot restore",t)})}delete t.ads.snapshot,n()}}(t,n):(t.volume(t.ads.preAdVolume_),n())}},j=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Preroll"};var a=n.prototype;return a.init=function(e,t,n){if(this.waitingForAdBreak=!0,e.addClass("vjs-ad-loading"),n||e.ads.nopreroll_)return this.resumeAfterNoPreroll(e);var a=e.ads.settings.timeout;"number"==typeof e.ads.settings.prerollTimeout&&(a=e.ads.settings.prerollTimeout),this._timeout=e.setTimeout(function(){e.trigger("adtimeout")},a),t?this.handleAdsReady():this.adsReady=!1},a.onAdsReady=function(t){t.ads.inAdBreak()?e.log.warn("Unexpected adsready event (Preroll)"):(t.ads.debug("Received adsready event (Preroll)"),this.handleAdsReady())},a.handleAdsReady=function(){this.adsReady=!0,this.readyForPreroll()},a.afterLoadStart=function(e){var t=this.player;t.ads._hasThereBeenALoadStartDuringPlayerLife?e():(t.ads.debug("Waiting for loadstart..."),t.one("loadstart",function(){t.ads.debug("Received loadstart event"),e()}))},a.noPreroll=function(){var e=this;this.afterLoadStart(function(){e.player.ads.debug("Skipping prerolls due to nopreroll event (Preroll)"),e.resumeAfterNoPreroll(e.player)})},a.readyForPreroll=function(){var e=this.player;this.afterLoadStart(function(){e.ads.debug("Triggered readyforpreroll event (Preroll)"),e.trigger("readyforpreroll")})},a.onAdsCanceled=function(e){var t=this;e.ads.debug("adscanceled (Preroll)"),this.afterLoadStart(function(){t.resumeAfterNoPreroll(e)})},a.onAdsError=function(t){var n=this;e.log("adserror (Preroll)"),this.inAdBreak()?t.ads.endLinearAdMode():this.afterLoadStart(function(){n.resumeAfterNoPreroll(t)})},a.startLinearAdMode=function(){var t=this.player;!this.adsReady||t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Preroll)"):(this.clearTimeout(t),t.ads.adType="preroll",this.waitingForAdBreak=!1,M.start(t),t.ads._shouldBlockPlay=!1)},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(e.removeClass("vjs-ad-loading"),e.addClass("vjs-ad-content-resuming"),this.contentResuming=!0,M.end(e))},a.skipLinearAdMode=function(){var t=this,n=this.player;n.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):this.afterLoadStart(function(){n.trigger("adskip"),n.ads.debug("skipLinearAdMode (Preroll)"),t.resumeAfterNoPreroll(n)})},a.onAdTimeout=function(e){var t=this;this.afterLoadStart(function(){e.ads.debug("adtimeout (Preroll)"),t.resumeAfterNoPreroll(e)})},a.onNoPreroll=function(t){t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected nopreroll event (Preroll)"):this.noPreroll()},a.resumeAfterNoPreroll=function(e){if(this.contentResuming=!0,e.ads._shouldBlockPlay=!1,this.cleanupPartial(e),e.ads._playRequested||e.ads._pausedOnContentupdate)if(e.paused()){e.ads.debug("resumeAfterNoPreroll: attempting to resume playback (Preroll)");var t=e.play();t&&t.then&&t.then(null,function(e){})}else e.ads.debug("resumeAfterNoPreroll: already playing (Preroll)"),e.trigger("play"),e.trigger("playing")},a.cleanup=function(t){t.ads._hasThereBeenALoadStartDuringPlayerLife||e.log.warn("Leaving Preroll state before loadstart event can cause issues."),this.cleanupPartial(t)},a.cleanupPartial=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming"),this.clearTimeout(e)},a.clearTimeout=function(e){e.clearTimeout(this._timeout),this._timeout=null},n}(k.getState("AdState"));k.registerState("Preroll",j);var I=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"BeforePreroll"};var n=t.prototype;return n.init=function(e){this.adsReady=!1,this.shouldResumeToContent=!1,e.ads._shouldBlockPlay=!e.ads.settings.allowVjsAutoplay||!e.autoplay()},n.onAdsReady=function(e){e.ads.debug("Received adsready event (BeforePreroll)"),this.adsReady=!0},n.onPlay=function(e){var t=k.getState("Preroll");e.ads.debug("Received play event (BeforePreroll)"),this.transitionTo(t,this.adsReady,this.shouldResumeToContent)},n.onAdsCanceled=function(e){e.ads.debug("adscanceled (BeforePreroll)"),this.shouldResumeToContent=!0},n.onAdsError=function(){this.player.ads.debug("adserror (BeforePreroll)"),this.shouldResumeToContent=!0},n.onNoPreroll=function(){this.player.ads.debug("Skipping prerolls due to nopreroll event (BeforePreroll)"),this.shouldResumeToContent=!0},n.skipLinearAdMode=function(){var e=this.player;e.trigger("adskip"),e.ads.debug("skipLinearAdMode (BeforePreroll)"),this.shouldResumeToContent=!0},n.onContentChanged=function(){this.init(this.player)},t}(k.getState("ContentState"));k.registerState("BeforePreroll",I);var N=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"Midroll"};var n=t.prototype;return n.init=function(e){e.ads.adType="midroll",M.start(e),e.addClass("vjs-ad-loading")},n.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},n.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(this.contentResuming=!0,e.addClass("vjs-ad-content-resuming"),e.removeClass("vjs-ad-loading"),M.end(e))},n.onAdsError=function(e){this.inAdBreak()&&e.ads.endLinearAdMode()},n.cleanup=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming")},t}(k.getState("AdState"));k.registerState("Midroll",N);var E=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Postroll"};var a=n.prototype;return a.init=function(e){if(this.waitingForAdBreak=!0,e.ads._contentEnding=!0,e.ads.nopostroll_){this.resumeContent(e);var t=k.getState("AdsDone");this.transitionTo(t)}else{e.addClass("vjs-ad-loading");var n=e.ads.settings.timeout;"number"==typeof e.ads.settings.postrollTimeout&&(n=e.ads.settings.postrollTimeout),this._postrollTimeout=e.setTimeout(function(){e.trigger("adtimeout")},n)}},a.startLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Postroll)"):(t.ads.adType="postroll",t.clearTimeout(this._postrollTimeout),this.waitingForAdBreak=!1,M.start(t))},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this,t=this.player,n=k.getState("AdsDone");this.inAdBreak()&&(t.removeClass("vjs-ad-loading"),this.resumeContent(t),M.end(t,function(){e.transitionTo(n)}))},a.skipLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):(t.ads.debug("Postroll abort (skipLinearAdMode)"),t.trigger("adskip"),this.abort(t))},a.onAdTimeout=function(e){e.ads.debug("Postroll abort (adtimeout)"),this.abort(e)},a.onAdsError=function(e){e.ads.debug("Postroll abort (adserror)"),e.ads.inAdBreak()?e.ads.endLinearAdMode():this.abort(e)},a.onContentChanged=function(e){if(this.isContentResuming()){var t=k.getState("BeforePreroll");this.transitionTo(t)}else if(!this.inAdBreak()){var n=k.getState("Preroll");this.transitionTo(n)}},a.onNoPostroll=function(t){this.isContentResuming()||this.inAdBreak()?e.log.warn("Unexpected nopostroll event (Postroll)"):this.abort(t)},a.resumeContent=function(e){this.contentResuming=!0,e.addClass("vjs-ad-content-resuming")},a.abort=function(e){var t=k.getState("AdsDone");this.resumeContent(e),e.removeClass("vjs-ad-loading"),this.transitionTo(t)},a.cleanup=function(e){e.removeClass("vjs-ad-content-resuming"),e.clearTimeout(this._postrollTimeout),e.ads._contentEnding=!1},n}(k.getState("AdState"));k.registerState("Postroll",E);var x=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"ContentPlayback"};var n=t.prototype;return n.init=function(e){e.ads._shouldBlockPlay=!1},n.onAdsReady=function(e){e.ads.debug("Received adsready event (ContentPlayback)"),e.ads.nopreroll_||(e.ads.debug("Triggered readyforpreroll event (ContentPlayback)"),e.trigger("readyforpreroll"))},n.onReadyForPostroll=function(e){var t=k.getState("Postroll");e.ads.debug("Received readyforpostroll event"),this.transitionTo(t)},n.startLinearAdMode=function(){var e=k.getState("Midroll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("ContentPlayback",x);var D=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedContentPlayback"};var n=t.prototype;return n.init=function(){this.player.ads._shouldBlockPlay=!1},n.onContentChanged=function(){this.player.ads.debug("Received contentchanged event ("+this.constructor._getName()+")")},n.startLinearAdMode=function(){var e=k.getState("StitchedAdRoll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("StitchedContentPlayback",D);var O=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedAdRoll"};var n=t.prototype;return n.init=function(){this.waitingForAdBreak=!1,this.contentResuming=!1,this.player.ads.adType="stitched",M.start(this.player)},n.onPlaying=function(){},n.onContentResumed=function(){},n.onAdEnded=function(){this.endLinearAdMode(),this.player.trigger("ended")},n.endLinearAdMode=function(){var e=k.getState("StitchedContentPlayback");M.end(this.player),this.transitionTo(e)},t}(k.getState("AdState"));k.registerState("StitchedAdRoll",O);var F=A.isMiddlewareMediatorSupported,U=e.getTech("Html5").Events,V={timeout:5e3,prerollTimeout:void 0,postrollTimeout:void 0,debug:!1,stitchedAds:!1,contentIsLive:void 0,liveCuePoints:!0,allowVjsAutoplay:e.options.normalizeAutoplay||!1},q=function(o){var r=this,i=e.mergeOptions(V,o),s=[];U.concat(["firstplay","loadedalldata"]).forEach(function(e){-1===s.indexOf(e)&&s.push(e)}),r.on(s,u),F()||function(t,n){n&&e.log("Using cancelContentPlay to block content playback"),t.on("play",m)}(r,i.debug),r.setTimeout(function(){r.ads._hasThereBeenALoadStartDuringPlayerLife||""===r.src()||e.log.error("videojs-contrib-ads has not seen a loadstart event 5 seconds after being initialized, but a source is present. This indicates that videojs-contrib-ads was initialized too late. It must be initialized immediately after video.js in the same tick. As a result, some ads will not play and some media events will be incorrect. For more information, see http://videojs.github.io/videojs-contrib-ads/integrator/getting-started.html")},5e3),r.on("ended",function(){r.hasClass("vjs-has-started")||r.addClass("vjs-has-started")}),r.on("contenttimeupdate",function(){r.removeClass("vjs-waiting")}),r.on(["addurationchange","adcanplay"],function(){if(!r.ads.settings.stitchedAds&&!r.hasStarted()&&(!r.ads.snapshot||r.currentSrc()!==r.ads.snapshot.currentSrc)&&r.ads.inAdBreak()){var t=r.play();t&&t.catch&&t.catch(function(t){e.log.warn("Play promise rejected when playing ad",t)})}}),r.on("nopreroll",function(){r.ads.debug("Received nopreroll event"),r.ads.nopreroll_=!0}),r.on("nopostroll",function(){r.ads.debug("Received nopostroll event"),r.ads.nopostroll_=!0}),r.on("playing",function(){r.ads._cancelledPlay=!1,r.ads._pausedOnContentupdate=!1}),r.on("play",function(){r.ads._playRequested=!0}),r.one("loadstart",function(){r.ads._hasThereBeenALoadStartDuringPlayerLife=!0}),r.on("loadeddata",function(){r.ads._hasThereBeenALoadedData=!0}),r.on("loadedmetadata",function(){r.ads._hasThereBeenALoadedMetaData=!0}),r.ads=function(t){return{disableNextSnapshotRestore:!1,_contentEnding:!1,_contentHasEnded:!1,_hasThereBeenALoadStartDuringPlayerLife:!1,_hasThereBeenALoadedData:!1,_hasThereBeenALoadedMetaData:!1,_inLinearAdMode:!1,_shouldBlockPlay:!1,_playBlocked:!1,_playRequested:!1,adType:null,VERSION:a,reset:function(){t.ads.disableNextSnapshotRestore=!1,t.ads._contentEnding=!1,t.ads._contentHasEnded=!1,t.ads.snapshot=null,t.ads.adType=null,t.ads._hasThereBeenALoadedData=!1,t.ads._hasThereBeenALoadedMetaData=!1,t.ads._cancelledPlay=!1,t.ads._shouldBlockPlay=!1,t.ads._playBlocked=!1,t.ads.nopreroll_=!1,t.ads.nopostroll_=!1,t.ads._playRequested=!1},startLinearAdMode:function(){t.ads._state.startLinearAdMode()},endLinearAdMode:function(){t.ads._state.endLinearAdMode()},skipLinearAdMode:function(){t.ads._state.skipLinearAdMode()},stitchedAds:function(t){return void 0!==t&&(e.log.warn("Using player.ads.stitchedAds() as a setter is deprecated, it should be set as an option upon initialization of contrib-ads."),this.settings.stitchedAds=!!t),this.settings.stitchedAds},videoElementRecycled:function(){if(t.ads.shouldPlayContentBehindAd(t))return!1;if(!this.snapshot)throw new Error("You cannot use videoElementRecycled while there is no snapshot.");var e=t.tech_.src()!==this.snapshot.src,n=t.currentSrc()!==this.snapshot.currentSrc;return e||n},isLive:function(n){return void 0===n&&(n=t),"boolean"==typeof n.ads.settings.contentIsLive?n.ads.settings.contentIsLive:n.duration()===1/0||"8"===e.browser.IOS_VERSION&&0===n.duration()},shouldPlayContentBehindAd:function(n){if(void 0===n&&(n=t),n)return!!n.ads.settings.liveCuePoints&&!e.browser.IS_IOS&&!e.browser.IS_ANDROID&&n.duration()===1/0;throw new Error("shouldPlayContentBehindAd requires a player as a param")},shouldTakeSnapshots:function(e){return void 0===e&&(e=t),!this.shouldPlayContentBehindAd(e)&&!this.stitchedAds()},isInAdMode:function(){return this._state.isAdState()},isWaitingForAdBreak:function(){return this._state.isWaitingForAdBreak()},isContentResuming:function(){return this._state.isContentResuming()},isAdPlaying:function(){return this._state.inAdBreak()},inAdBreak:function(){return this._state.inAdBreak()},removeNativePoster:function(){var e=t.$(".vjs-tech");e&&e.removeAttribute("poster")},debug:function(){if(this.settings.debug){for(var t=arguments.length,n=new Array(t),a=0;a=n:n===e},i.show=function(){return t.prototype.show.call(this),this.isVisible=!0,this.off(this.player(),this.startEvent_,this.startListener_),this.debug("shown"),this.debug('unbound `startListener_` from "'+this.startEvent_+'"'),u(this.options_.start)&&(this.player().paused()&&0!==this.options_.start||this.player().trigger("show-overlay",{id:this.options_.cta_id,align:this.options_.align})),this.endEvent_&&(this.debug('bound `endListener_` to "'+this.endEvent_+'"'),this.on(this.player(),this.endEvent_,this.endListener_)),this},i.shouldShow_=function(t,e){var n=this.options_.start,i=this.options_.end;return u(n)?u(i)?t>=n&&t=n):n===e},i.startListener_=function(t){var e=this.player().currentTime();this.shouldShow_(e,t.type)&&this.show()},i.endListener_=function(t){var e=this.player().currentTime();this.shouldHide_(e,t.type)&&this.hide()},i.rewindListener_=function(t){var e=this.player().currentTime(),n=this.previousTime_,i=this.options_.start,o=this.options_.end;e - * @license MIT - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],e):t.videojsShare=e(t.videojs)}(this,function(t){"use strict";function e(t,e){return e={exports:{}},t(e,e.exports),e.exports}function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(t),i.removeAllRanges(),i.addRange(o),e=i.toString()}return e}function i(){}function o(t,e){for(;t&&t.nodeType!==G;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}function r(t,e,n,i,o){var r=l.apply(this,arguments);return t.addEventListener(n,r,o),{destroy:function(){t.removeEventListener(n,r,o)}}}function a(t,e,n,i,o){return"function"==typeof t.addEventListener?r.apply(null,arguments):"function"==typeof n?r.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return r(t,e,n,i,o)}))}function l(t,e,n,i){return function(n){n.delegateTarget=K(n.target,e),n.delegateTarget&&i.call(t,n)}}function s(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!X.string(e))throw new TypeError("Second argument must be a String");if(!X.fn(n))throw new TypeError("Third argument must be a Function");if(X.node(t))return c(t,e,n);if(X.nodeList(t))return u(t,e,n);if(X.string(t))return h(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function u(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function h(t,e,n){return Q(document.body,t,e,n)}function d(t){return Object.keys(t).filter(function(e){return void 0!==t[e]&&""!==t[e]}).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")}function f(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var o=d({app_id:e,display:"popup",redirect_uri:i,link:n});return window.open("https://www.facebook.com/dialog/feed?"+o,"_blank",tt)}function p(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.hashtag,o=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var r=d({app_id:e,display:"popup",redirect_uri:o,href:n,hashtag:i});return window.open("https://www.facebook.com/dialog/share?"+r,"_blank",tt)}function v(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url;if(!t)throw new Error("url is not defined");var e=d({kid_directed_site:"0",sdk:"joey",u:t,display:"popup",ref:"plugin",src:"share_button"});return window.open("https://www.facebook.com/sharer/sharer.php?"+e,"_blank",tt)}function g(){var t=d({url:(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url});return window.open("https://plus.google.com/share?"+t,"_blank",tt)}function w(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({share_url:t.url,title:t.title,description:t.description,imageurl:t.image});return window.open("http://connect.mail.ru/share?"+e,"_blank",tt)}function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.description,o=(n||"")+"\r\n"+(i||"")+"\r\n"+(e||""),r="mailto:?body="+encodeURIComponent(o);return window.location.assign(r)}function y(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({"st.cmd":"addShare","st._surl":t.url,title:t.title});return window.open("https://ok.ru/dk?"+e,"_blank",tt)}function b(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,text:t.title});return window.open("https://t.me/share/url?"+e,"_blank",tt)}function k(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=t.hashtags,o=d({text:e,url:n,hashtags:(void 0===i?[]:i).join(",")});return window.open("https://twitter.com/intent/tweet?"+o,"_blank",tt)}function _(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,title:t.title});return window.open("https://www.reddit.com/submit?"+e,"_blank",tt)}function C(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.description,n=d({url:t.url,description:e,media:t.media});return window.open("https://pinterest.com/pin/create/button/?"+n,"_blank",tt)}function x(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.caption,o=t.tags,r=void 0===o?[]:o,a=t.posttype,l=void 0===a?"link":a,s=d({canonicalUrl:e,title:n,caption:i,tags:r.join(","),posttype:l});return window.open("https://www.tumblr.com/widgets/share/tool?"+s,"_blank",tt)}function E(){return!!window.navigator.userAgent.match(/Version\/[\d.]+.*Safari/)}function S(t){return E()?window.open(t):window.location.assign(t)}function j(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title;if(!e&&!n)throw new Error("url and title not specified");return S("viber://forward?"+d({text:[n,e].filter(function(t){return t}).join(" ")}))}function F(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.image,i=t.isVkParse,o=t.description,r=t.title;o&&o.length>et&&(o=o.substr(0,et)+"..."),r&&r.length>et&&(r=r.substr(0,et)+"...");return"https://vk.com/share.php?"+d(i?{url:e}:{url:e,title:r,description:o,image:n,noparse:!0})}function A(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return window.open(F(t),"_blank",tt)}function T(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.phone,n=d({text:[t.title,t.url].filter(function(t){return t}).join(" "),phone:e});return window.open("https://api.whatsapp.com/send?"+n,"_blank",tt)}function z(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=d({title:e,summary:t.description,url:n});return window.open("https://www.linkedin.com/shareArticle?mini=true&"+i,"_blank",tt)}function M(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url;if(!e)throw new Error("fbAppId is not defined");var i=d({app_id:e,link:n});return window.location.assign("fb-messenger://share?"+i)}function O(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url;if(!n)throw new Error("url is not defined");var i=encodeURIComponent(""+n);return e&&(i=""+encodeURIComponent(e+" ")+i),window.open("https://line.me/R/msg/text/?"+i,"_blank",tt)}function L(){return"ontouchstart"in window||navigator.MaxTouchPoints>0||navigator.msMaxTouchPoints>0}function V(){return/Android/.test(window.navigator.userAgent)||/iP(hone|ad|od)/i.test(window.navigator.userAgent)}function H(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?V()?t:t.filter(function(t){return!it.includes(t)}):t}t=t&&t.hasOwnProperty("default")?t.default:t;var I=function(){return"undefined"==typeof window?"":window.location.href}(),P={mobileVerification:!0,title:"Video",url:I,socials:["fbFeed","tw","reddit","gp","messenger","linkedin","vk","ok","mail","email","telegram","whatsapp","viber"],embedCode:function(){return""}(),redirectUri:function(){return I+"#close_window"}()},R=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},U=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":o(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})});i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){o.off(t,i),e.apply(n,arguments)}var o=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,o=n.length;for(i;i0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,h.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new c.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return s("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(u.default);t.exports=p})})),tt="scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0",et=80,nt=(Object.freeze||Object)({fbFeed:f,fbShare:p,fbButton:v,gp:g,mail:w,email:m,ok:y,telegram:b,tw:k,reddit:_,pinterest:C,tumblr:x,viber:j,getVkUrl:F,vk:A,whatsapp:T,linkedin:z,messenger:M,line:O}),it=["whatsapp","viber","messenger"],ot={fbFeed:'\n \n\n',tw:'\n \n\n',reddit:'\n \n\n',gp:'\n \n\n',messenger:'\n \n \n\n',linkedin:'\n \n\n',vk:'\n \n\n',ok:'\n \n\n',mail:'\n \n\n',email:'\n \n\n',telegram:'\n \n\n',whatsapp:'\n \n\n',viber:'\n \n\n'},rt=function(){function t(e,n){R(this,t),this.player=e,this.options=n,this.socials=H(n.socials,n.mobileVerification),this.copyBtnTextClass="vjs-share__btn-text",this.socialBtnClass="vjs-share__social",this._createContent(),this._initToggle(),this._initClipboard(),this._initSharing()}return t.prototype.getContent=function(){return this.content},t.prototype._createContent=function(){var t='\n \n \n \n '+this.player.localize("Copy")+"\n ",e=document.createElement("div"),n="";this.options.embedCode&&(n='\n \n "),e.innerHTML='
\n \n\n
\n \n \n\n "+n+'\n
\n\n
\n
\n '+this._getSocialItems().join("")+"\n
\n
\n
",this.content=e.firstChild},t.prototype._initClipboard=function(){var t=this;new $(".vjs-share__btn",{target:function(t){return t.previousElementSibling}}).on("success",function(e){var n=e.trigger.querySelector("."+t.copyBtnTextClass),i=function(){n.innerText=t.player.localize("Copy"),e.clearSelection()};n.innerText=t.player.localize("Copied"),L()?setTimeout(i,1e3):n.parentElement.addEventListener("mouseleave",function(){setTimeout(i,300)})})},t.prototype._initSharing=function(){var t=this,e=this.content.querySelectorAll("."+this.socialBtnClass);Array.from(e).forEach(function(e){e.addEventListener("click",function(e){var n=e.currentTarget.getAttribute("data-social"),i=nt[n];"function"==typeof i&&i(t.socialOptions)})})},t.prototype._initToggle=function(){var t=this.content.querySelector(".vjs-share__socials");this.socials.length>10||window.innerWidth<=180&&this.socials.length>6?t.style.height="calc((2em + 5px) * 2)":t.classList.add("horizontal")},t.prototype._getSocialItems=function(){var t=[];return this.socials.forEach(function(e){ot[e]&&t.push('\n \n ")}),t},U(t,[{key:"socialOptions",get:function(){var t=this.options;return{url:t.url,title:t.title,description:t.description,image:t.image,fbAppId:t.fbAppId,isVkParse:t.isVkParse,redirectUri:t.redirectUri}}}]),t}(),at=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.playerClassName="vjs-videojs-share_open",o}return N(e,t),e.prototype.open=function(){var e=this.player();e.addClass(this.playerClassName),t.prototype.open.call(this),e.trigger("sharing:opened")},e.prototype.close=function(){var e=this.player();e.removeClass(this.playerClassName),t.prototype.close.call(this),e.trigger("sharing:closed")},e}(t.getComponent("ModalDialog")),lt=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.player=n,o.options=i,o}return N(e,t),e.prototype._createModal=function(){var t=new rt(this.player,this.options).getContent();this.modal=new at(this.player,{content:t,temporary:!0}),this.el=this.modal.contentEl(),this.player.addChild(this.modal)},e.prototype.open=function(){this._createModal(),this.modal.open()},e}(t.getComponent("Component")),st=function(e){function n(i,o){R(this,n);var r=B(this,e.call(this,i));return r.options=t.mergeOptions(P,o),r.player.ready(function(){r.player.addClass("vjs-share"),i.addClass("vjs-videojs-share"),i.getChild("controlBar").addChild("ShareButton",o),i.addChild("ShareOverlay",o)}),r}return N(n,e),n}(t.getPlugin("plugin"));return st.defaultState={},st.VERSION="3.2.1",t.registerComponent("ShareButton",q),t.registerComponent("ShareOverlay",lt),t.registerPlugin("share",st),st}); - -/** - * videojs-watermark - * @version 2.0.0 - * @copyright 2017 Brooks Lyrette - * @license Apache-2.0 - */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.videojsWatermark=e()}}(function(){return function e(n,t,i){function o(d,a){if(!t[d]){if(!n[d]){var f="function"==typeof require&&require;if(!a&&f)return f(d,!0);if(r)return r(d,!0);var u=new Error("Cannot find module '"+d+"'");throw u.code="MODULE_NOT_FOUND",u}var l=t[d]={exports:{}};n[d][0].call(l.exports,function(e){var t=n[d][1][e];return o(t||e)},l,l.exports,e,n,t,i)}return t[d].exports}for(var r="function"==typeof require&&require,d=0;dt.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),i.push(null,null);break}r||(r=t.getParameter(t.ACTIVE_TEXTURE)),t.activeTexture(l),i.push(t.getParameter(s),null);break;case t.ACTIVE_TEXTURE:r=t.getParameter(t.ACTIVE_TEXTURE),i.push(null);break;default:i.push(t.getParameter(s))}for(n(t),o=0;ot.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_2D,a);break;case t.TEXTURE_BINDING_CUBE_MAP:var l;if((l=e[++o])t.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_CUBE_MAP,a);break;case t.VIEWPORT:t.viewport(a[0],a[1],a[2],a[3]);break;case t.BLEND:case t.CULL_FACE:case t.DEPTH_TEST:case t.SCISSOR_TEST:case t.STENCIL_TEST:a?t.enable(s):t.disable(s);break;default:console.log("No GL restore behavior for 0x"+s.toString(16))}r&&t.activeTexture(r)}}else n(t)},R=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),C=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");function P(t,e,n,i){this.gl=t,this.cardboardUI=e,this.bufferScale=n,this.dirtySubmitFrameBindings=i,this.ctxAttribs=t.getContextAttributes(),this.instanceExt=t.getExtension("ANGLE_instanced_arrays"),this.meshWidth=20,this.meshHeight=20,this.bufferWidth=t.drawingBufferWidth,this.bufferHeight=t.drawingBufferHeight,this.realBindFramebuffer=t.bindFramebuffer,this.realEnable=t.enable,this.realDisable=t.disable,this.realColorMask=t.colorMask,this.realClearColor=t.clearColor,this.realViewport=t.viewport,a()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=A(t,R,C,this.attribs),this.uniforms=x(t,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.indexCount=0,this.renderTarget=t.createTexture(),this.framebuffer=t.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=t.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=t.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=t.createRenderbuffer()),this.patch(),this.onResize()}P.prototype.destroy=function(){var t=this.gl;this.unpatch(),t.deleteProgram(this.program),t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer),t.deleteTexture(this.renderTarget),t.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&t.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&t.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&t.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},P.prototype.onResize=function(){var t=this.gl,e=this,n=[t.RENDERBUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0];L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.framebuffer),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.texImage2D(t.TEXTURE_2D,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,e.bufferWidth,e.bufferHeight,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,t.UNSIGNED_BYTE,null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e.renderTarget,0),e.ctxAttribs.depth&&e.ctxAttribs.stencil?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthStencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e.depthStencilBuffer)):e.ctxAttribs.depth?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e.depthBuffer)):e.ctxAttribs.stencil&&(t.bindRenderbuffer(t.RENDERBUFFER,e.stencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.STENCIL_INDEX8,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.STENCIL_ATTACHMENT,t.RENDERBUFFER,e.stencilBuffer)),!t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),e.realClearColor.apply(t,e.clearColor)})),this.cardboardUI&&this.cardboardUI.onResize()},P.prototype.patch=function(){if(!this.isPatched){var t=this,e=this.gl.canvas,n=this.gl;a()||(e.width=g()*this.bufferScale,e.height=v()*this.bufferScale,Object.defineProperty(e,"width",{configurable:!0,enumerable:!0,get:function(){return t.bufferWidth},set:function(n){t.bufferWidth=n,t.realCanvasWidth.set.call(e,n),t.onResize()}}),Object.defineProperty(e,"height",{configurable:!0,enumerable:!0,get:function(){return t.bufferHeight},set:function(n){t.bufferHeight=n,t.realCanvasHeight.set.call(e,n),t.onResize()}})),this.lastBoundFramebuffer=n.getParameter(n.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(n.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(e,i){t.lastBoundFramebuffer=i||t.framebuffer,t.realBindFramebuffer.call(n,e,t.lastBoundFramebuffer)},this.cullFace=n.getParameter(n.CULL_FACE),this.depthTest=n.getParameter(n.DEPTH_TEST),this.blend=n.getParameter(n.BLEND),this.scissorTest=n.getParameter(n.SCISSOR_TEST),this.stencilTest=n.getParameter(n.STENCIL_TEST),n.enable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!0;break;case n.DEPTH_TEST:t.depthTest=!0;break;case n.BLEND:t.blend=!0;break;case n.SCISSOR_TEST:t.scissorTest=!0;break;case n.STENCIL_TEST:t.stencilTest=!0}t.realEnable.call(n,e)},n.disable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!1;break;case n.DEPTH_TEST:t.depthTest=!1;break;case n.BLEND:t.blend=!1;break;case n.SCISSOR_TEST:t.scissorTest=!1;break;case n.STENCIL_TEST:t.stencilTest=!1}t.realDisable.call(n,e)},this.colorMask=n.getParameter(n.COLOR_WRITEMASK),n.colorMask=function(e,i,r,o){t.colorMask[0]=e,t.colorMask[1]=i,t.colorMask[2]=r,t.colorMask[3]=o,t.realColorMask.call(n,e,i,r,o)},this.clearColor=n.getParameter(n.COLOR_CLEAR_VALUE),n.clearColor=function(e,i,r,o){t.clearColor[0]=e,t.clearColor[1]=i,t.clearColor[2]=r,t.clearColor[3]=o,t.realClearColor.call(n,e,i,r,o)},this.viewport=n.getParameter(n.VIEWPORT),n.viewport=function(e,i,r,o){t.viewport[0]=e,t.viewport[1]=i,t.viewport[2]=r,t.viewport[3]=o,t.realViewport.call(n,e,i,r,o)},this.isPatched=!0,w(e)}},P.prototype.unpatch=function(){if(this.isPatched){var t=this.gl,e=this.gl.canvas;a()||(Object.defineProperty(e,"width",this.realCanvasWidth),Object.defineProperty(e,"height",this.realCanvasHeight)),e.width=this.bufferWidth,e.height=this.bufferHeight,t.bindFramebuffer=this.realBindFramebuffer,t.enable=this.realEnable,t.disable=this.realDisable,t.colorMask=this.realColorMask,t.clearColor=this.realClearColor,t.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&t.bindFramebuffer(t.FRAMEBUFFER,null),this.isPatched=!1,setTimeout((function(){w(e)}),1)}},P.prototype.setTextureBounds=function(t,e){t||(t=[0,0,.5,1]),e||(e=[.5,0,.5,1]),this.viewportOffsetScale[0]=t[0],this.viewportOffsetScale[1]=t[1],this.viewportOffsetScale[2]=t[2],this.viewportOffsetScale[3]=t[3],this.viewportOffsetScale[4]=e[0],this.viewportOffsetScale[5]=e[1],this.viewportOffsetScale[6]=e[2],this.viewportOffsetScale[7]=e[3]},P.prototype.submitFrame=function(){var t=this.gl,e=this,n=[];if(this.dirtySubmitFrameBindings||n.push(t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING,t.ELEMENT_ARRAY_BUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0),L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null);var n=0,i=0;e.instanceExt&&(n=t.getVertexAttrib(e.attribs.position,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE),i=t.getVertexAttrib(e.attribs.texCoord,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)),e.cullFace&&e.realDisable.call(t,t.CULL_FACE),e.depthTest&&e.realDisable.call(t,t.DEPTH_TEST),e.blend&&e.realDisable.call(t,t.BLEND),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realDisable.call(t,t.STENCIL_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),(e.ctxAttribs.alpha||a())&&(e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)),t.useProgram(e.program),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.enableVertexAttribArray(e.attribs.position),t.enableVertexAttribArray(e.attribs.texCoord),t.vertexAttribPointer(e.attribs.position,2,t.FLOAT,!1,20,0),t.vertexAttribPointer(e.attribs.texCoord,3,t.FLOAT,!1,20,8),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,0),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,0)),t.activeTexture(t.TEXTURE0),t.uniform1i(e.uniforms.diffuse,0),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.uniform4fv(e.uniforms.viewportOffsetScale,e.viewportOffsetScale),t.drawElements(t.TRIANGLES,e.indexCount,t.UNSIGNED_SHORT,0),e.cardboardUI&&e.cardboardUI.renderNoState(),e.realBindFramebuffer.call(e.gl,t.FRAMEBUFFER,e.framebuffer),e.ctxAttribs.preserveDrawingBuffer||(e.realClearColor.call(t,0,0,0,0),t.clear(t.COLOR_BUFFER_BIT)),e.dirtySubmitFrameBindings||e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.cullFace&&e.realEnable.call(t,t.CULL_FACE),e.depthTest&&e.realEnable.call(t,t.DEPTH_TEST),e.blend&&e.realEnable.call(t,t.BLEND),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realEnable.call(t,t.STENCIL_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),!e.ctxAttribs.alpha&&e.ctxAttribs.preserveDrawingBuffer||e.realClearColor.apply(t,e.clearColor),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,n),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,i))})),a()){var i=t.canvas;i.width==e.bufferWidth&&i.height==e.bufferHeight||(e.bufferWidth=i.width,e.bufferHeight=i.height,e.onResize())}},P.prototype.updateDeviceInfo=function(t){var e=this.gl,n=this,i=[e.ARRAY_BUFFER_BINDING,e.ELEMENT_ARRAY_BUFFER_BINDING];L(e,i,(function(e){var i=n.computeMeshVertices_(n.meshWidth,n.meshHeight,t);if(e.bindBuffer(e.ARRAY_BUFFER,n.vertexBuffer),e.bufferData(e.ARRAY_BUFFER,i,e.STATIC_DRAW),!n.indexCount){var r=n.computeMeshIndices_(n.meshWidth,n.meshHeight);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,r,e.STATIC_DRAW),n.indexCount=r.length}}))},P.prototype.computeMeshVertices_=function(t,e,n){for(var i=new Float32Array(2*t*e*5),r=n.getLeftEyeVisibleTanAngles(),o=n.getLeftEyeNoLensTanAngles(),a=n.getLeftEyeVisibleScreenRect(o),l=0,c=0;c<2;c++){for(var h=0;hr-42&&i.clientXn.clientHeight-42?t(i):i.clientX<42&&i.clientY<42&&e(i)},n.addEventListener("click",this.listener,!1)},N.prototype.onResize=function(){var t=this.gl,e=this,n=[t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){var n=[],i=t.drawingBufferWidth/2,r=Math.max(screen.width,screen.height)*window.devicePixelRatio,o=t.drawingBufferWidth/r*window.devicePixelRatio,s=4*o/2,a=42*o,l=28*o/2,c=14*o;function h(t,e){var r=(90-t)*O,o=Math.cos(r),s=Math.sin(r);n.push(.3125*o*l+i,.3125*s*l+l),n.push(e*o*l+i,e*s*l+l)}n.push(i-s,a),n.push(i-s,t.drawingBufferHeight),n.push(i+s,a),n.push(i+s,t.drawingBufferHeight),e.gearOffset=n.length/2;for(var u=0;u<=6;u++){var d=60*u;h(d,1),h(d+12,1),h(d+20,.75),h(d+40,.75),h(d+48,1)}function p(e,i){n.push(c+e,t.drawingBufferHeight-c-i)}e.gearVertexCount=n.length/2-e.gearOffset,e.arrowOffset=n.length/2;var f=s/Math.sin(45*O);p(0,l),p(l,0),p(l+f,f),p(f,l+f),p(f,l-f),p(0,l),p(l,2*l),p(l+f,2*l-f),p(f,l-f),p(0,l),p(f,l-s),p(28*o,l-s),p(f,l+s),p(28*o,l+s),e.arrowVertexCount=n.length/2-e.arrowOffset,t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,new Float32Array(n),t.STATIC_DRAW)}))},N.prototype.render=function(){var t=this.gl,e=this,n=[t.CULL_FACE,t.DEPTH_TEST,t.BLEND,t.SCISSOR_TEST,t.STENCIL_TEST,t.COLOR_WRITEMASK,t.VIEWPORT,t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){t.disable(t.CULL_FACE),t.disable(t.DEPTH_TEST),t.disable(t.BLEND),t.disable(t.SCISSOR_TEST),t.disable(t.STENCIL_TEST),t.colorMask(!0,!0,!0,!0),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.renderNoState()}))},N.prototype.renderNoState=function(){var t,e,n,i,r,o,s,a,l,c,h=this.gl;h.useProgram(this.program),h.bindBuffer(h.ARRAY_BUFFER,this.vertexBuffer),h.enableVertexAttribArray(this.attribs.position),h.vertexAttribPointer(this.attribs.position,2,h.FLOAT,!1,8,0),h.uniform4f(this.uniforms.color,1,1,1,1),t=this.projMat,e=0,n=h.drawingBufferWidth,i=0,r=h.drawingBufferHeight,a=1/(e-n),l=1/(i-r),c=1/((o=.1)-(s=1024)),t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+n)*a,t[13]=(r+i)*l,t[14]=(s+o)*c,t[15]=1,h.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),h.drawArrays(h.TRIANGLE_STRIP,0,4),h.drawArrays(h.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),h.drawArrays(h.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},B.prototype.distortInverse=function(t){for(var e=0,n=1,i=t-this.distort(e);Math.abs(n-e)>1e-4;){var r=t-this.distort(n),o=n-r*((n-e)/(r-i));e=n,n=o,i=r}return n},B.prototype.distort=function(t){for(var e=t*t,n=0,i=0;i=1)return this.w=o,this.x=n,this.y=i,this.z=r,this;var a=Math.acos(s),l=Math.sqrt(1-s*s);if(Math.abs(l)<.001)return this.w=.5*(o+this.w),this.x=.5*(n+this.x),this.y=.5*(i+this.y),this.z=.5*(r+this.z),this;var c=Math.sin((1-e)*a)/l,h=Math.sin(e*a)/l;return this.w=o*c+this.w*h,this.x=n*c+this.x*h,this.y=i*c+this.y*h,this.z=r*c+this.z*h,this},setFromUnitVectors:function(t,e){return void 0===H&&(H=new U),(G=t.dot(e)+1)<1e-6?(G=0,Math.abs(t.x)>Math.abs(t.z)?H.set(-t.y,t.x,0):H.set(0,-t.z,t.y)):H.crossVectors(t,e),this.x=H.x,this.y=H.y,this.z=H.z,this.w=G,this.normalize(),this}};var W=new k({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),j=new k({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),X={CardboardV1:new Y({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new Y({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};function q(t,e){this.viewer=X.CardboardV2,this.updateDeviceParams(t),this.distortion=new B(this.viewer.distortionCoefficients);for(var n=0;n=200&&n.status<=299?(i.dpdb=JSON.parse(n.response),i.recalculateDeviceParams_()):console.error("Error loading online DPDB!")})),n.send()}}function J(t){this.xdpi=t.xdpi,this.ydpi=t.ydpi,this.bevelMm=t.bevelMm}function K(t,e){this.set(t,e)}function $(t,e){this.kFilter=t,this.isDebug=e,this.currentAccelMeasurement=new K,this.currentGyroMeasurement=new K,this.previousGyroMeasurement=new K,a()?this.filterQ=new V(-1,0,0,1):this.filterQ=new V(1,0,0,1),this.previousFilterQ=new V,this.previousFilterQ.copy(this.filterQ),this.accelQ=new V,this.isOrientationInitialized=!1,this.estimatedGravity=new U,this.measuredGravity=new U,this.gyroIntegralQ=new V}function tt(t,e){this.predictionTimeS=t,this.isDebug=e,this.previousQ=new V,this.previousTimestampS=null,this.deltaQ=new V,this.outQ=new V}function et(t,e,n,i){this.yawOnly=n,this.accelerometer=new U,this.gyroscope=new U,this.filter=new $(t,i),this.posePredictor=new tt(e,i),this.isFirefoxAndroid=h(),this.isIOS=a();var r=u();this.isDeviceMotionInRadians=!this.isIOS&&r&&r<66,this.isWithoutDeviceMotion=p()||d(),this.filterToWorldQ=new V,a()?this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new V,this.worldToScreenQ=new V,this.originalPoseAdjustQ=new V,this.originalPoseAdjustQ.setFromAxisAngle(new U(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),m()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new V,this.orientationOut_=new Float32Array(4),this.start()}Z.prototype.getDeviceParams=function(){return this.deviceParams},Z.prototype.recalculateDeviceParams_=function(){var t=this.calcDeviceParams_();t?(this.deviceParams=t,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},Z.prototype.calcDeviceParams_=function(){var t=this.dpdb;if(!t)return console.error("DPDB not available."),null;if(1!=t.format)return console.error("DPDB has unexpected format version."),null;if(!t.devices||!t.devices.length)return console.error("DPDB does not have a devices section."),null;var e=navigator.userAgent||navigator.vendor||window.opera,n=g(),i=v();if(!t.devices)return console.error("DPDB has no devices section."),null;for(var r=0;r1||this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)},$.prototype.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var t=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,e=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,t);this.gyroIntegralQ.multiply(e),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(e);var n=new V;n.copy(this.filterQ),n.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();var i,r=new V;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.inverse(),this.isDebug&&console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",z*((i=r).w>1?(console.warn("getQuaternionAngle: w > 1"),0):2*Math.acos(i.w)),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));var o=new V;o.copy(this.filterQ),o.multiply(r),this.filterQ.slerp(o,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)},$.prototype.getOrientation=function(){return this.filterQ},$.prototype.accelToQuaternion_=function(t){var e=new U;e.copy(t),e.normalize();var n=new V;return n.setFromUnitVectors(new U(0,0,-1),e),n.inverse(),n},$.prototype.gyroToQuaternionDelta_=function(t,e){var n=new V,i=new U;return i.copy(t),i.normalize(),n.setFromAxisAngle(i,t.length()*e),n},tt.prototype.getPrediction=function(t,e,n){if(!this.previousTimestampS)return this.previousQ.copy(t),this.previousTimestampS=n,t;var i=new U;i.copy(e),i.normalize();var r=e.length();if(r<20*F)return this.isDebug&&console.log("Moving slowly, at %s deg/s: no prediction",(z*r).toFixed(1)),this.outQ.copy(t),this.previousQ.copy(t),this.outQ;var o=r*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(i,o),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(t),this.previousTimestampS=n,this.outQ},et.prototype.getPosition=function(){return null},et.prototype.getOrientation=function(){var t=void 0;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ)return this.deviceOrientationFixQ=this.deviceOrientationFixQ||(n=(new V).setFromAxisAngle(new U(0,0,-1),0),i=new V,-90===window.orientation?i.setFromAxisAngle(new U(0,1,0),Math.PI/-2):i.setFromAxisAngle(new U(0,1,0),Math.PI/2),n.multiply(i)),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||((e=new V).setFromAxisAngle(new U(1,0,0),-Math.PI/2),e),t=this._deviceOrientationQ,(r=new V).copy(t),r.multiply(this.deviceOrientationFilterToWorldQ),r.multiply(this.resetQ),r.multiply(this.worldToScreenQ),r.multiplyQuaternions(this.deviceOrientationFixQ,r),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_;var e,n,i,r,o=this.filter.getOrientation();return t=this.posePredictor.getPrediction(o,this.gyroscope,this.previousTimestampS),(r=new V).copy(this.filterToWorldQ),r.multiply(this.resetQ),r.multiply(t),r.multiply(this.worldToScreenQ),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_},et.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),m()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)},et.prototype.onDeviceOrientation_=function(t){this._deviceOrientationQ=this._deviceOrientationQ||new V;var e=t.alpha,n=t.beta,i=t.gamma;e=(e||0)*Math.PI/180,n=(n||0)*Math.PI/180,i=(i||0)*Math.PI/180,this._deviceOrientationQ.setFromEulerYXZ(n,e,-i)},et.prototype.onDeviceMotion_=function(t){this.updateDeviceMotion_(t)},et.prototype.updateDeviceMotion_=function(t){var e=t.accelerationIncludingGravity,n=t.rotationRate,i=t.timeStamp/1e3,r=i-this.previousTimestampS;return r<0?(S("fusion-pose-sensor:invalid:non-monotonic","Invalid timestamps detected: non-monotonic timestamp from devicemotion"),void(this.previousTimestampS=i)):r<=.001||r>1?(S("fusion-pose-sensor:invalid:outside-threshold","Invalid timestamps detected: Timestamp from devicemotion outside expected range."),void(this.previousTimestampS=i)):(this.accelerometer.set(-e.x,-e.y,-e.z),n&&(f()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,i)),this.filter.addAccelMeasurement(this.accelerometer,i),void(this.previousTimestampS=i))},et.prototype.onOrientationChange_=function(t){this.setScreenTransform_()},et.prototype.onMessage_=function(t){var e=t.data;e&&e.type&&"devicemotion"===e.type.toLowerCase()&&this.updateDeviceMotion_(e.deviceMotionEvent)},et.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),Math.PI/2)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},et.prototype.start=function(){var t,e,n;this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),this.onDeviceOrientationCallback_=this.onDeviceOrientation_.bind(this),a()&&(t=window.self!==window.top,e=E(document.referrer),n=E(window.location.href),t&&e!==n)&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),this.isWithoutDeviceMotion?window.addEventListener("deviceorientation",this.onDeviceOrientationCallback_):window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},et.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("deviceorientation",this.onDeviceOrientationCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)};var nt=new U(1,0,0),it=new U(0,0,1),rt=new V;rt.setFromAxisAngle(nt,-Math.PI/2),rt.multiply((new V).setFromAxisAngle(it,Math.PI/2));var ot=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.config=e,this.sensor=null,this.fusionSensor=null,this._out=new Float32Array(4),this.api=null,this.errors=[],this._sensorQ=new V,this._outQ=new V,this._onSensorRead=this._onSensorRead.bind(this),this._onSensorError=this._onSensorError.bind(this),this.init()}return r(t,[{key:"init",value:function(){var t=null;try{(t=new RelativeOrientationSensor({frequency:60,referenceFrame:"screen"})).addEventListener("error",this._onSensorError)}catch(t){this.errors.push(t),"SecurityError"===t.name?(console.error("Cannot construct sensors due to the Feature Policy"),console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'),this.useDeviceMotion()):"ReferenceError"===t.name?this.useDeviceMotion():console.error(t)}t&&(this.api="sensor",this.sensor=t,this.sensor.addEventListener("reading",this._onSensorRead),this.sensor.start())}},{key:"useDeviceMotion",value:function(){this.api="devicemotion",this.fusionSensor=new et(this.config.K_FILTER,this.config.PREDICTION_TIME_S,this.config.YAW_ONLY,this.config.DEBUG),this.sensor&&(this.sensor.removeEventListener("reading",this._onSensorRead),this.sensor.removeEventListener("error",this._onSensorError),this.sensor=null)}},{key:"getOrientation",value:function(){if(this.fusionSensor)return this.fusionSensor.getOrientation();if(!this.sensor||!this.sensor.quaternion)return this._out[0]=this._out[1]=this._out[2]=0,this._out[3]=1,this._out;var t=this.sensor.quaternion;this._sensorQ.set(t[0],t[1],t[2],t[3]);var e=this._outQ;return e.copy(rt),e.multiply(this._sensorQ),this.config.YAW_ONLY&&(e.x=e.z=0,e.normalize()),this._out[0]=e.x,this._out[1]=e.y,this._out[2]=e.z,this._out[3]=e.w,this._out}},{key:"_onSensorError",value:function(t){this.errors.push(t.error),"NotAllowedError"===t.error.name?console.error("Permission to access sensor was denied"):"NotReadableError"===t.error.name?console.error("Sensor could not be read"):console.error(t.error),this.useDeviceMotion()}},{key:"_onSensorRead",value:function(){}}]),t}();function st(){this.loadIcon_();var t=document.createElement("div");(o=t.style).position="fixed",o.top=0,o.right=0,o.bottom=0,o.left=0,o.backgroundColor="gray",o.fontFamily="sans-serif",o.zIndex=1e6;var e=document.createElement("img");e.src=this.icon,(o=e.style).marginLeft="25%",o.marginTop="25%",o.width="50%",t.appendChild(e);var n=document.createElement("div");(o=n.style).textAlign="center",o.fontSize="16px",o.lineHeight="24px",o.margin="24px 25%",o.width="50%",n.innerHTML="Place your phone into your Cardboard viewer.",t.appendChild(n);var i=document.createElement("div");(o=i.style).backgroundColor="#CFD8DC",o.position="fixed",o.bottom=0,o.width="100%",o.height="48px",o.padding="14px 24px",o.boxSizing="border-box",o.color="#656A6B",t.appendChild(i);var r=document.createElement("div");r.style.float="left",r.innerHTML="No Cardboard viewer?";var o,s=document.createElement("a");s.href="https://www.google.com/get/cardboard/get-cardboard/",s.innerHTML="get one",s.target="_blank",(o=s.style).float="right",o.fontWeight=600,o.textTransform="uppercase",o.borderLeft="1px solid gray",o.paddingLeft="24px",o.textDecoration="none",o.color="#656A6B",i.appendChild(r),i.appendChild(s),this.overlay=t,this.text=n,this.hide()}function at(t){try{this.selectedKey=localStorage.getItem("WEBVR_CARDBOARD_VIEWER")}catch(t){console.error("Failed to load viewer profile: %s",t)}this.selectedKey||(this.selectedKey=t||"CardboardV1"),this.dialog=this.createDialog_(q.Viewers),this.root=null,this.onChangeCallbacks_=[]}st.prototype.show=function(t){t||this.overlay.parentElement?t&&(this.overlay.parentElement&&this.overlay.parentElement!=t&&this.overlay.parentElement.removeChild(this.overlay),t.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var e=this.overlay.querySelector("img").style;m()?(e.width="20%",e.marginLeft="40%",e.marginTop="3%"):(e.width="50%",e.marginLeft="25%",e.marginTop="25%")},st.prototype.hide=function(){this.overlay.style.display="none"},st.prototype.showTemporarily=function(t,e){this.show(e),this.timer=setTimeout(this.hide.bind(this),t)},st.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},st.prototype.update=function(){this.disableShowTemporarily(),!m()&&_()?this.show():this.hide()},st.prototype.loadIcon_=function(){this.icon="data:image/svg+xml,"+encodeURIComponent("")},at.prototype.show=function(t){this.root=t,t.appendChild(this.dialog),this.dialog.querySelector("#"+this.selectedKey).checked=!0,this.dialog.style.display="block"},at.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},at.prototype.getCurrentViewer=function(){return q.Viewers[this.selectedKey]},at.prototype.getSelectedKey_=function(){var t=this.dialog.querySelector("input[name=field]:checked");return t?t.id:null},at.prototype.onChange=function(t){this.onChangeCallbacks_.push(t)},at.prototype.fireOnChange_=function(t){for(var e=0;e.5&&(this.noSleepVideo.currentTime=Math.random())}.bind(this)))}return i(t,[{key:"enable",value:function(){o?(this.disable(),this.noSleepTimer=window.setInterval((function(){window.location.href="/",window.setTimeout(window.stop,0)}),15e3)):this.noSleepVideo.play()}},{key:"disable",value:function(){o?this.noSleepTimer&&(window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]),t}();t.exports=s},function(t,e,n){t.exports="data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="}])}))})))&<.__esModule&&Object.prototype.hasOwnProperty.call(lt,"default")?lt.default:lt,ht=1e3,ut=[0,0,.5,1],dt=[.5,0,.5,1],pt=window.requestAnimationFrame,ft=window.cancelAnimationFrame;function mt(t){Object.defineProperties(this,{hasPosition:{writable:!1,enumerable:!0,value:t.hasPosition},hasExternalDisplay:{writable:!1,enumerable:!0,value:t.hasExternalDisplay},canPresent:{writable:!1,enumerable:!0,value:t.canPresent},maxLayers:{writable:!1,enumerable:!0,value:t.maxLayers},hasOrientation:{enumerable:!0,get:function(){return T("VRDisplayCapabilities.prototype.hasOrientation","VRDisplay.prototype.getFrameData"),t.hasOrientation}}})}function gt(t){var e=!("wakelock"in(t=t||{}))||t.wakelock;this.isPolyfilled=!0,this.displayId=ht++,this.displayName="",this.depthNear=.01,this.depthFar=1e4,this.isPresenting=!1,Object.defineProperty(this,"isConnected",{get:function(){return T("VRDisplay.prototype.isConnected","VRDisplayCapabilities.prototype.hasExternalDisplay"),!1}}),this.capabilities=new mt({hasPosition:!1,hasOrientation:!1,hasExternalDisplay:!1,canPresent:!1,maxLayers:1}),this.stageParameters=null,this.waitingForPresent_=!1,this.layer_=null,this.originalParent_=null,this.fullscreenElement_=null,this.fullscreenWrapper_=null,this.fullscreenElementCachedStyle_=null,this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null,e&&_()&&(this.wakelock_=new ct)}gt.prototype.getFrameData=function(t){return M(t,this._getPose(),this)},gt.prototype.getPose=function(){return T("VRDisplay.prototype.getPose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.resetPose=function(){return T("VRDisplay.prototype.resetPose"),this._resetPose()},gt.prototype.getImmediatePose=function(){return T("VRDisplay.prototype.getImmediatePose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.requestAnimationFrame=function(t){return pt(t)},gt.prototype.cancelAnimationFrame=function(t){return ft(t)},gt.prototype.wrapForFullscreen=function(t){if(a())return t;if(!this.fullscreenWrapper_){this.fullscreenWrapper_=document.createElement("div");var e=["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important","left: 0 !important","right: 0 !important","border: 0","margin: 0","padding: 0","z-index: 999999 !important","position: fixed"];this.fullscreenWrapper_.setAttribute("style",e.join("; ")+";"),this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")}if(this.fullscreenElement_==t)return this.fullscreenWrapper_;if(this.fullscreenElement_&&(this.originalParent_?this.originalParent_.appendChild(this.fullscreenElement_):this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)),this.fullscreenElement_=t,this.originalParent_=t.parentElement,this.originalParent_||document.body.appendChild(t),!this.fullscreenWrapper_.parentElement){var n=this.fullscreenElement_.parentElement;n.insertBefore(this.fullscreenWrapper_,this.fullscreenElement_),n.removeChild(this.fullscreenElement_)}this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild),this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");var i=this;return function(){if(i.fullscreenElement_){var t=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0"];i.fullscreenElement_.setAttribute("style",t.join("; ")+";")}}(),this.fullscreenWrapper_},gt.prototype.removeFullscreenWrapper=function(){if(this.fullscreenElement_){var t=this.fullscreenElement_;this.fullscreenElementCachedStyle_?t.setAttribute("style",this.fullscreenElementCachedStyle_):t.removeAttribute("style"),this.fullscreenElement_=null,this.fullscreenElementCachedStyle_=null;var e=this.fullscreenWrapper_.parentElement;return this.fullscreenWrapper_.removeChild(t),this.originalParent_===e?e.insertBefore(t,this.fullscreenWrapper_):this.originalParent_&&this.originalParent_.appendChild(t),e.removeChild(this.fullscreenWrapper_),t}},gt.prototype.requestPresent=function(t){var e=this.isPresenting,n=this;return t instanceof Array||(T("VRDisplay.prototype.requestPresent with non-array argument","an array of VRLayers as the first argument"),t=[t]),new Promise((function(i,r){if(n.capabilities.canPresent)if(0==t.length||t.length>n.capabilities.maxLayers)r(new Error("Invalid number of layers."));else{var o=t[0];if(o.source){var s=o.leftBounds||ut,c=o.rightBounds||dt;if(e){var h=n.layer_;h.source!==o.source&&(h.source=o.source);for(var u=0;u<4;u++)h.leftBounds[u]=s[u],h.rightBounds[u]=c[u];return n.wrapForFullscreen(n.layer_.source),n.updatePresent_(),void i()}if(n.layer_={predistorted:o.predistorted,source:o.source,leftBounds:s.slice(0),rightBounds:c.slice(0)},n.waitingForPresent_=!1,n.layer_&&n.layer_.source){var d=n.wrapForFullscreen(n.layer_.source);n.addFullscreenListeners_(d,(function(){var t=document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;n.isPresenting=d===t,n.isPresenting?(screen.orientation&&screen.orientation.lock&&screen.orientation.lock("landscape-primary").catch((function(t){console.error("screen.orientation.lock() failed due to",t.message)})),n.waitingForPresent_=!1,n.beginPresent_(),i()):(screen.orientation&&screen.orientation.unlock&&screen.orientation.unlock(),n.removeFullscreenWrapper(),n.disableWakeLock(),n.endPresent_(),n.removeFullscreenListeners_()),n.fireVRDisplayPresentChange_()}),(function(){n.waitingForPresent_&&(n.removeFullscreenWrapper(),n.removeFullscreenListeners_(),n.disableWakeLock(),n.waitingForPresent_=!1,n.isPresenting=!1,r(new Error("Unable to present.")))})),function(t){if(l())return!1;if(t.requestFullscreen)t.requestFullscreen();else if(t.webkitRequestFullscreen)t.webkitRequestFullscreen();else if(t.mozRequestFullScreen)t.mozRequestFullScreen();else{if(!t.msRequestFullscreen)return!1;t.msRequestFullscreen()}return!0}(d)?(n.enableWakeLock(),n.waitingForPresent_=!0):(a()||l())&&(n.enableWakeLock(),n.isPresenting=!0,n.beginPresent_(),n.fireVRDisplayPresentChange_(),i())}n.waitingForPresent_||a()||(y(),r(new Error("Unable to present.")))}else i()}else r(new Error("VRDisplay is not capable of presenting."))}))},gt.prototype.exitPresent=function(){var t=this.isPresenting,e=this;return this.isPresenting=!1,this.layer_=null,this.disableWakeLock(),new Promise((function(n,i){t?(!y()&&a()&&(e.endPresent_(),e.fireVRDisplayPresentChange_()),l()&&(e.removeFullscreenWrapper(),e.removeFullscreenListeners_(),e.endPresent_(),e.fireVRDisplayPresentChange_()),n()):i(new Error("Was not presenting to VRDisplay."))}))},gt.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},gt.prototype.fireVRDisplayPresentChange_=function(){var t=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.fireVRDisplayConnect_=function(){var t=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.addFullscreenListeners_=function(t,e,n){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=t,this.fullscreenChangeHandler_=e,this.fullscreenErrorHandler_=n,e&&(document.fullscreenEnabled?t.addEventListener("fullscreenchange",e,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenchange",e,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",e,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenchange",e,!1)),n&&(document.fullscreenEnabled?t.addEventListener("fullscreenerror",n,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenerror",n,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",n,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenerror",n,!1))},gt.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var t=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var e=this.fullscreenChangeHandler_;t.removeEventListener("fullscreenchange",e,!1),t.removeEventListener("webkitfullscreenchange",e,!1),document.removeEventListener("mozfullscreenchange",e,!1),t.removeEventListener("msfullscreenchange",e,!1)}if(this.fullscreenErrorHandler_){var n=this.fullscreenErrorHandler_;t.removeEventListener("fullscreenerror",n,!1),t.removeEventListener("webkitfullscreenerror",n,!1),document.removeEventListener("mozfullscreenerror",n,!1),t.removeEventListener("msfullscreenerror",n,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},gt.prototype.enableWakeLock=function(){this.wakelock_&&this.wakelock_.enable()},gt.prototype.disableWakeLock=function(){this.wakelock_&&this.wakelock_.disable()},gt.prototype.beginPresent_=function(){},gt.prototype.endPresent_=function(){},gt.prototype.submitFrame=function(t){},gt.prototype.getEyeParameters=function(t){return null};var vt={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1},yt="left",At="right";function xt(t){var e=b({},vt);t=b(e,t||{}),gt.call(this,{wakelock:t.MOBILE_WAKE_LOCK}),this.config=t,this.displayName="Cardboard VRDisplay",this.capabilities=new mt({hasPosition:!1,hasOrientation:!0,hasExternalDisplay:!1,canPresent:!0,maxLayers:1}),this.stageParameters=null,this.bufferScale_=this.config.BUFFER_SCALE,this.poseSensor_=new ot(this.config),this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new Z(this.config.DPDB_URL,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new q(this.dpdb_.getDeviceParams(),t.ADDITIONAL_VIEWERS),this.viewerSelector_=new at(t.DEFAULT_VIEWER),this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),this.config.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new st),a()&&window.addEventListener("resize",this.onResize_.bind(this))}return xt.prototype=Object.create(gt.prototype),xt.prototype._getPose=function(){return{position:null,orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},xt.prototype._resetPose=function(){this.poseSensor_.resetPose&&this.poseSensor_.resetPose()},xt.prototype._getFieldOfView=function(t){var e;if(t==yt)e=this.deviceInfo_.getFieldOfViewLeftEye();else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=this.deviceInfo_.getFieldOfViewRightEye()}return e},xt.prototype._getEyeOffset=function(t){var e;if(t==yt)e=[.5*-this.deviceInfo_.viewer.interLensDistance,0,0];else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=[.5*this.deviceInfo_.viewer.interLensDistance,0,0]}return e},xt.prototype.getEyeParameters=function(t){var e=this._getEyeOffset(t),n=this._getFieldOfView(t),i={offset:e,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_};return Object.defineProperty(i,"fieldOfView",{enumerable:!0,get:function(){return T("VRFieldOfView","VRFrameData's projection matrices"),n}}),i},xt.prototype.onDeviceParamsUpdated_=function(t){this.config.DEBUG&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},xt.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},xt.prototype.beginPresent_=function(){var t=this.layer_.source.getContext("webgl");t||(t=this.layer_.source.getContext("experimental-webgl")),t||(t=this.layer_.source.getContext("webgl2")),t&&(this.layer_.predistorted?this.config.CARDBOARD_UI_DISABLED||(t.canvas.width=g()*this.bufferScale_,t.canvas.height=v()*this.bufferScale_,this.cardboardUI_=new N(t)):(this.config.CARDBOARD_UI_DISABLED||(this.cardboardUI_=new N(t)),this.distorter_=new P(t,this.cardboardUI_,this.config.BUFFER_SCALE,this.config.DIRTY_SUBMIT_FRAME_BINDINGS),this.distorter_.updateDeviceInfo(this.deviceInfo_)),this.cardboardUI_&&this.cardboardUI_.listen(function(t){this.viewerSelector_.show(this.layer_.source.parentElement),t.stopPropagation(),t.preventDefault()}.bind(this),function(t){this.exitPresent(),t.stopPropagation(),t.preventDefault()}.bind(this)),this.rotateInstructions_&&(m()&&_()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},xt.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},xt.prototype.updatePresent_=function(){this.endPresent_(),this.beginPresent_()},xt.prototype.submitFrame=function(t){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2"));var n=e.canvas;n.width==this.lastWidth&&n.height==this.lastHeight||this.cardboardUI_.onResize(),this.lastWidth=n.width,this.lastHeight=n.height,this.cardboardUI_.render()}},xt.prototype.onOrientationChange_=function(t){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},xt.prototype.onResize_=function(t){if(this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2")),e.canvas.setAttribute("style",["position: absolute","top: 0","left: 0","width: 100vw","height: 100vh","border: 0","margin: 0","padding: 0px","box-sizing: content-box"].join("; ")+";"),w(e.canvas)}},xt.prototype.onViewerChanged_=function(t){this.deviceInfo_.setViewer(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},xt.prototype.fireVRDisplayDeviceParamsChange_=function(){var t=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(t)},xt.VRFrameData=function(){this.leftProjectionMatrix=new Float32Array(16),this.leftViewMatrix=new Float32Array(16),this.rightProjectionMatrix=new Float32Array(16),this.rightViewMatrix=new Float32Array(16),this.pose=null},xt.VRDisplay=gt,xt}()})))&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,a={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",PROVIDE_MOBILE_VRDISPLAY:!0,MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1};function l(t){this.config=o(o({},a),t),this.polyfillDisplays=[],this.enabled=!1,this.hasNative="getVRDisplays"in navigator,this.native={},this.native.getVRDisplays=navigator.getVRDisplays,this.native.VRFrameData=window.VRFrameData,this.native.VRDisplay=window.VRDisplay,(!this.hasNative||this.config.PROVIDE_MOBILE_VRDISPLAY&&n())&&(this.enable(),this.getVRDisplays().then((function(t){t&&t[0]&&t[0].fireVRDisplayConnect_&&t[0].fireVRDisplayConnect_()})))}l.prototype.getPolyfillDisplays=function(){if(this._polyfillDisplaysPopulated)return this.polyfillDisplays;if(n()){var t=new s({ADDITIONAL_VIEWERS:this.config.ADDITIONAL_VIEWERS,DEFAULT_VIEWER:this.config.DEFAULT_VIEWER,MOBILE_WAKE_LOCK:this.config.MOBILE_WAKE_LOCK,DEBUG:this.config.DEBUG,DPDB_URL:this.config.DPDB_URL,CARDBOARD_UI_DISABLED:this.config.CARDBOARD_UI_DISABLED,K_FILTER:this.config.K_FILTER,PREDICTION_TIME_S:this.config.PREDICTION_TIME_S,ROTATE_INSTRUCTIONS_DISABLED:this.config.ROTATE_INSTRUCTIONS_DISABLED,YAW_ONLY:this.config.YAW_ONLY,BUFFER_SCALE:this.config.BUFFER_SCALE,DIRTY_SUBMIT_FRAME_BINDINGS:this.config.DIRTY_SUBMIT_FRAME_BINDINGS});this.polyfillDisplays.push(t)}return this._polyfillDisplaysPopulated=!0,this.polyfillDisplays},l.prototype.enable=function(){if(this.enabled=!0,this.hasNative&&this.native.VRFrameData){var t=this.native.VRFrameData,e=new this.native.VRFrameData,n=this.native.VRDisplay.prototype.getFrameData;window.VRDisplay.prototype.getFrameData=function(i){i instanceof t?n.call(this,i):(n.call(this,e),i.pose=e.pose,r(e.leftProjectionMatrix,i.leftProjectionMatrix),r(e.rightProjectionMatrix,i.rightProjectionMatrix),r(e.leftViewMatrix,i.leftViewMatrix),r(e.rightViewMatrix,i.rightViewMatrix))}}navigator.getVRDisplays=this.getVRDisplays.bind(this),window.VRDisplay=s.VRDisplay,window.VRFrameData=s.VRFrameData},l.prototype.getVRDisplays=function(){var t=this;return this.config,this.hasNative?this.native.getVRDisplays.call(navigator).then((function(e){return e.length>0?e:t.getPolyfillDisplays()})):Promise.resolve(this.getPolyfillDisplays())},l.version="0.10.12",l.VRFrameData=s.VRFrameData,l.VRDisplay=s.VRDisplay;var c=Object.freeze({default:l}),h=c&&l||c;return void 0!==e&&e.window&&(e.document||(e.document=e.window.document),e.navigator||(e.navigator=e.window.navigator)),h}()})));const h=0,u=1,d=2;function p(){}Object.assign(p.prototype,{addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)},hasEventListener:function(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)},removeEventListener:function(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}},dispatchEvent:function(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e>8&255]+f[t>>16&255]+f[t>>24&255]+"-"+f[255&e]+f[e>>8&255]+"-"+f[e>>16&15|64]+f[e>>24&255]+"-"+f[63&n|128]+f[n>>8&255]+"-"+f[n>>16&255]+f[n>>24&255]+f[255&i]+f[i>>8&255]+f[i>>16&255]+f[i>>24&255]).toUpperCase()},clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},damp:function(t,e,n,i){return g.lerp(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(g.euclideanModulo(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(m=t%2147483647),m=16807*m%2147483647,(m-1)/2147483646},degToRad:function(t){return t*g.DEG2RAD},radToDeg:function(t){return t*g.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,n,i,r){const o=Math.cos,s=Math.sin,a=o(n/2),l=s(n/2),c=o((e+i)/2),h=s((e+i)/2),u=o((e-i)/2),d=s((e-i)/2),p=o((i-e)/2),f=s((i-e)/2);switch(r){case"XYX":t.set(a*h,l*u,l*d,a*c);break;case"YZY":t.set(l*d,a*h,l*u,a*c);break;case"ZXZ":t.set(l*u,l*d,a*h,a*c);break;case"XZX":t.set(a*h,l*f,l*p,a*c);break;case"YXY":t.set(l*p,a*h,l*f,a*c);break;case"ZYZ":t.set(l*f,l*p,a*h,a*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}};class v{constructor(t=0,e=0){Object.defineProperty(this,"isVector2",{value:!0}),this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,o=this.y-t.y;return this.x=r*n-o*i+t.x,this.y=r*i+o*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}class y{constructor(){Object.defineProperty(this,"isMatrix3",{value:!0}),this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=s,c[3]=e,c[4]=r,c[5]=a,c[6]=n,c[7]=o,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}clone(){return(new this.constructor).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[3],a=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],A=i[7],x=i[2],_=i[5],b=i[8];return r[0]=o*f+s*v+a*x,r[3]=o*m+s*y+a*_,r[6]=o*g+s*A+a*b,r[1]=l*f+c*v+h*x,r[4]=l*m+c*y+h*_,r[7]=l*g+c*A+h*b,r[2]=u*f+d*v+p*x,r[5]=u*m+d*y+p*_,r[8]=u*g+d*A+p*b,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8];return e*o*c-e*s*l-n*r*c+n*s*a+i*r*l-i*o*a}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=c*o-s*l,u=s*a-c*r,d=l*r-o*a,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=h*f,t[1]=(i*l-c*n)*f,t[2]=(s*n-i*o)*f,t[3]=u*f,t[4]=(c*e-i*a)*f,t[5]=(i*r-s*e)*f,t[6]=d*f,t[7]=(n*a-l*e)*f,t[8]=(o*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).copy(this).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,o,s){const a=Math.cos(r),l=Math.sin(r);return this.set(n*a,n*l,-n*(a*o+l*s)+o+t,-i*l,i*a,-i*(-l*o+a*s)+s+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],o=i[3],s=i[6],a=i[1],l=i[4],c=i[7];return i[0]=e*r+n*a,i[3]=e*o+n*l,i[6]=e*s+n*c,i[1]=-n*r+e*a,i[4]=-n*o+e*l,i[7]=-n*s+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}}let A;const x={getDataURL:function(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===A&&(A=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),A.width=t.width,A.height=t.height;const n=A.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=A}return e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}};let _=0;function b(t=b.DEFAULT_IMAGE,e=b.DEFAULT_MAPPING,n=1001,i=1001,r=1006,o=1008,s=1023,a=1009,l=1,c=3e3){Object.defineProperty(this,"id",{value:_++}),this.uuid=g.generateUUID(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=a,this.offset=new v(0,0),this.repeat=new v(1,1),this.center=new v(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new y,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}function w(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?x.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}b.DEFAULT_IMAGE=void 0,b.DEFAULT_MAPPING=300,b.prototype=Object.assign(Object.create(p.prototype),{constructor:b,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=g.generateUUID()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case 1e3:t.x=t.x-Math.floor(t.x);break;case 1001:t.x=t.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case 1e3:t.y=t.y-Math.floor(t.y);break;case 1001:t.y=t.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(b.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}});class M{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isVector4",{value:!0}),this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*i+o[12]*r,this.y=o[1]*e+o[5]*n+o[9]*i+o[13]*r,this.z=o[2]*e+o[6]*n+o[10]*i+o[14]*r,this.w=o[3]*e+o[7]*n+o[11]*i+o[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const o=t.elements,s=o[0],a=o[4],l=o[8],c=o[1],h=o[5],u=o[9],d=o[2],p=o[6],f=o[10];if(Math.abs(a-c)<.01&&Math.abs(l-d)<.01&&Math.abs(u-p)<.01){if(Math.abs(a+c)<.1&&Math.abs(l+d)<.1&&Math.abs(u+p)<.1&&Math.abs(s+h+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const t=(s+1)/2,o=(h+1)/2,m=(f+1)/2,g=(a+c)/4,v=(l+d)/4,y=(u+p)/4;return t>o&&t>m?t<.01?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=g/n,r=v/n):o>m?o<.01?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(o),n=g/i,r=y/i):m<.01?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(m),n=v/r,i=y/r),this.set(n,i,r,e),this}let m=Math.sqrt((p-u)*(p-u)+(l-d)*(l-d)+(c-a)*(c-a));return Math.abs(m)<.001&&(m=1),this.x=(p-u)/m,this.y=(l-d)/m,this.z=(c-a)/m,this.w=Math.acos((s+h+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}}class E extends p{constructor(t,e,n){super(),Object.defineProperty(this,"isWebGLRenderTarget",{value:!0}),this.width=t,this.height=e,this.scissor=new M(0,0,t,e),this.scissorTest=!1,this.viewport=new M(0,0,t,e),n=n||{},this.texture=new b(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.image={},this.texture.image.width=t,this.texture.image.height=e,this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:1006,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setSize(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.texture.image.width=t,this.texture.image.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:"dispose"})}}class S{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isQuaternion",{value:!0}),this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return n.copy(t).slerp(e,i)}static slerpFlat(t,e,n,i,r,o,s){let a=n[i+0],l=n[i+1],c=n[i+2],h=n[i+3];const u=r[o+0],d=r[o+1],p=r[o+2],f=r[o+3];if(h!==f||a!==u||l!==d||c!==p){let t=1-s;const e=a*u+l*d+c*p+h*f,n=e>=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),o=Math.atan2(r,e*n);t=Math.sin(t*o)/r,s=Math.sin(s*o)/r}const r=s*n;if(a=a*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+f*r,t===1-s){const t=1/Math.sqrt(a*a+l*l+c*c+h*h);a*=t,l*=t,c*=t,h*=t}}t[e]=a,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,o){const s=n[i],a=n[i+1],l=n[i+2],c=n[i+3],h=r[o],u=r[o+1],d=r[o+2],p=r[o+3];return t[e]=s*p+c*h+a*d-l*u,t[e+1]=a*p+c*u+l*h-s*d,t[e+2]=l*p+c*d+s*u-a*h,t[e+3]=c*p-s*h-a*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,o=t._order,s=Math.cos,a=Math.sin,l=s(n/2),c=s(i/2),h=s(r/2),u=a(n/2),d=a(i/2),p=a(r/2);switch(o){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+o)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],o=e[1],s=e[5],a=e[9],l=e[2],c=e[6],h=e[10],u=n+s+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-a)*t,this._y=(r-l)*t,this._z=(o-i)*t}else if(n>s&&n>h){const t=2*Math.sqrt(1+n-s-h);this._w=(c-a)/t,this._x=.25*t,this._y=(i+o)/t,this._z=(r+l)/t}else if(s>h){const t=2*Math.sqrt(1+s-n-h);this._w=(r-l)/t,this._x=(i+o)/t,this._y=.25*t,this._z=(a+c)/t}else{const t=2*Math.sqrt(1+h-n-s);this._w=(o-i)/t,this._x=(r+l)/t,this._y=(a+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-6?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(g.clamp(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,o=t._w,s=e._x,a=e._y,l=e._z,c=e._w;return this._x=n*c+o*s+i*l-r*a,this._y=i*c+o*a+r*s-n*l,this._z=r*c+o*l+n*a-i*s,this._w=o*c-n*s-i*a-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,o=this._w;let s=o*t._w+n*t._x+i*t._y+r*t._z;if(s<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,s=-s):this.copy(t),s>=1)return this._w=o,this._x=n,this._y=i,this._z=r,this;const a=1-s*s;if(a<=Number.EPSILON){const t=1-e;return this._w=t*o+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(a),c=Math.atan2(l,s),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=o*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}class T{constructor(t=0,e=0,n=0){Object.defineProperty(this,"isVector3",{value:!0}),this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(R.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(R.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,o=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*o,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*o,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*o,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,o=t.y,s=t.z,a=t.w,l=a*e+o*i-s*n,c=a*n+s*e-r*i,h=a*i+r*n-o*e,u=-r*e-o*n-s*i;return this.x=l*a+u*-r+c*-s-h*-o,this.y=c*a+u*-o+h*-r-l*-s,this.z=h*a+u*-s+l*-o-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,o=e.x,s=e.y,a=e.z;return this.x=i*a-r*s,this.y=r*o-n*a,this.z=n*s-i*o,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return L.copy(this).projectOnVector(t),this.sub(L)}reflect(t){return this.sub(L.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(g.clamp(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}const L=new T,R=new S;class C{constructor(t,e){Object.defineProperty(this,"isBox3",{value:!0}),this.min=void 0!==t?t:new T(1/0,1/0,1/0),this.max=void 0!==e?e:new T(-1/0,-1/0,-1/0)}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.length;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.count;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new T),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,I),I.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(G),V.subVectors(this.max,G),N.subVectors(t.a,G),B.subVectors(t.b,G),F.subVectors(t.c,G),z.subVectors(B,N),U.subVectors(F,B),H.subVectors(N,F);let e=[0,-z.z,z.y,0,-U.z,U.y,0,-H.z,H.y,z.z,0,-z.x,U.z,0,-U.x,H.z,0,-H.x,-z.y,z.x,0,-U.y,U.x,0,-H.y,H.x,0];return!!P(e,N,B,F,V)&&(e=[1,0,0,0,1,0,0,0,1],!!P(e,N,B,F,V)&&(k.crossVectors(z,U),e=[k.x,k.y,k.z],P(e,N,B,F,V)))}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new T),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return I.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(I).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(D[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),D[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),D[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),D[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),D[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),D[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),D[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),D[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(D)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}function P(t,e,n,i,r){for(let o=0,s=t.length-3;o<=s;o+=3){W.fromArray(t,o);const s=r.x*Math.abs(W.x)+r.y*Math.abs(W.y)+r.z*Math.abs(W.z),a=e.dot(W),l=n.dot(W),c=i.dot(W);if(Math.max(-Math.max(a,l,c),Math.min(a,l,c))>s)return!1}return!0}const D=[new T,new T,new T,new T,new T,new T,new T,new T],I=new T,O=new C,N=new T,B=new T,F=new T,z=new T,U=new T,H=new T,G=new T,V=new T,k=new T,W=new T,j=new C;class X{constructor(t,e){this.center=void 0!==t?t:new T,this.radius=void 0!==e?e:-1}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):j.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new C),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}}const q=new T,Y=new T,Q=new T,Z=new T,J=new T,K=new T,$=new T;class tt{constructor(t,e){this.origin=void 0!==t?t:new T,this.direction=void 0!==e?e:new T(0,0,-1)}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new T),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,q)),this}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new T),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=q.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(q.copy(this.direction).multiplyScalar(e).add(this.origin),q.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Y.copy(t).add(e).multiplyScalar(.5),Q.copy(e).sub(t).normalize(),Z.copy(this.origin).sub(Y);const r=.5*t.distanceTo(e),o=-this.direction.dot(Q),s=Z.dot(this.direction),a=-Z.dot(Q),l=Z.lengthSq(),c=Math.abs(1-o*o);let h,u,d,p;if(c>0)if(h=o*a-s,u=o*s-a,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+o*u+2*s)+u*(o*h+u+2*a)+l}else u=r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u=-r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u<=-p?(h=Math.max(0,-(-o*r+s)),u=h>0?-r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-a),r),d=u*(u+2*a)+l):(h=Math.max(0,-(o*r+s)),u=h>0?r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l);else u=o>0?-r:r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(Q).multiplyScalar(u).add(Y),d}intersectSphere(t,e){q.subVectors(t.center,this.origin);const n=q.dot(this.direction),i=q.dot(q)-n*n,r=t.radius*t.radius;if(i>r)return null;const o=Math.sqrt(r-i),s=n-o,a=n+o;return s<0&&a<0?null:s<0?this.at(a,e):this.at(s,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,o,s,a;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,o=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,o=(t.min.y-u.y)*c),n>o||r>i?null:((r>n||n!=n)&&(n=r),(o=0?(s=(t.min.z-u.z)*h,a=(t.max.z-u.z)*h):(s=(t.max.z-u.z)*h,a=(t.min.z-u.z)*h),n>a||s>i?null:((s>n||n!=n)&&(n=s),(a=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,q)}intersectTriangle(t,e,n,i,r){J.subVectors(e,t),K.subVectors(n,t),$.crossVectors(J,K);let o,s=this.direction.dot($);if(s>0){if(i)return null;o=1}else{if(!(s<0))return null;o=-1,s=-s}Z.subVectors(this.origin,t);const a=o*this.direction.dot(K.crossVectors(Z,K));if(a<0)return null;const l=o*this.direction.dot(J.cross(Z));if(l<0)return null;if(a+l>s)return null;const c=-o*Z.dot($);return c<0?null:this.at(c/s,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}class et{constructor(){Object.defineProperty(this,"isMatrix4",{value:!0}),this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l,c,h,u,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=o,g[9]=s,g[13]=a,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new et).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/nt.setFromMatrixColumn(t,0).length(),r=1/nt.setFromMatrixColumn(t,1).length(),o=1/nt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*o,e[9]=n[9]*o,e[10]=n[10]*o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,o=Math.cos(n),s=Math.sin(n),a=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=-a*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-s*a,e[2]=r-t*l,e[6]=i+n*l,e[10]=o*a}else if("YXZ"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t+r*s,e[4]=i*s-n,e[8]=o*l,e[1]=o*h,e[5]=o*c,e[9]=-s,e[2]=n*s-i,e[6]=r+t*s,e[10]=o*a}else if("ZXY"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t-r*s,e[4]=-o*h,e[8]=i+n*s,e[1]=n+i*s,e[5]=o*c,e[9]=r-t*s,e[2]=-o*l,e[6]=s,e[10]=o*a}else if("ZYX"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=a*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=s*a,e[10]=o*a}else if("YZX"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=o*c,e[9]=-s*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=o*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=s*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(rt,t,ot)}lookAt(t,e,n){const i=this.elements;return lt.subVectors(t,e),0===lt.lengthSq()&&(lt.z=1),lt.normalize(),st.crossVectors(n,lt),0===st.lengthSq()&&(1===Math.abs(n.z)?lt.x+=1e-4:lt.z+=1e-4,lt.normalize(),st.crossVectors(n,lt)),st.normalize(),at.crossVectors(lt,st),i[0]=st.x,i[4]=at.x,i[8]=lt.x,i[1]=st.y,i[5]=at.y,i[9]=lt.y,i[2]=st.z,i[6]=at.z,i[10]=lt.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[4],a=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],A=n[11],x=n[15],_=i[0],b=i[4],w=i[8],M=i[12],E=i[1],S=i[5],T=i[9],L=i[13],R=i[2],C=i[6],P=i[10],D=i[14],I=i[3],O=i[7],N=i[11],B=i[15];return r[0]=o*_+s*E+a*R+l*I,r[4]=o*b+s*S+a*C+l*O,r[8]=o*w+s*T+a*P+l*N,r[12]=o*M+s*L+a*D+l*B,r[1]=c*_+h*E+u*R+d*I,r[5]=c*b+h*S+u*C+d*O,r[9]=c*w+h*T+u*P+d*N,r[13]=c*M+h*L+u*D+d*B,r[2]=p*_+f*E+m*R+g*I,r[6]=p*b+f*S+m*C+g*O,r[10]=p*w+f*T+m*P+g*N,r[14]=p*M+f*L+m*D+g*B,r[3]=v*_+y*E+A*R+x*I,r[7]=v*b+y*S+A*C+x*O,r[11]=v*w+y*T+A*P+x*N,r[15]=v*M+y*L+A*D+x*B,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],o=t[1],s=t[5],a=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*a*h-i*l*h-r*s*u+n*l*u+i*s*d-n*a*d)+t[7]*(+e*a*d-e*l*u+r*o*u-i*o*d+i*l*c-r*a*c)+t[11]*(+e*l*h-e*s*d-r*o*h+n*o*d+r*s*c-n*l*c)+t[15]*(-i*s*c-e*a*h+e*s*u+i*o*h-n*o*u+n*a*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=h*m*l-f*u*l+f*a*d-s*m*d-h*a*g+s*u*g,y=p*u*l-c*m*l-p*a*d+o*m*d+c*a*g-o*u*g,A=c*f*l-p*h*l+p*s*d-o*f*d-c*s*g+o*h*g,x=p*h*a-c*f*a-p*s*u+o*f*u+c*s*m-o*h*m,_=e*v+n*y+i*A+r*x;if(0===_)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const b=1/_;return t[0]=v*b,t[1]=(f*u*r-h*m*r-f*i*d+n*m*d+h*i*g-n*u*g)*b,t[2]=(s*m*r-f*a*r+f*i*l-n*m*l-s*i*g+n*a*g)*b,t[3]=(h*a*r-s*u*r-h*i*l+n*u*l+s*i*d-n*a*d)*b,t[4]=y*b,t[5]=(c*m*r-p*u*r+p*i*d-e*m*d-c*i*g+e*u*g)*b,t[6]=(p*a*r-o*m*r-p*i*l+e*m*l+o*i*g-e*a*g)*b,t[7]=(o*u*r-c*a*r+c*i*l-e*u*l-o*i*d+e*a*d)*b,t[8]=A*b,t[9]=(p*h*r-c*f*r-p*n*d+e*f*d+c*n*g-e*h*g)*b,t[10]=(o*f*r-p*s*r+p*n*l-e*f*l-o*n*g+e*s*g)*b,t[11]=(c*s*r-o*h*r-c*n*l+e*h*l+o*n*d-e*s*d)*b,t[12]=x*b,t[13]=(c*f*i-p*h*i+p*n*u-e*f*u-c*n*m+e*h*m)*b,t[14]=(p*s*i-o*f*i-p*n*a+e*f*a+o*n*m-e*s*m)*b,t[15]=(o*h*i-c*s*i+c*n*a-e*h*a-o*n*u+e*s*u)*b,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,o=t.x,s=t.y,a=t.z,l=r*o,c=r*s;return this.set(l*o+n,l*s-i*a,l*a+i*s,0,l*s+i*a,c*s+n,c*a-i*o,0,l*a-i*s,c*a+i*o,r*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n){return this.set(1,e,n,0,t,1,n,0,t,e,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,o=e._y,s=e._z,a=e._w,l=r+r,c=o+o,h=s+s,u=r*l,d=r*c,p=r*h,f=o*c,m=o*h,g=s*h,v=a*l,y=a*c,A=a*h,x=n.x,_=n.y,b=n.z;return i[0]=(1-(f+g))*x,i[1]=(d+A)*x,i[2]=(p-y)*x,i[3]=0,i[4]=(d-A)*_,i[5]=(1-(u+g))*_,i[6]=(m+v)*_,i[7]=0,i[8]=(p+y)*b,i[9]=(m-v)*b,i[10]=(1-(u+f))*b,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=nt.set(i[0],i[1],i[2]).length();const o=nt.set(i[4],i[5],i[6]).length(),s=nt.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],it.copy(this);const a=1/r,l=1/o,c=1/s;return it.elements[0]*=a,it.elements[1]*=a,it.elements[2]*=a,it.elements[4]*=l,it.elements[5]*=l,it.elements[6]*=l,it.elements[8]*=c,it.elements[9]*=c,it.elements[10]*=c,e.setFromRotationMatrix(it),n.x=r,n.y=o,n.z=s,this}makePerspective(t,e,n,i,r,o){void 0===o&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const s=this.elements,a=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(o+r)/(o-r),d=-2*o*r/(o-r);return s[0]=a,s[4]=0,s[8]=c,s[12]=0,s[1]=0,s[5]=l,s[9]=h,s[13]=0,s[2]=0,s[6]=0,s[10]=u,s[14]=d,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(t,e,n,i,r,o){const s=this.elements,a=1/(e-t),l=1/(n-i),c=1/(o-r),h=(e+t)*a,u=(n+i)*l,d=(o+r)*c;return s[0]=2*a,s[4]=0,s[8]=0,s[12]=-h,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-u,s[2]=0,s[6]=0,s[10]=-2*c,s[14]=-d,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const nt=new T,it=new et,rt=new T(0,0,0),ot=new T(1,1,1),st=new T,at=new T,lt=new T;class ct{constructor(t=0,e=0,n=0,i=ct.DefaultOrder){Object.defineProperty(this,"isEuler",{value:!0}),this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=g.clamp,r=t.elements,o=r[0],s=r[4],a=r[8],l=r[1],c=r[5],h=r[9],u=r[2],d=r[6],p=r[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(i(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-s,o)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-i(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(a,p),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-u,o),this._z=0);break;case"ZXY":this._x=Math.asin(i(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-s,c)):(this._y=0,this._z=Math.atan2(l,o));break;case"ZYX":this._y=Math.asin(-i(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(l,o)):(this._x=0,this._z=Math.atan2(-s,c));break;case"YZX":this._z=Math.asin(i(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-u,o)):(this._x=0,this._y=Math.atan2(a,p));break;case"XZY":this._z=Math.asin(-i(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,o)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return ht.makeRotationFromQuaternion(t),this.setFromRotationMatrix(ht,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return ut.setFromEuler(this),this.setFromQuaternion(ut,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new T(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}ct.DefaultOrder="XYZ",ct.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];const ht=new et,ut=new S;class dt{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),s.length>0&&(n.images=s),a.length>0&&(n.shapes=a),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function o(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e1?void 0:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new T),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Rt.getNormalMatrix(t),i=this.coplanarPoint(Tt).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}const Pt=new T,Dt=new T,It=new T,Ot=new T,Nt=new T,Bt=new T,Ft=new T,zt=new T,Ut=new T,Ht=new T;class Gt{constructor(t,e,n){this.a=void 0!==t?t:new T,this.b=void 0!==e?e:new T,this.c=void 0!==n?n:new T}static getNormal(t,e,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new T),i.subVectors(n,e),Pt.subVectors(t,e),i.cross(Pt);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){Pt.subVectors(i,e),Dt.subVectors(n,e),It.subVectors(t,e);const o=Pt.dot(Pt),s=Pt.dot(Dt),a=Pt.dot(It),l=Dt.dot(Dt),c=Dt.dot(It),h=o*l-s*s;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new T),0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*a-s*c)*u,p=(o*c-s*a)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Ot),Ot.x>=0&&Ot.y>=0&&Ot.x+Ot.y<=1}static getUV(t,e,n,i,r,o,s,a){return this.getBarycoord(t,e,n,i,Ot),a.set(0,0),a.addScaledVector(r,Ot.x),a.addScaledVector(o,Ot.y),a.addScaledVector(s,Ot.z),a}static isFrontFacing(t,e,n,i){return Pt.subVectors(n,e),Dt.subVectors(t,e),Pt.cross(Dt).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Pt.subVectors(this.c,this.b),Dt.subVectors(this.a,this.b),.5*Pt.cross(Dt).length()}getMidpoint(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new T),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Gt.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Ct),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Gt.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return Gt.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return Gt.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Gt.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new T);const n=this.a,i=this.b,r=this.c;let o,s;Nt.subVectors(i,n),Bt.subVectors(r,n),zt.subVectors(t,n);const a=Nt.dot(zt),l=Bt.dot(zt);if(a<=0&&l<=0)return e.copy(n);Ut.subVectors(t,i);const c=Nt.dot(Ut),h=Bt.dot(Ut);if(c>=0&&h<=c)return e.copy(i);const u=a*h-c*l;if(u<=0&&a>=0&&c<=0)return o=a/(a-c),e.copy(n).addScaledVector(Nt,o);Ht.subVectors(t,r);const d=Nt.dot(Ht),p=Bt.dot(Ht);if(p>=0&&d<=p)return e.copy(r);const f=d*l-a*p;if(f<=0&&l>=0&&p<=0)return s=l/(l-p),e.copy(n).addScaledVector(Bt,s);const m=c*p-d*h;if(m<=0&&h-c>=0&&d-p>=0)return Ft.subVectors(r,i),s=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(Ft,s);const g=1/(m+f+u);return o=f*g,s=u*g,e.copy(n).addScaledVector(Nt,o).addScaledVector(Bt,s)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const Vt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},kt={h:0,s:0,l:0},Wt={h:0,s:0,l:0};function jt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Xt(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function qt(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Yt{constructor(t,e,n){return Object.defineProperty(this,"isColor",{value:!0}),void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=g.euclideanModulo(t,1),e=g.clamp(e,0,1),n=g.clamp(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=jt(r,i,t+1/3),this.g=jt(r,i,t),this.b=jt(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=Vt[t];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Xt(t.r),this.g=Xt(t.g),this.b=Xt(t.b),this}copyLinearToSRGB(t){return this.r=qt(t.r),this.g=qt(t.g),this.b=qt(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),o=Math.min(e,n,i);let s,a;const l=(o+r)/2;if(o===r)s=0,a=0;else{const t=r-o;switch(a=l<=.5?t/(r+o):t/(2-r-o),r){case e:s=(n-i)/t+(n0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(Jt.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Kt.prototype=Object.create(Jt.prototype),Kt.prototype.constructor=Kt,Kt.prototype.isMeshBasicMaterial=!0,Kt.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this};const $t=new T,te=new v;function ee(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}function ne(t,e,n){ee.call(this,new Int8Array(t),e,n)}function ie(t,e,n){ee.call(this,new Uint8Array(t),e,n)}function re(t,e,n){ee.call(this,new Uint8ClampedArray(t),e,n)}function oe(t,e,n){ee.call(this,new Int16Array(t),e,n)}function se(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function ae(t,e,n){ee.call(this,new Int32Array(t),e,n)}function le(t,e,n){ee.call(this,new Uint32Array(t),e,n)}function ce(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function he(t,e,n){ee.call(this,new Float32Array(t),e,n)}function ue(t,e,n){ee.call(this,new Float64Array(t),e,n)}function de(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;ne&&(e=t[n]);return e}Object.defineProperty(ee.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(ee.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i65535?le:se)(t,1):this.index=t,this},getAttribute:function(t){return this.attributes[t]},setAttribute:function(t,e){return this.attributes[t]=e,this},deleteAttribute:function(t){return delete this.attributes[t],this},hasAttribute:function(t){return void 0!==this.attributes[t]},addGroup:function(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix4:function(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new y).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(t){return ge.makeRotationX(t),this.applyMatrix4(ge),this},rotateY:function(t){return ge.makeRotationY(t),this.applyMatrix4(ge),this},rotateZ:function(t){return ge.makeRotationZ(t),this.applyMatrix4(ge),this},translate:function(t,e,n){return ge.makeTranslation(t,e,n),this.applyMatrix4(ge),this},scale:function(t,e,n){return ge.makeScale(t,e,n),this.applyMatrix4(ge),this},lookAt:function(t){return ve.lookAt(t),ve.updateMatrix(),this.applyMatrix4(ve.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(ye).negate(),this.translate(ye.x,ye.y,ye.z),this},setFromPoints:function(t){const e=[];for(let n=0,i=t.length;n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e],r=i.toJSON(t.data);""!==i.name&&(r.name=i.name),t.data.attributes[e]=r}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],o=[];for(let e=0,i=n.length;e0&&(i[e]=o,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const o=this.groups;o.length>0&&(t.data.groups=JSON.parse(JSON.stringify(o)));const s=this.boundingSphere;return null!==s&&(t.data.boundingSphere={center:s.center.toArray(),radius:s.radius}),t},clone:function(){return(new be).copy(this)},copy:function(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;tn.far?null:{distance:c,point:Ue.clone(),object:t}}(t,e,n,i,Se,Te,Le,ze);if(p){a&&(Ne.fromBufferAttribute(a,c),Be.fromBufferAttribute(a,h),Fe.fromBufferAttribute(a,u),p.uv=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v)),l&&(Ne.fromBufferAttribute(l,c),Be.fromBufferAttribute(l,h),Fe.fromBufferAttribute(l,u),p.uv2=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v));const t=new Qt(c,h,u);Gt.getNormal(Se,Te,Le,t.normal),p.face=t}return p}He.prototype=Object.assign(Object.create(St.prototype),{constructor:He,isMesh:!0,copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),Ee.copy(n.boundingSphere),Ee.applyMatrix4(r),!1===t.ray.intersectsSphere(Ee))return;if(we.copy(r).invert(),Me.copy(t.ray).applyMatrix4(we),null!==n.boundingBox&&!1===Me.intersectsBox(n.boundingBox))return;let o;if(n.isBufferGeometry){const r=n.index,s=n.attributes.position,a=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;n0?1:-1,c.push(L.x,L.y,L.z),h.push(a/m),h.push(1-o/g),E+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e},qe.prototype=Object.assign(Object.create(St.prototype),{constructor:qe,isCamera:!0,copy:function(t,e){return St.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this},getWorldDirection:function(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new T),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(t){St.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()},updateWorldMatrix:function(t,e){St.prototype.updateWorldMatrix.call(this,t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()},clone:function(){return(new this.constructor).copy(this)}}),Ye.prototype=Object.assign(Object.create(qe.prototype),{constructor:Ye,isPerspectiveCamera:!0,copy:function(t,e){return qe.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){const e=.5*this.getFilmHeight()/t;this.fov=2*g.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){const t=Math.tan(.5*g.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*g.RAD2DEG*Math.atan(Math.tan(.5*g.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(t,e,n,i,r,o){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){const t=this.near;let e=t*Math.tan(.5*g.DEG2RAD*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const o=this.view;if(null!==this.view&&this.view.enabled){const t=o.fullWidth,s=o.fullHeight;r+=o.offsetX*i/t,e-=o.offsetY*n/s,i*=o.width/t,n*=o.height/s}const s=this.filmOffset;0!==s&&(r+=t*s/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()},toJSON:function(t){const e=St.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}});function Qe(t,e,n){if(St.call(this),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new Ye(90,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new T(1,0,0)),this.add(i);const r=new Ye(90,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new T(-1,0,0)),this.add(r);const o=new Ye(90,1,t,e);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(new T(0,1,0)),this.add(o);const s=new Ye(90,1,t,e);s.layers=this.layers,s.up.set(0,0,-1),s.lookAt(new T(0,-1,0)),this.add(s);const a=new Ye(90,1,t,e);a.layers=this.layers,a.up.set(0,-1,0),a.lookAt(new T(0,0,1)),this.add(a);const l=new Ye(90,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new T(0,0,-1)),this.add(l),this.update=function(t,e){null===this.parent&&this.updateMatrixWorld();const c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,o),t.setRenderTarget(n,3),t.render(e,s),t.setRenderTarget(n,4),t.render(e,a),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}function Ze(t,e,n,i,r,o,s,a,l,c){t=void 0!==t?t:[],e=void 0!==e?e:301,s=void 0!==s?s:1022,b.call(this,t,e,n,i,r,o,s,a,l,c),this.flipY=!1,this._needsFlipEnvMap=!0}Qe.prototype=Object.create(St.prototype),Qe.prototype.constructor=Qe,Ze.prototype=Object.create(b.prototype),Ze.prototype.constructor=Ze,Ze.prototype.isCubeTexture=!0,Object.defineProperty(Ze.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}});class Je extends E{constructor(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),super(t,t,e),Object.defineProperty(this,"isWebGLCubeRenderTarget",{value:!0}),e=e||{},this.texture=new Ze(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=1023,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new Ve(5,5,5),r=new Xe({name:"CubemapFromEquirect",uniforms:ke(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const o=new He(i,r),s=e.minFilter;1008===e.minFilter&&(e.minFilter=1006);return new Qe(1,10,this).update(t,o),e.minFilter=s,o.geometry.dispose(),o.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}function Ke(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==l?l:1003,this.minFilter=void 0!==c?c:1003,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}Ke.prototype=Object.create(b.prototype),Ke.prototype.constructor=Ke,Ke.prototype.isDataTexture=!0;const $e=new X,tn=new T;class en{constructor(t,e,n,i,r,o){this.planes=[void 0!==t?t:new Ct,void 0!==e?e:new Ct,void 0!==n?n:new Ct,void 0!==i?i:new Ct,void 0!==r?r:new Ct,void 0!==o?o:new Ct]}set(t,e,n,i,r,o){const s=this.planes;return s[0].copy(t),s[1].copy(e),s[2].copy(n),s[3].copy(i),s[4].copy(r),s[5].copy(o),this}clone(){return(new this.constructor).copy(this)}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],o=n[2],s=n[3],a=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(s-i,h-a,f-u,y-m).normalize(),e[1].setComponents(s+i,h+a,f+u,y+m).normalize(),e[2].setComponents(s+r,h+l,f+d,y+g).normalize(),e[3].setComponents(s-r,h-l,f-d,y-g).normalize(),e[4].setComponents(s-o,h-c,f-p,y-v).normalize(),e[5].setComponents(s+o,h+c,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),$e.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSprite(t){return $e.center.set(0,0,0),$e.radius=.7071067811865476,$e.applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,tn.y=i.normal.y>0?t.max.y:t.min.y,tn.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(tn)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}}function nn(){let t=null,e=!1,n=null,i=null;function r(e,o){n(e,o),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function rn(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},an={common:{diffuse:{value:new Yt(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new y},uv2Transform:{value:new y},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new v(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Yt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Yt(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}},sprite:{diffuse:{value:new Yt(15658734)},opacity:{value:1},center:{value:new v(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}}},ln={basic:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.fog]),vertexShader:sn.meshbasic_vert,fragmentShader:sn.meshbasic_frag},lambert:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshlambert_vert,fragmentShader:sn.meshlambert_frag},phong:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.fog,an.lights,{emissive:{value:new Yt(0)},specular:{value:new Yt(1118481)},shininess:{value:30}}]),vertexShader:sn.meshphong_vert,fragmentShader:sn.meshphong_frag},standard:{uniforms:We([an.common,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.roughnessmap,an.metalnessmap,an.fog,an.lights,{emissive:{value:new Yt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:sn.meshphysical_vert,fragmentShader:sn.meshphysical_frag},toon:{uniforms:We([an.common,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.gradientmap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshtoon_vert,fragmentShader:sn.meshtoon_frag},matcap:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,an.fog,{matcap:{value:null}}]),vertexShader:sn.meshmatcap_vert,fragmentShader:sn.meshmatcap_frag},points:{uniforms:We([an.points,an.fog]),vertexShader:sn.points_vert,fragmentShader:sn.points_frag},dashed:{uniforms:We([an.common,an.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:sn.linedashed_vert,fragmentShader:sn.linedashed_frag},depth:{uniforms:We([an.common,an.displacementmap]),vertexShader:sn.depth_vert,fragmentShader:sn.depth_frag},normal:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,{opacity:{value:1}}]),vertexShader:sn.normal_vert,fragmentShader:sn.normal_frag},sprite:{uniforms:We([an.sprite,an.fog]),vertexShader:sn.sprite_vert,fragmentShader:sn.sprite_frag},background:{uniforms:{uvTransform:{value:new y},t2D:{value:null}},vertexShader:sn.background_vert,fragmentShader:sn.background_frag},cube:{uniforms:We([an.envmap,{opacity:{value:1}}]),vertexShader:sn.cube_vert,fragmentShader:sn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:sn.equirect_vert,fragmentShader:sn.equirect_frag},distanceRGBA:{uniforms:We([an.common,an.displacementmap,{referencePosition:{value:new T},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:sn.distanceRGBA_vert,fragmentShader:sn.distanceRGBA_frag},shadow:{uniforms:We([an.lights,an.fog,{color:{value:new Yt(0)},opacity:{value:1}}]),vertexShader:sn.shadow_vert,fragmentShader:sn.shadow_frag}};function cn(t,e,n,i,r){const o=new Yt(0);let s,a,l=0,c=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return o},setClearColor:function(t,e=1){o.set(t),l=e,d(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(o,l)},render:function(n,r,p,f){let m=!0===r.isScene?r.background:null;m&&m.isTexture&&(m=e.get(m));const g=t.xr,v=g.getSession&&g.getSession();v&&"additive"===v.environmentBlendMode&&(m=null),null===m?d(o,l):m&&m.isColor&&(d(m,1),f=!0),(t.autoClear||f)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),m&&(m.isCubeTexture||m.isWebGLCubeRenderTarget||306===m.mapping)?(void 0===a&&(a=new He(new Ve(1,1,1),new Xe({name:"BackgroundCubeMaterial",uniforms:ke(ln.cube.uniforms),vertexShader:ln.cube.vertexShader,fragmentShader:ln.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),a.geometry.deleteAttribute("uv"),a.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(a.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(a)),m.isWebGLCubeRenderTarget&&(m=m.texture),a.material.uniforms.envMap.value=m,a.material.uniforms.flipEnvMap.value=m.isCubeTexture&&m._needsFlipEnvMap?-1:1,c===m&&h===m.version&&u===t.toneMapping||(a.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null)):m&&m.isTexture&&(void 0===s&&(s=new He(new on(2,2),new Xe({name:"BackgroundMaterial",uniforms:ke(ln.background.uniforms),vertexShader:ln.background.vertexShader,fragmentShader:ln.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),s.geometry.deleteAttribute("normal"),Object.defineProperty(s.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(s)),s.material.uniforms.t2D.value=m,!0===m.matrixAutoUpdate&&m.updateMatrix(),s.material.uniforms.uvTransform.value.copy(m.matrix),c===m&&h===m.version&&u===t.toneMapping||(s.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(s,s.geometry,s.material,0,0,null))}}}function hn(t,e,n,i){const r=t.getParameter(34921),o=i.isWebGL2?null:e.get("OES_vertex_array_object"),s=i.isWebGL2||null!==o,a={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):o.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):o.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){const o=l[e];if(void 0!==o){const e=o.normalized,r=o.itemSize,s=n.get(o);if(void 0===s)continue;const l=s.buffer,c=s.type,h=s.bytesPerElement;if(o.isInterleavedBufferAttribute){const n=o.data,s=n.stride,u=o.offset;n&&n.isInstancedInterleavedBuffer?(m(i,n.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=n.meshPerAttribute*n.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,s*h,u*h)}else o.isInstancedBufferAttribute?(m(i,o.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=o.meshPerAttribute*o.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if("instanceMatrix"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i+0,1),m(i+1,1),m(i+2,1),m(i+3,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i+0,4,s,!1,64,0),t.vertexAttribPointer(i+1,4,s,!1,64,16),t.vertexAttribPointer(i+2,4,s,!1,64,32),t.vertexAttribPointer(i+3,4,s,!1,64,48)}else if("instanceColor"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i,3,s,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,u,y),null!==A&&t.bindBuffer(34963,n.get(A).buffer))},reset:y,resetDefaultState:A,dispose:function(){y();for(const t in a){const e=a[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t]}},releaseStatesOfGeometry:function(t){if(void 0===a[t.id])return;const e=a[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t.id]},releaseStatesOfProgram:function(t){for(const e in a){const n=a[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:g}}function un(t,e,n,i){const r=i.isWebGL2;let o;this.setMode=function(t){o=t},this.render=function(e,i){t.drawArrays(o,e,i),n.update(i,o,1)},this.renderInstances=function(i,s,a){if(0===a)return;let l,c;if(r)l=t,c="drawArraysInstanced";else if(l=e.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===l)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");l[c](o,i,s,a),n.update(s,o,a)}}function dn(t,e,n){let i;function r(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const o="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let s=void 0!==n.precision?n.precision:"highp";const a=r(s);a!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",a,"instead."),s=a);const l=!0===n.logarithmicDepthBuffer,c=t.getParameter(34930),h=t.getParameter(35660),u=t.getParameter(3379),d=t.getParameter(34076),p=t.getParameter(34921),f=t.getParameter(36347),m=t.getParameter(36348),g=t.getParameter(36349),v=h>0,y=o||!!e.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:function(){if(void 0!==i)return i;const n=e.get("EXT_texture_filter_anisotropic");return i=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,i},getMaxPrecision:r,precision:s,logarithmicDepthBuffer:l,maxTextures:c,maxVertexTextures:h,maxTextureSize:u,maxCubemapSize:d,maxAttributes:p,maxVertexUniforms:f,maxVaryings:m,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:o?t.getParameter(36183):0}}function pn(t){const e=this;let n=null,i=0,r=!1,o=!1;const s=new Ct,a=new y,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const o=null!==t?t.length:0;let c=null;if(0!==o){if(c=l.value,!0!==r||null===c){const e=i+4*o,r=n.matrixWorldInverse;a.getNormalMatrix(r),(null===c||c.length0){const s=t.getRenderList(),a=t.getRenderTarget(),l=new Je(o.height/2);return l.fromEquirectangularTexture(t,r),e.set(r,l),t.setRenderTarget(a),t.setRenderList(s),r.addEventListener("dispose",i),n(l.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function mn(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case"WEBGL_depth_texture":i=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n("EXT_color_buffer_float"):(n("WEBGL_depth_texture"),n("OES_texture_float"),n("OES_texture_half_float"),n("OES_texture_half_float_linear"),n("OES_standard_derivatives"),n("OES_element_index_uint"),n("OES_vertex_array_object"),n("ANGLE_instanced_arrays")),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float")},get:function(t){const e=n(t);return null===e&&console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e}}}function gn(t,e,n,i){const r={},o=new WeakMap;function s(t){const a=t.target;null!==a.index&&e.remove(a.index);for(const t in a.attributes)e.remove(a.attributes[t]);a.removeEventListener("dispose",s),delete r[a.id];const l=o.get(a);l&&(e.remove(l),o.delete(a)),i.releaseStatesOfGeometry(a),!0===a.isInstancedBufferGeometry&&delete a._maxInstanceCount,n.memory.geometries--}function a(t){const n=[],i=t.index,r=t.attributes.position;let s=0;if(null!==i){const t=i.array;s=i.version;for(let e=0,i=t.length;e65535?le:se)(n,1);a.version=s;const l=o.get(t);l&&e.remove(l),o.set(t,a)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener("dispose",s),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t0)return t;const r=e*n;let o=Rn[r];if(void 0===o&&(o=new Float32Array(r),Rn[r]=o),0!==e){i.toArray(o,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(o,r)}return o}function Nn(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function Pi(t){return t.replace(Ci,Di)}function Di(t,e){const n=sn[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return Pi(n)}const Ii=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Oi=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Ni(t){return t.replace(Oi,Fi).replace(Ii,Bi)}function Bi(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Fi(t,e,n,i)}function Fi(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,p=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Ti).join("\n")}(n),f=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(o),m=r.createProgram();let g,v,y=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(g=[f].filter(Ti).join("\n"),g.length>0&&(g+="\n"),v=[p,f].filter(Ti).join("\n"),v.length>0&&(v+="\n")):(g=[zi(n),"#define SHADER_NAME "+n.shaderName,f,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+d,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#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;","\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(Ti).join("\n"),v=[p,zi(n),"#define SHADER_NAME "+n.shaderName,f,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+d,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.envMap?"#define "+h:"",n.envMap?"#define "+u:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?sn.tonemapping_pars_fragment:"",0!==n.toneMapping?Si("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",sn.encodings_pars_fragment,n.map?Mi("mapTexelToLinear",n.mapEncoding):"",n.matcap?Mi("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?Mi("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?Mi("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?Mi("lightMapTexelToLinear",n.lightMapEncoding):"",Ei("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Ti).join("\n")),s=Pi(s),s=Li(s,n),s=Ri(s,n),a=Pi(a),a=Li(a,n),a=Ri(a,n),s=Ni(s),a=Ni(a),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y="#version 300 es\n",g=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in","300 es"===n.glslVersion?"":"out highp vec4 pc_fragColor;","300 es"===n.glslVersion?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const A=y+v+a,x=xi(r,35633,y+g+s),_=xi(r,35632,A);if(r.attachShader(m,x),r.attachShader(m,_),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,"position"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(x).trim(),n=r.getShaderInfoLog(_).trim();let i=!0,o=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=wi(r,x,"vertex"),n=wi(r,_,"fragment");console.error("THREE.WebGLProgram: shader error: ",r.getError(),"35715",r.getProgramParameter(m,35715),"gl.getProgramInfoLog",t,e,n)}else""!==t?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",t):""!==e&&""!==n||(o=!1);o&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let b,w;return r.deleteShader(x),r.deleteShader(_),this.getUniforms=function(){return void 0===b&&(b=new Ai(r,m)),b},this.getAttributes=function(){return void 0===w&&(w=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,maxBones:b,useVertexTexture:c,morphTargets:r.morphTargets,morphNormals:r.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:s.directional.length,numPointLights:s.point.length,numSpotLights:s.spot.length,numRectAreaLights:s.rectArea.length,numHemiLights:s.hemi.length,numDirLightShadows:s.directionalShadowMap.length,numPointLightShadows:s.pointShadowMap.length,numSpotLightShadows:s.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&f.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:a||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:a||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:a||n.has("EXT_shader_texture_lod"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t1&&i.sort(t||Vi),r.length>1&&r.sort(e||ki)}}}function ji(t){let e=new WeakMap;return{get:function(n,i){const r=e.get(n);let o;return void 0===r?(o=new Wi(t),e.set(n,new WeakMap),e.get(n).set(i,o)):(o=r.get(i),void 0===o&&(o=new Wi(t),r.set(i,o))),o},dispose:function(){e=new WeakMap}}}function Xi(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new T,color:new Yt};break;case"SpotLight":n={position:new T,direction:new T,color:new Yt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new T,color:new Yt,distance:0,decay:0};break;case"HemisphereLight":n={direction:new T,skyColor:new Yt,groundColor:new Yt};break;case"RectAreaLight":n={color:new Yt,position:new T,halfWidth:new T,halfHeight:new T}}return t[e.id]=n,n}}}let qi=0;function Yi(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Qi(t,e){const n=new Xi,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new T);const o=new T,s=new et,a=new et;return{setup:function(o){let s=0,a=0,l=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let c=0,h=0,u=0,d=0,p=0,f=0,m=0,g=0;o.sort(Yi);for(let t=0,e=o.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=an.LTC_FLOAT_1,r.rectAreaLTC2=an.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=an.LTC_HALF_1,r.rectAreaLTC2=an.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=s,r.ambient[1]=a,r.ambient[2]=l;const v=r.hash;v.directionalLength===c&&v.pointLength===h&&v.spotLength===u&&v.rectAreaLength===d&&v.hemiLength===p&&v.numDirectionalShadows===f&&v.numPointShadows===m&&v.numSpotShadows===g||(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=h,r.hemi.length=p,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=m,r.pointShadowMap.length=m,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=m,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=h,v.spotLength=u,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=f,v.numPointShadows=m,v.numSpotShadows=g,r.version=qi++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(o=new Zi(t,e),n.get(i).push(o)):o=n.get(i)[r],o},dispose:function(){n=new WeakMap}}}function Ki(t){Jt.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}function $i(t){Jt.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new T,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}Ki.prototype=Object.create(Jt.prototype),Ki.prototype.constructor=Ki,Ki.prototype.isMeshDepthMaterial=!0,Ki.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},$i.prototype=Object.create(Jt.prototype),$i.prototype.constructor=$i,$i.prototype.isMeshDistanceMaterial=!0,$i.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this};function tr(t,e,n){let i=new en;const r=new v,o=new v,s=new M,a=[],l=[],c={},h={0:1,1:0,2:2},u=new Xe({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new v},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),d=u.clone();d.defines.HORIZONTAL_PASS=1;const p=new be;p.setAttribute("position",new ee(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const f=new He(p,u),m=this;function g(n,i){const r=e.update(f);u.uniforms.shadow_pass.value=n.map.texture,u.uniforms.resolution.value=n.mapSize,u.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,u,f,null),d.uniforms.shadow_pass.value=n.mapPass.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,d,f,null)}function y(t,e,n){const i=t<<0|e<<1|n<<2;let r=a[i];return void 0===r&&(r=new Ki({depthPacking:3201,morphTargets:t,skinning:e}),a[i]=r),r}function A(t,e,n){const i=t<<0|e<<1|n<<2;let r=l[i];return void 0===r&&(r=new $i({morphTargets:t,skinning:e}),l[i]=r),r}function x(e,n,i,r,o,s,a){let l=null,u=y,d=e.customDepthMaterial;if(!0===r.isPointLight&&(u=A,d=e.customDistanceMaterial),void 0===d){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0);let r=!1;!0===e.isSkinnedMesh&&(!0===i.skinning?r=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e));l=u(t,r,!0===e.isInstancedMesh)}else l=d;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=3===a?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:h[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=o,l.farDistance=s),l}function _(n,r,o,s,a){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===a)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;ln||r.y>n)&&(r.x>n&&(o.x=Math.floor(n/p.x),r.x=o.x*p.x,u.mapSize.x=o.x),r.y>n&&(o.y=Math.floor(n/p.y),r.y=o.y*p.y,u.mapSize.y=o.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:1006,magFilter:1006,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.mapPass=new E(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:1003,magFilter:1003,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t=1):-1!==T.indexOf("OpenGL ES")&&(S=parseFloat(/^OpenGL ES (\d)/.exec(T)[1]),E=S>=2);let L=null,R={};const C=new M,P=new M;function D(e,n,i){const r=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?g.floorPowerOfTwo:Math.floor,o=i(r*t.width),s=i(r*t.height);void 0===p&&(p=m(o,s));const a=n?m(o,s):p;a.width=o,a.height=s;return a.getContext("2d").drawImage(t,0,0,o,s),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+o+"x"+s+")."),a}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function y(t){return g.isPowerOfTwo(t.width)&&g.isPowerOfTwo(t.height)}function A(t,e){return t.generateMipmaps&&e&&1003!==t.minFilter&&1006!==t.minFilter}function x(e,n,r,o){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log(Math.max(r,o))*Math.LOG2E}function _(n,i,r){if(!1===a)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let o=i;return 6403===i&&(5126===r&&(o=33326),5131===r&&(o=33325),5121===r&&(o=33321)),6407===i&&(5126===r&&(o=34837),5131===r&&(o=34843),5121===r&&(o=32849)),6408===i&&(5126===r&&(o=34836),5131===r&&(o=34842),5121===r&&(o=32856)),33325!==o&&33326!==o&&34842!==o&&34836!==o||e.get("EXT_color_buffer_float"),o}function b(t){return 1003===t||1004===t||1005===t?9728:9729}function w(e){const n=e.target;n.removeEventListener("dispose",w),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&d.delete(n),s.memory.textures--}function M(e){const n=e.target;n.removeEventListener("dispose",M),function(e){const n=i.get(e),r=i.get(e.texture);if(!e)return;void 0!==r.__webglTexture&&t.deleteTexture(r.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(n.__webglFramebuffer[e]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[e]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer),n.__webglMultisampledFramebuffer&&t.deleteFramebuffer(n.__webglMultisampledFramebuffer),n.__webglColorRenderbuffer&&t.deleteRenderbuffer(n.__webglColorRenderbuffer),n.__webglDepthRenderbuffer&&t.deleteRenderbuffer(n.__webglDepthRenderbuffer);i.remove(e.texture),i.remove(e)}(n),s.memory.textures--}let E=0;function S(t,e){const r=i.get(t);if(t.isVideoTexture&&function(t){const e=s.render.frame;d.get(t)!==e&&(d.set(t,e),t.update())}(t),t.version>0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void D(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function T(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;P(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const s=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=s||l?l?i.image[t].image:i.image[t]:v(i.image[t],!1,!0,c);const u=h[0],d=y(u)||a,p=o.convert(i.format),f=o.convert(i.type),m=_(i.internalFormat,p,f);let g;if(C(34067,i,d),s){for(let t=0;t<6;t++){g=h[t].mipmaps;for(let e=0;e1||i.get(o).__currentAnisotropy)&&(t.texParameterf(n,l.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(o.anisotropy,r.getMaxAnisotropy())),i.get(o).__currentAnisotropy=o.anisotropy)}}function P(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",w),e.__webglTexture=t.createTexture(),s.memory.textures++)}function D(e,i,r){let s=3553;i.isDataTexture2DArray&&(s=35866),i.isDataTexture3D&&(s=32879),P(e,i),n.activeTexture(33984+r),n.bindTexture(s,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const l=function(t){return!a&&(1001!==t.wrapS||1001!==t.wrapT||1003!==t.minFilter&&1006!==t.minFilter)}(i)&&!1===y(i.image),c=v(i.image,l,!1,h),u=y(c)||a,d=o.convert(i.format);let p,f=o.convert(i.type),m=_(i.internalFormat,d,f);C(s,i,u);const g=i.mipmaps;if(i.isDepthTexture)m=6402,a?m=1015===i.type?36012:1014===i.type?33190:1020===i.type?35056:33189:1015===i.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),1026===i.format&&6402===m&&1012!==i.type&&1014!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=1012,f=o.convert(i.type)),1027===i.format&&6402===m&&(m=34041,1020!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=1020,f=o.convert(i.type))),n.texImage2D(3553,0,m,c.width,c.height,0,d,f,null);else if(i.isDataTexture)if(g.length>0&&u){for(let t=0,e=g.length;t0&&u){for(let t=0,e=g.length;t=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),E+=1,t},this.resetTextureUnits=function(){E=0},this.setTexture2D=S,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=T,this.setupRenderTarget=function(e){const r=i.get(e),l=i.get(e.texture);e.addEventListener("dispose",M),l.__webglTexture=t.createTexture(),s.memory.textures++;const c=!0===e.isWebGLCubeRenderTarget,h=!0===e.isWebGLMultisampleRenderTarget,u=y(e)||a;if(!a||1022!==e.texture.format||1015!==e.texture.type&&1016!==e.texture.type||(e.texture.format=1023,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),c){r.__webglFramebuffer=[];for(let e=0;e<6;e++)r.__webglFramebuffer[e]=t.createFramebuffer()}else if(r.__webglFramebuffer=t.createFramebuffer(),h)if(a){r.__webglMultisampledFramebuffer=t.createFramebuffer(),r.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,r.__webglColorRenderbuffer);const n=o.convert(e.texture.format),i=o.convert(e.texture.type),s=_(e.texture.internalFormat,n,i),a=B(e);t.renderbufferStorageMultisample(36161,a,s,e.width,e.height),t.bindFramebuffer(36160,r.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,r.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(r.__webglDepthRenderbuffer=t.createRenderbuffer(),O(r.__webglDepthRenderbuffer,e,!0)),t.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(c){n.bindTexture(34067,l.__webglTexture),C(34067,e.texture,u);for(let t=0;t<6;t++)I(r.__webglFramebuffer[t],e,36064,34069+t);A(e.texture,u)&&x(34067,e.texture,e.width,e.height),n.bindTexture(34067,null)}else n.bindTexture(3553,l.__webglTexture),C(3553,e.texture,u),I(r.__webglFramebuffer,e,36064,3553),A(e.texture,u)&&x(3553,e.texture,e.width,e.height),n.bindTexture(3553,null);e.depthBuffer&&N(e)},this.updateRenderTargetMipmap=function(t){const e=t.texture;if(A(e,y(t)||a)){const r=t.isWebGLCubeRenderTarget?34067:3553,o=i.get(e).__webglTexture;n.bindTexture(r,o),x(r,e,t.width,t.height),n.bindTexture(r,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(a){const n=i.get(e);t.bindFramebuffer(36008,n.__webglMultisampledFramebuffer),t.bindFramebuffer(36009,n.__webglFramebuffer);const r=e.width,o=e.height;let s=16384;e.depthBuffer&&(s|=256),e.stencilBuffer&&(s|=1024),t.blitFramebuffer(0,0,r,o,0,0,r,o,s,9728),t.bindFramebuffer(36160,n.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===F&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),F=!0),t=t.texture),S(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===z&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),z=!0),t=t.texture),T(t,e)}}function ir(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(1009===t)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(1012===t)return 5123;if(1013===t)return 5124;if(1014===t)return 5125;if(1015===t)return 5126;if(1016===t)return i?5131:(n=e.get("OES_texture_half_float"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(1022===t)return 6407;if(1023===t)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(1026===t)return 6402;if(1027===t)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(33776===t||33777===t||33778===t||33779===t){if(n=e.get("WEBGL_compressed_texture_s3tc"),null===n)return null;if(33776===t)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===t)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===t)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===t||35841===t||35842===t||35843===t){if(n=e.get("WEBGL_compressed_texture_pvrtc"),null===n)return null;if(35840===t)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===t)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===t)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===t)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get("WEBGL_compressed_texture_etc1"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===t||37496===t)&&(n=e.get("WEBGL_compressed_texture_etc"),null!==n)){if(37492===t)return n.COMPRESSED_RGB8_ETC2;if(37496===t)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get("WEBGL_compressed_texture_astc"),null!==n?t:null):36492===t?(n=e.get("EXT_texture_compression_bptc"),null!==n?t:null):1020===t?i?34042:(n=e.get("WEBGL_depth_texture"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}function rr(t=[]){Ye.call(this),this.cameras=t}function or(){St.call(this),this.type="Group"}function sr(){this._targetRay=null,this._grip=null,this._hand=null}function ar(t,e){const n=this;let i=null,r=1,o=null,s="local-floor",a=null;const l=[],c=new Map,h=new Ye;h.layers.enable(1),h.viewport=new M;const u=new Ye;u.layers.enable(2),u.viewport=new M;const d=[h,u],p=new rr;p.layers.enable(1),p.layers.enable(2);let f=null,m=null;function g(t){const e=c.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function v(){c.forEach((function(t,e){t.disconnect(e)})),c.clear(),f=null,m=null,t.setFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),w.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function y(t){const e=i.inputSources;for(let t=0;t0&&Et(o,t,e),s.length>0&&Et(s,t,e),!0===t.isScene&&t.onAfterRender(f,t,e),null!==_&&(Z.updateRenderTargetMipmap(_),Z.updateMultisampleRenderTarget(_)),q.buffers.depth.setTest(!0),q.buffers.depth.setMask(!0),q.buffers.color.setMask(!0),q.setPolygonOffset(!1),p.pop(),d=p.length>0?p[p.length-1]:null,u=null},this.setFramebuffer=function(t){y!==t&&null===_&&pt.bindFramebuffer(36160,t),y=t},this.getActiveCubeFace=function(){return A},this.getActiveMipmapLevel=function(){return x},this.getRenderList=function(){return u},this.setRenderList=function(t){u=t},this.getRenderTarget=function(){return _},this.setRenderTarget=function(t,e=0,n=0){_=t,A=e,x=n,t&&void 0===Q.get(t).__webglFramebuffer&&Z.setupRenderTarget(t);let i=y,r=!1;if(t){const n=Q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=n[e],r=!0):i=t.isWebGLMultisampleRenderTarget?Q.get(t).__webglMultisampledFramebuffer:n,S.copy(t.viewport),L.copy(t.scissor),R=t.scissorTest}else S.copy(N).multiplyScalar(D).floor(),L.copy(B).multiplyScalar(D).floor(),R=F;if(b!==i&&(pt.bindFramebuffer(36160,i),b=i),q.viewport(S),q.scissor(L),q.setScissorTest(R),r){const i=Q.get(t.texture);pt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}},this.readRenderTargetPixels=function(t,e,n,i,r,o,s){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let a=Q.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==s&&(a=a[s]),a){let s=!1;a!==b&&(pt.bindFramebuffer(36160,a),s=!0);try{const a=t.texture,l=a.format,c=a.type;if(1023!==l&&ut.convert(l)!==pt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const h=1016===c&&(j.has("EXT_color_buffer_half_float")||X.isWebGL2&&j.has("EXT_color_buffer_float"));if(!(1009===c||ut.convert(c)===pt.getParameter(35738)||1015===c&&(X.isWebGL2||j.has("OES_texture_float")||j.has("WEBGL_color_buffer_float"))||h))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===pt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&pt.readPixels(e,n,i,r,ut.convert(l),ut.convert(c),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&pt.bindFramebuffer(36160,b)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),o=Math.floor(e.image.height*i),s=ut.convert(e.format);Z.setTexture2D(e,0),pt.copyTexImage2D(3553,n,s,t.x,t.y,r,o,0),q.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,o=e.image.height,s=ut.convert(n.format),a=ut.convert(n.type);Z.setTexture2D(n,0),pt.pixelStorei(37440,n.flipY),pt.pixelStorei(37441,n.premultiplyAlpha),pt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?pt.texSubImage2D(3553,i,t.x,t.y,r,o,s,a,e.image.data):e.isCompressedTexture?pt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,s,e.mipmaps[0].data):pt.texSubImage2D(3553,i,t.x,t.y,s,a,e.image),0===i&&n.generateMipmaps&&pt.generateMipmap(3553),q.unbindTexture()},this.initTexture=function(t){Z.setTexture2D(t,0),q.unbindTexture()},this.resetState=function(){q.reset(),dt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function hr(t){cr.call(this,t)}rr.prototype=Object.assign(Object.create(Ye.prototype),{constructor:rr,isArrayCamera:!0}),or.prototype=Object.assign(Object.create(St.prototype),{constructor:or,isGroup:!0}),Object.assign(sr.prototype,{constructor:sr,getHandSpace:function(){return null===this._hand&&(this._hand=new or,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand},getTargetRaySpace:function(){return null===this._targetRay&&(this._targetRay=new or,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1),this._targetRay},getGripSpace:function(){return null===this._grip&&(this._grip=new or,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1),this._grip},dispatchEvent:function(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this},disconnect:function(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this},update:function(t,e,n){let i=null,r=null,o=null;const s=this._targetRay,a=this._grip,l=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(l&&t.hand){o=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new or;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints["index-finger-tip"],r=l.joints["thumb-tip"],s=i.position.distanceTo(r.position),a=.02,c=.005;l.inputState.pinching&&s>a+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&s<=a-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==s&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale))),null!==a&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(a.matrix.fromArray(r.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale)));return null!==s&&(s.visible=null!==i),null!==a&&(a.visible=null!==r),null!==l&&(l.visible=null!==o),this}}),Object.assign(ar.prototype,p.prototype),hr.prototype=Object.assign(Object.create(cr.prototype),{constructor:hr,isWebGL1Renderer:!0});class ur extends St{constructor(){super(),Object.defineProperty(this,"isScene",{value:!0}),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.environment&&(e.object.environment=this.environment.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}function dr(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=g.generateUUID()}Object.defineProperty(dr.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(dr.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:a,point:vr.clone(),uv:Gt.getUV(vr,wr,Mr,Er,Sr,Tr,Lr,new v),face:null,object:this})},copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}});const Pr=new T,Dr=new T;function Ir(){St.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}Ir.prototype=Object.assign(Object.create(St.prototype),{constructor:Ir,isLOD:!0,copy:function(t){St.prototype.copy.call(this,t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){Pr.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(Pr);this.getObjectForDistance(n).raycast(t,e)}},update:function(t){const e=this.levels;if(e.length>1){Pr.setFromMatrixPosition(t.matrixWorld),Dr.setFromMatrixPosition(this.matrixWorld);const n=Pr.distanceTo(Dr)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;is)continue;h.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(h);dt.far||e.push({distance:d,point:c.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else for(let n=0,i=r.count-1;ns)continue;h.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(h);it.far||e.push({distance:i,point:c.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}});const no=new T,io=new T;function ro(t,e){eo.call(this,t,e),this.type="LineSegments"}function oo(t,e){eo.call(this,t,e),this.type="LineLoop"}function so(t){Jt.call(this),this.type="PointsMaterial",this.color=new Yt(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}ro.prototype=Object.assign(Object.create(eo.prototype),{constructor:ro,isLineSegments:!0,computeLineDistances:function(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;tr.far)return;o.push({distance:l,distanceToRay:Math.sqrt(a),point:n,index:e,face:null,object:s})}}function fo(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.format=void 0!==s?s:1022,this.minFilter=void 0!==o?o:1006,this.magFilter=void 0!==r?r:1006,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}function mo(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function go(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.needsUpdate=!0}function vo(t,e,n,i,r,o,s,a,l,c){if(1026!==(c=void 0!==c?c:1026)&&1027!==c)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&1026===c&&(n=1012),void 0===n&&1027===c&&(n=1020),b.call(this,null,i,r,o,s,a,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==s?s:1003,this.minFilter=void 0!==a?a:1003,this.flipY=!1,this.generateMipmaps=!1}uo.prototype=Object.assign(Object.create(St.prototype),{constructor:uo,isPoints:!0,copy:function(t){return St.prototype.copy.call(this,t),this.material=t.material,this.geometry=t.geometry,this},raycast:function(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold;if(null===n.boundingSphere&&n.computeBoundingSphere(),co.copy(n.boundingSphere),co.applyMatrix4(i),co.radius+=r,!1===t.ray.intersectsSphere(co))return;ao.copy(i).invert(),lo.copy(t.ray).applyMatrix4(ao);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),s=o*o;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position;if(null!==r){const n=r.array;for(let r=0,a=n.length;r0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}),fo.prototype=Object.assign(Object.create(b.prototype),{constructor:fo,clone:function(){return new this.constructor(this.image).copy(this)},isVideoTexture:!0,update:function(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),mo.prototype=Object.create(b.prototype),mo.prototype.constructor=mo,mo.prototype.isCompressedTexture=!0,go.prototype=Object.create(b.prototype),go.prototype.constructor=go,go.prototype.isCanvasTexture=!0,vo.prototype=Object.create(b.prototype),vo.prototype.constructor=vo,vo.prototype.isDepthTexture=!0;new T,new T,new T,new Gt;const yo=function(t,e,n){n=n||2;const i=e&&e.length,r=i?e[0]*n:t.length;let o=Ao(t,0,r,n,!0);const s=[];if(!o||o.next===o.prev)return s;let a,l,c,h,u,d,p;if(i&&(o=function(t,e,n,i){const r=[];let o,s,a,l,c;for(o=0,s=e.length;o80*n){a=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-a,h-l),p=0!==p?1/p:0}return _o(o,s,n,a,l,p),s};function Ao(t,e,n,i,r){let o,s;if(r===function(t,e,n,i){let r=0;for(let o=e,s=n-i;o0)for(o=e;o=e;o-=i)s=Ho(o,t[o],t[o+1],s);return s&&Oo(s,s.next)&&(Go(s),s=s.next),s}function xo(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!Oo(i,i.next)&&0!==Io(i.prev,i,i.next))i=i.next;else{if(Go(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function _o(t,e,n,i,r,o,s){if(!t)return;!s&&o&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=Ro(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,o,s,a,l,c=1;do{for(n=t,t=null,o=null,s=0;n;){for(s++,i=n,a=0,e=0;e0||l>0&&i;)0!==a&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,a--):(r=i,i=i.nextZ,l--),o?o.nextZ=r:t=r,r.prevZ=o,o=r;n=i}o.nextZ=null,c*=2}while(s>1)}(r)}(t,i,r,o);let a,l,c=t;for(;t.prev!==t.next;)if(a=t.prev,l=t.next,o?wo(t,i,r,o):bo(t))e.push(a.i/n),e.push(t.i/n),e.push(l.i/n),Go(t),t=l.next,c=l.next;else if((t=l)===c){s?1===s?_o(t=Mo(xo(t),e,n),e,n,i,r,o,2):2===s&&Eo(t,e,n,i,r,o):_o(xo(t),e,n,i,r,o,1);break}}function bo(t){const e=t.prev,n=t,i=t.next;if(Io(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(Po(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&Io(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function wo(t,e,n,i){const r=t.prev,o=t,s=t.next;if(Io(r,o,s)>=0)return!1;const a=r.xo.x?r.x>s.x?r.x:s.x:o.x>s.x?o.x:s.x,h=r.y>o.y?r.y>s.y?r.y:s.y:o.y>s.y?o.y:s.y,u=Ro(a,l,e,n,i),d=Ro(c,h,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p&&p.z>=u&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function Mo(t,e,n){let i=t;do{const r=i.prev,o=i.next.next;!Oo(r,o)&&No(r,i,i.next,o)&&zo(r,o)&&zo(o,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(o.i/n),Go(i),Go(i.next),i=t=o),i=i.next}while(i!==t);return xo(i)}function Eo(t,e,n,i,r,o){let s=t;do{let t=s.next.next;for(;t!==s.prev;){if(s.i!==t.i&&Do(s,t)){let a=Uo(s,t);return s=xo(s,s.next),a=xo(a,a.next),_o(s,e,n,i,r,o),void _o(a,e,n,i,r,o)}t=t.next}s=s.next}while(s!==t)}function So(t,e){return t.x-e.x}function To(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let o,s=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>s){if(s=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}o=n.x=n.x&&n.x>=l&&i!==n.x&&Po(ro.x||n.x===o.x&&Lo(o,n)))&&(o=n,u=h)),n=n.next}while(n!==a);return o}(t,e)){const n=Uo(e,t);xo(e,e.next),xo(n,n.next)}}function Lo(t,e){return Io(t.prev,t,e.prev)<0&&Io(e.next,t,t.next)<0}function Ro(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Co(t){let e=t,n=t;do{(e.x=0&&(t-s)*(i-a)-(n-s)*(e-a)>=0&&(n-s)*(o-a)-(r-s)*(i-a)>=0}function Do(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&No(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(zo(t,e)&&zo(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&r<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(Io(t.prev,t,e.prev)||Io(t,e.prev,e))||Oo(t,e)&&Io(t.prev,t,t.next)>0&&Io(e.prev,e,e.next)>0)}function Io(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Oo(t,e){return t.x===e.x&&t.y===e.y}function No(t,e,n,i){const r=Fo(Io(t,e,n)),o=Fo(Io(t,e,i)),s=Fo(Io(n,i,t)),a=Fo(Io(n,i,e));return r!==o&&s!==a||(!(0!==r||!Bo(t,n,e))||(!(0!==o||!Bo(t,i,e))||(!(0!==s||!Bo(n,t,i))||!(0!==a||!Bo(n,e,i)))))}function Bo(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function Fo(t){return t>0?1:t<0?-1:0}function zo(t,e){return Io(t.prev,t,t.next)<0?Io(t,e,t.next)>=0&&Io(t,t.prev,e)>=0:Io(t,e,t.prev)<0||Io(t,t.next,e)<0}function Uo(t,e){const n=new Vo(t.i,t.x,t.y),i=new Vo(e.i,e.x,e.y),r=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,o.next=i,i.prev=o,i}function Ho(t,e,n,i){const r=new Vo(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Go(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Vo(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}const ko={area:function(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function jo(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-a/u,f=e.y+s/u,m=((n.x-c/d-p)*c-(n.y+l/d-f)*l)/(s*c-a*l);i=p+s*m-t.x,r=f+a*m-t.y;const g=i*i+r*r;if(g<=2)return new v(i,r);o=Math.sqrt(g/2)}else{let t=!1;s>Number.EPSILON?l>Number.EPSILON&&(t=!0):s<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(c)&&(t=!0),t?(i=-a,r=s,o=Math.sqrt(h)):(i=s,r=a,o=Math.sqrt(h/2))}return new v(i/o,r/o)}const I=[];for(let t=0,e=L.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=L.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=a+2*p;t=0?(t(i-a,p,h),u.subVectors(c,h)):(t(i+a,p,h),u.subVectors(h,c)),p-a>=0?(t(i,p-a,h),d.subVectors(c,h)):(t(i,p+a,h),d.subVectors(h,c)),l.crossVectors(u,d).normalize(),o.push(l.x,l.y,l.z),s.push(i,p)}}for(let t=0;t0)&&d.push(e,r,l),(t!==n-1||a=i)){l.push(e.times[t]);for(let n=0;no.tracks[t].times[0]&&(a=o.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+a,e=t+l-a;d=ls.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=a,n=l-a;t.evaluate(o),d=ls.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new S).fromArray(d).normalize().conjugate().toArray(d)}const p=s.times.length;for(let t=0;t=r)break t;{const s=e[1];t=r)break e}o=n,n=0}}for(;n>>1;te;)--o;if(++o,0!==r||o!==i){r>=o&&(o=Math.max(o,1),r=o-1);const t=this.getValueSize();this.times=ls.arraySlice(n,r,o),this.values=ls.arraySlice(this.values,r*t,o*t)}return this},validate:function(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let o=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==o&&o>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,o),t=!1;break}o=i}if(void 0!==i&&ls.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t},optimize:function(){const t=ls.arraySlice(this.times),e=ls.arraySlice(this.values),n=this.getValueSize(),i=2302===this.getInterpolation(),r=t.length-1;let o=1;for(let s=1;s0){t[o]=t[r];for(let t=r*n,i=o*n,s=0;s!==n;++s)e[i+s]=e[t+s];++o}return o!==t.length?(this.times=ls.arraySlice(t,0,o),this.values=ls.arraySlice(e,0,o*n)):(this.times=t,this.values=e),this},clone:function(){const t=ls.arraySlice(this.times,0),e=ls.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}),fs.prototype=Object.assign(Object.create(ps.prototype),{constructor:fs,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),ms.prototype=Object.assign(Object.create(ps.prototype),{constructor:ms,ValueTypeName:"color"}),gs.prototype=Object.assign(Object.create(ps.prototype),{constructor:gs,ValueTypeName:"number"}),vs.prototype=Object.assign(Object.create(cs.prototype),{constructor:vs,interpolate_:function(t,e,n,i){const r=this.resultBuffer,o=this.sampleValues,s=this.valueSize,a=(n-e)/(i-e);let l=t*s;for(let t=l+s;l!==t;l+=4)S.slerpFlat(r,0,o,l-s,o,l,a);return r}}),ys.prototype=Object.assign(Object.create(ps.prototype),{constructor:ys,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(t){return new vs(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),As.prototype=Object.assign(Object.create(ps.prototype),{constructor:As,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),xs.prototype=Object.assign(Object.create(ps.prototype),{constructor:xs,ValueTypeName:"vector"}),Object.assign(_s,{parse:function(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(bs(n[t]).scale(i));const r=new _s(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r},toJSON:function(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(ps.toJSON(n[t]));return i},CreateFromMorphTargetSequence:function(t,e,n,i){const r=e.length,o=[];for(let t=0;t1){const t=o[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const o=[];for(const t in i)o.push(_s.CreateFromMorphTargetSequence(t,i[t],e,n));return o},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const o=[],s=[];ls.flattenJSON(n,o,s,i),0!==o.length&&r.push(new t(e,o,s))}},i=[],r=t.name||"default",o=t.fps||30,s=t.blendMode;let a=t.length||-1;const l=t.hierarchy||[];for(let t=0;t0||0===t.search(/^data\:image\/jpeg/);r.format=i?1022:1023,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}),Object.assign(Os.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){const t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let o=1;o<=t;o++)n=this.getPoint(o/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){const n=this.getLengths();let i=0;const r=n.length;let o;o=e||t*n[r-1];let s,a=0,l=r-1;for(;a<=l;)if(i=Math.floor(a+(l-a)/2),s=n[i]-o,s<0)a=i+1;else{if(!(s>0)){l=i;break}l=i-1}if(i=l,n[i]===o)return i/(r-1);const c=n[i];return(i+(o-c)/(n[i+1]-c))/(r-1)},getTangent:function(t,e){let n=t-1e-4,i=t+1e-4;n<0&&(n=0),i>1&&(i=1);const r=this.getPoint(n),o=this.getPoint(i),s=e||(r.isVector2?new v:new T);return s.copy(o).sub(r).normalize(),s},getTangentAt:function(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)},computeFrenetFrames:function(t,e){const n=new T,i=[],r=[],o=[],s=new T,a=new et;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new T),i[e].normalize()}r[0]=new T,o[0]=new T;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),s.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],s),o[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),o[e]=o[e-1].clone(),s.crossVectors(i[e-1],i[e]),s.length()>Number.EPSILON){s.normalize();const t=Math.acos(g.clamp(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(a.makeRotationAxis(s,t))}o[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(g.clamp(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(s.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(a.makeRotationAxis(i[n],e*n)),o[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:o}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),Ns.prototype=Object.create(Os.prototype),Ns.prototype.constructor=Ns,Ns.prototype.isEllipseCurve=!0,Ns.prototype.getPoint=function(t,e){const n=e||new v,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const o=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?s=i[(l-1)%r]:(zs.subVectors(i[0],i[1]).add(i[0]),s=zs);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:o+1],h=i[o>i.length-3?i.length-1:o+2];return n.set(ks(s,a.x,l.x,c.x,h.x),ks(s,a.y,l.y,c.y,h.y)),n},Ks.prototype.copy=function(t){Os.prototype.copy.call(this,t),this.points=[];for(let e=0,n=t.points.length;e=e){const t=n[i]-e,r=this.curves[i],o=r.getLength(),s=0===o?0:1-t/o;return r.getPointAt(s)}i++}return null},getLength:function(){const t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e},copy:function(t){Os.prototype.copy.call(this,t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this},copy:function(t){return ta.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){const t=ta.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return ta.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),na.prototype=Object.assign(Object.create(ea.prototype),{constructor:na,getPointsHoles:function(t){const e=[];for(let n=0,i=this.holes.length;n0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new Yt).setHex(r.value);break;case"v2":i.uniforms[e].value=(new v).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new T).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new M).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new y).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new et).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new v).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new v).fromArray(t.clearcoatNormalScale)),void 0!==t.transmission&&(i.transmission=t.transmission),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),i},setTextures:function(t){return this.textures=t,this}});const ya=function(t){const e=t.lastIndexOf("/");return-1===e?"./":t.substr(0,e+1)};function Aa(){be.call(this),this.type="InstancedBufferGeometry",this.instanceCount=1/0}function xa(t,e,n,i){"number"==typeof n&&(i=n,n=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),ee.call(this,t,e,n),this.meshPerAttribute=i||1}function _a(t){Es.call(this,t)}function ba(t){"undefined"==typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),"undefined"==typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),Es.call(this,t),this.options={premultiplyAlpha:"none"}}function wa(){this.type="ShapePath",this.color=new Yt,this.subPaths=[],this.currentPath=null}Aa.prototype=Object.assign(Object.create(be.prototype),{constructor:Aa,isInstancedBufferGeometry:!0,copy:function(t){return be.prototype.copy.call(this,t),this.instanceCount=t.instanceCount,this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){const t=be.prototype.toJSON.call(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}),xa.prototype=Object.assign(Object.create(ee.prototype),{constructor:xa,isInstancedBufferAttribute:!0,copy:function(t){return ee.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this},toJSON:function(){const t=ee.prototype.toJSON.call(this);return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}),_a.prototype=Object.assign(Object.create(Es.prototype),{constructor:_a,load:function(t,e,n,i){const r=this,o=new Ts(r.manager);o.setPath(r.path),o.setRequestHeader(r.requestHeader),o.setWithCredentials(r.withCredentials),o.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)},parse:function(t){const e={},n={};function i(t,i){if(void 0!==e[i])return e[i];const r=t.interleavedBuffers[i],o=function(t,e){if(void 0!==n[e])return n[e];const i=t.arrayBuffers[e],r=new Uint32Array(i).buffer;return n[e]=r,r}(t,r.buffer),s=new dr(fe(r.type,o),r.stride);return s.uuid=r.uuid,e[i]=s,s}const r=t.isInstancedBufferGeometry?new Aa:new be,o=t.data.index;if(void 0!==o){const t=fe(o.type,o.array);r.setIndex(new ee(t,1))}const s=t.data.attributes;for(const e in s){const n=s[e];let o;if(n.isInterleavedBufferAttribute){o=new fr(i(t.data,n.data),n.itemSize,n.offset,n.normalized)}else{const t=fe(n.type,n.array);o=new(n.isInstancedBufferAttribute?xa:ee)(t,n.itemSize,n.normalized)}void 0!==n.name&&(o.name=n.name),r.setAttribute(e,o)}const a=t.data.morphAttributes;if(a)for(const e in a){const n=a[e],o=[];for(let e=0,r=n.length;eNumber.EPSILON){if(l<0&&(n=e[o],a=-a,s=e[r],l=-l),t.ys.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-a*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(s.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=s.x)return!0}}return i}const r=ko.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===e)return n(o);let s,a,l;const c=[];if(1===o.length)return a=o[0],l=new na,l.curves=a.curves,c.push(l),c;let h=!r(o[0].getPoints());h=t?!h:h;const u=[],d=[];let p,f,m=[],g=0;d[g]=void 0,m[g]=[];for(let e=0,n=o.length;e1){let t=!1;const e=[];for(let t=0,e=d.length;t0&&(t||(m=u))}for(let t=0,e=d.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){s.setValue(n,i);break}},saveOriginalState:function(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0},restoreOriginalState:function(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)},_setAdditiveIdentityNumeric:function(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]},_slerp:function(t,e,n,i){S.slerpFlat(t,e,t,e,t,n,i)},_slerpAdditive:function(t,e,n,i,r){const o=this._workIndex*r;S.multiplyQuaternionsFlat(t,o,t,e,t,n),S.slerpFlat(t,e,t,e,t,o,i)},_lerp:function(t,e,n,i,r){const o=1-i;for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]*o+t[n+s]*i}},_lerpAdditive:function(t,e,n,i,r){for(let o=0;o!==r;++o){const r=e+o;t[r]=t[r]+t[n+o]*i}}});const Na=new RegExp("[\\[\\]\\.:\\/]","g"),Ba="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",Fa=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]"),za=/(WCOD+)?/.source.replace("WCOD",Ba),Ua=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ha=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ga=new RegExp("^"+Fa+za+Ua+Ha+"$"),Va=["material","materials","bones"];function ka(t,e,n){const i=n||Wa.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}function Wa(t,e,n){this.path=e,this.parsedPath=n||Wa.parseTrackName(e),this.node=Wa.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}Object.assign(ka.prototype,{getValue:function(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)},setValue:function(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)},bind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()},unbind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}}),Object.assign(Wa,{Composite:ka,create:function(t,e,n){return t&&t.isAnimationObjectGroup?new Wa.Composite(t,e,n):new Wa(t,e,n)},sanitizeNodeName:function(t){return t.replace(/\s/g,"_").replace(Na,"")},parseTrackName:function(t){const e=Ga.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Va.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n},findNode:function(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const o=r++,c=t[o];e[c.uuid]=l,t[l]=c,e[a]=o,t[o]=s;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[o],r=e[l];e[l]=i,e[o]=r}}}this.nCachedObjects_=r},uncache:function(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,o=t.length;for(let s=0,a=arguments.length;s!==a;++s){const a=arguments[s].uuid,l=e[a];if(void 0!==l)if(delete e[a],l0&&(e[s.uuid]=l),t[l]=s,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r},subscribe_:function(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const o=this._paths,s=this._parsedPaths,a=this._objects,l=a.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,o.push(t),s.push(e),r.push(h);for(let n=c,i=a.length;n!==i;++n){const i=a[n];h[n]=new Wa(i,t,e)}return h},unsubscribe_:function(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,o=this._bindings,s=o.length-1,a=o[s];e[t[s]]=n,o[n]=a,o.pop(),r[n]=r[s],r.pop(),i[n]=i[s],i.pop()}}});class ja{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,o=r.length,s=new Array(o),a={endingStart:2400,endingEnd:2400};for(let t=0;t!==o;++t){const e=r[t].createInterpolant(null);s[t]=e,e.settings=a}this._interpolantSettings=a,this._interpolants=s,this._propertyBindings=new Array(o),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,o=n/i;t.warp(1,r,e),this.warp(o,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,o=this.timeScale;let s=this._timeScaleInterpolant;null===s&&(s=i._lendControlInterpolant(),this._timeScaleInterpolant=s);const a=s.parameterPositions,l=s.sampleValues;return a[0]=r,a[1]=r+n,l[0]=t/o,l[1]=e/o,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const o=this._updateTime(e),s=this._updateWeight(t);if(s>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(o),e[n].accumulateAdditive(s);break;case 2500:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(o),e[n].accumulate(i,s)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const o=2202===n;if(0===t)return-1===r?i:o&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const s=this.repetitions-r;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){const e=t<0;this._setEndings(e,!e,o)}else this._setEndings(!1,!1,o);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(o&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=2401,i.endingEnd=2401):(i.endingStart=t?this.zeroSlopeAtStart?2401:2400:2402,i.endingEnd=e?this.zeroSlopeAtEnd?2401:2400:2402)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let o=this._weightInterpolant;null===o&&(o=i._lendControlInterpolant(),this._weightInterpolant=o);const s=o.parameterPositions,a=o.sampleValues;return s[0]=r,a[0]=e,s[1]=r+t,a[1]=n,this}}function Xa(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}Xa.prototype=Object.assign(Object.create(p.prototype),{constructor:Xa,_bindAction:function(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,o=t._propertyBindings,s=t._interpolants,a=n.uuid,l=this._bindingsByRootAndName;let c=l[a];void 0===c&&(c={},l[a]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)o[t]=h;else{if(h=o[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,a,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new Oa(Wa.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,a,l),o[t]=h}s[t].resultBuffer=h.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this},update:function(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),o=this._accuIndex^=1;for(let s=0;s!==n;++s){e[s]._update(i,t,r,o)}const s=this._bindings,a=this._nActiveBindings;for(let t=0;t!==a;++t)s[t].apply(o);return this},setTime:function(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new v),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new v),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return tl.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}.prototype,{center:function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},size:function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(C.prototype,{center:function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionSphere:function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},size:function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(X.prototype,{empty:function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()}}),en.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},class{constructor(t,e){this.start=void 0!==t?t:new T,this.end=void 0!==e?e:new T}set(t,e){return this.start.copy(t),this.end.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new T),t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new T),t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new T),this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){el.subVectors(t,this.start),nl.subVectors(this.end,this.start);const n=nl.dot(nl);let i=nl.dot(el)/n;return e&&(i=g.clamp(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new T),this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}}.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},Object.assign(g,{random16:function(){return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."),Math.random()},nearestPowerOfTwo:function(t){return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."),g.floorPowerOfTwo(t)},nextPowerOfTwo:function(t){return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."),g.ceilPowerOfTwo(t)}}),Object.assign(y.prototype,{flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},getInverse:function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Object.assign(et.prototype,{extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},getPosition:function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new T).setFromMatrixColumn(this,3)},setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},crossVector:function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},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.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(t,e,n,i,r,o){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,o)},getInverse:function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Ct.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},Object.assign(S.prototype,{multiplyVector3:function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},inverse:function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()}}),Object.assign(tt.prototype,{isIntersectionBox:function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionPlane:function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},isIntersectionSphere:function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)}}),Object.assign(Gt.prototype,{area:function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},barycoordFromPoint:function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},midpoint:function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},normal:function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},plane:function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)}}),Object.assign(Gt,{barycoordFromPoint:function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),Gt.getBarycoord(t,e,n,i,r)},normal:function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),Gt.getNormal(t,e,n,i)}}),Object.assign(na.prototype,{extractAllPoints:function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},extrude:function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Xo(this,t)},makeGeometry:function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Qo(this,t)}}),Object.assign(v.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(T.prototype,{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(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},applyProjection:function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},fromAttribute:function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(M.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},lengthManhattan:function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(St.prototype,{getChildByName:function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},applyMatrix:function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(St.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.assign(He.prototype,{setDrawMode:function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}),Object.defineProperties(He.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),Object.defineProperties(Ir.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Object.defineProperty(kr.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}}),Ur.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Object.defineProperty(Os.prototype,"__arcLengthDivisions",{get:function(){return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions},set:function(t){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions=t}}),Ye.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(ia.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(ee.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),35048===this.usage},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(35048)}}}),Object.assign(ee.prototype,{setDynamic:function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},setArray:function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(be.prototype,{addIndex:function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},addAttribute:function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new ee(arguments[1],arguments[2])))},addDrawCall:function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},removeAttribute:function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},applyMatrix:function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(be.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.defineProperties(Aa.prototype,{maxInstancedCount:{get:function(){return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount},set:function(t){console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount=t}}}),Object.defineProperties(Za.prototype,{linePrecision:{get:function(){return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold},set:function(t){console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold=t}}}),Object.defineProperties(dr.prototype,{dynamic:{get:function(){return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),35048===this.usage},set:function(t){console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),this.setUsage(t)}}}),Object.assign(dr.prototype,{setDynamic:function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},setArray:function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(Xo.prototype,{getArrays:function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")}}),Object.assign(ur.prototype,{dispose:function(){console.error("THREE.Scene: .dispose() has been removed.")}}),Object.defineProperties(qa.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(Jt.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Yt}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}}}),Object.defineProperties(es.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(ts.prototype,{transparency:{get:function(){return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission},set:function(t){console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission=t}}}),Object.defineProperties(Xe.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),Object.assign(cr.prototype,{clearTarget:function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},animate:function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},getCurrentRenderTarget:function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},getMaxAnisotropy:function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},getPrecision:function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},resetGLState:function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},allocTextureUnit:function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},setTexture:function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},setTexture2D:function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},setTextureCube:function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},getActiveMipMapLevel:function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()}}),Object.defineProperties(cr.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?3001:3e3}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}}),Object.defineProperties(tr.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(E.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),Object.defineProperties(class extends St{constructor(t){super(),this.type="Audio",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn("THREE.Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void console.warn("THREE.Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0?n=t[0]:e&&e("VR input not available.")})).catch((function(){console.warn("THREE.VRControls: Unable to get VR Displays")})),this.scale=1,this.standing=!1,this.userHeight=1.6,this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VRControls: getVRDisplays() is being deprecated."),i},this.getStandingMatrix=function(){return o},this.update=function(){var e;n&&(n.getFrameData?(n.getFrameData(s),e=s.pose):n.getPose&&(e=n.getPose()),null!==e.orientation&&t.quaternion.fromArray(e.orientation),null!==e.position?t.position.fromArray(e.position):t.position.set(0,0,0),this.standing&&(n.stageParameters?(t.updateMatrix(),o.fromArray(n.stageParameters.sittingToStandingTransform),t.applyMatrix(o)):t.position.setY(t.position.y+this.userHeight)),t.position.multiplyScalar(r.scale))},this.dispose=function(){n=null}},hl=function(t,e){var n,i,r,o,s=new T,a=new T,l=new et,c=new et,h=new et,u=null;"VRFrameData"in window&&(u=new window.VRFrameData),navigator.getVRDisplays&&navigator.getVRDisplays().then((function(t){i=t,t.length>0?n=t[0]:e&&e("HMD not available")})).catch((function(){console.warn("THREE.VREffect: Unable to get VR Displays")})),this.isPresenting=!1;var d=this,p=t.getSize(),f=!1,m=t.getPixelRatio();this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VREffect: getVRDisplays() is being deprecated."),i},this.setSize=function(e,i,r){if(p={width:e,height:i},f=r,d.isPresenting){var o=n.getEyeParameters("left");t.setPixelRatio(1),t.setSize(2*o.renderWidth,o.renderHeight,!1)}else t.setPixelRatio(m),t.setSize(e,i,r)};var g=t.domElement,v=[0,0,.5,1],y=[.5,0,.5,1];function A(){var e=d.isPresenting;if(d.isPresenting=void 0!==n&&n.isPresenting,d.isPresenting){var i=n.getEyeParameters("left"),r=i.renderWidth,o=i.renderHeight;e||(m=t.getPixelRatio(),p=t.getSize(),t.setPixelRatio(1),t.setSize(2*r,o,!1))}else e&&(t.setPixelRatio(m),t.setSize(p.width,p.height,f))}window.addEventListener("vrdisplaypresentchange",A,!1),this.setFullScreen=function(t){return new Promise((function(e,i){void 0!==n?d.isPresenting!==t?e(t?n.requestPresent([{source:g}]):n.exitPresent()):e():i(new Error("No VR hardware found."))}))},this.requestPresent=function(){return this.setFullScreen(!0)},this.exitPresent=function(){return this.setFullScreen(!1)},this.requestAnimationFrame=function(t){return void 0!==n?n.requestAnimationFrame(t):window.requestAnimationFrame(t)},this.cancelAnimationFrame=function(t){void 0!==n?n.cancelAnimationFrame(t):window.cancelAnimationFrame(t)},this.submitFrame=function(){void 0!==n&&d.isPresenting&&n.submitFrame()},this.autoSubmitFrame=!0;var x=new Ye;x.layers.enable(1);var _=new Ye;_.layers.enable(2),this.render=function(e,i,p,f){if(n&&d.isPresenting){var m=e.autoUpdate;m&&(e.updateMatrixWorld(),e.autoUpdate=!1),Array.isArray(e)&&(console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead."),e=e[0]);var g,A,E=t.getSize(),S=n.getLayers();if(S.length){var T=S[0];g=null!==T.leftBounds&&4===T.leftBounds.length?T.leftBounds:v,A=null!==T.rightBounds&&4===T.rightBounds.length?T.rightBounds:y}else g=v,A=y;if(r={x:Math.round(E.width*g[0]),y:Math.round(E.height*g[1]),width:Math.round(E.width*g[2]),height:Math.round(E.height*g[3])},o={x:Math.round(E.width*A[0]),y:Math.round(E.height*A[1]),width:Math.round(E.width*A[2]),height:Math.round(E.height*A[3])},p?(t.setRenderTarget(p),p.scissorTest=!0):(t.setRenderTarget(null),t.setScissorTest(!0)),(t.autoClear||f)&&t.clear(),null===i.parent&&i.updateMatrixWorld(),i.matrixWorld.decompose(x.position,x.quaternion,x.scale),_.position.copy(x.position),_.quaternion.copy(x.quaternion),_.scale.copy(x.scale),n.getFrameData)n.depthNear=i.near,n.depthFar=i.far,n.getFrameData(u),x.projectionMatrix.elements=u.leftProjectionMatrix,_.projectionMatrix.elements=u.rightProjectionMatrix,function(t){t.pose.orientation?(b.fromArray(t.pose.orientation),l.makeRotationFromQuaternion(b)):l.identity();t.pose.position&&(w.fromArray(t.pose.position),l.setPosition(w));c.fromArray(t.leftViewMatrix),c.multiply(l),h.fromArray(t.rightViewMatrix),h.multiply(l),c.getInverse(c),h.getInverse(h)}(u),x.updateMatrix(),x.matrix.multiply(c),x.matrix.decompose(x.position,x.quaternion,x.scale),_.updateMatrix(),_.matrix.multiply(h),_.matrix.decompose(_.position,_.quaternion,_.scale);else{var L=n.getEyeParameters("left"),R=n.getEyeParameters("right");x.projectionMatrix=M(L.fieldOfView,!0,i.near,i.far),_.projectionMatrix=M(R.fieldOfView,!0,i.near,i.far),s.fromArray(L.offset),a.fromArray(R.offset),x.translateOnAxis(s,x.scale.x),_.translateOnAxis(a,_.scale.x)}return p?(p.viewport.set(r.x,r.y,r.width,r.height),p.scissor.set(r.x,r.y,r.width,r.height)):(t.setViewport(r.x,r.y,r.width,r.height),t.setScissor(r.x,r.y,r.width,r.height)),t.render(e,x,p,f),p?(p.viewport.set(o.x,o.y,o.width,o.height),p.scissor.set(o.x,o.y,o.width,o.height)):(t.setViewport(o.x,o.y,o.width,o.height),t.setScissor(o.x,o.y,o.width,o.height)),t.render(e,_,p,f),p?(p.viewport.set(0,0,E.width,E.height),p.scissor.set(0,0,E.width,E.height),p.scissorTest=!1,t.setRenderTarget(null)):(t.setViewport(0,0,E.width,E.height),t.setScissorTest(!1)),m&&(e.autoUpdate=!0),void(d.autoSubmitFrame&&d.submitFrame())}t.render(e,i,p,f)},this.dispose=function(){window.removeEventListener("vrdisplaypresentchange",A,!1)};var b=new S,w=new T;function M(t,e,n,i){var r=Math.PI/180;return function(t,e,n,i){n=void 0===n?.01:n,i=void 0===i?1e4:i;var r=(e=void 0===e||e)?-1:1,o=new et,s=o.elements,a=function(t){var e=2/(t.leftTan+t.rightTan),n=(t.leftTan-t.rightTan)*e*.5,i=2/(t.upTan+t.downTan);return{scale:[e,i],offset:[n,(t.upTan-t.downTan)*i*.5]}}(t);return s[0]=a.scale[0],s[1]=0,s[2]=a.offset[0]*r,s[3]=0,s[4]=0,s[5]=a.scale[1],s[6]=-a.offset[1]*r,s[7]=0,s[8]=0,s[9]=0,s[10]=i/(n-i)*-r,s[11]=i*n/(n-i),s[12]=0,s[13]=0,s[14]=r,s[15]=0,o.transpose(),o}({upTan:Math.tan(t.upDegrees*r),downTan:Math.tan(t.downDegrees*r),leftTan:Math.tan(t.leftDegrees*r),rightTan:Math.tan(t.rightDegrees*r)},e,n,i)}},ul=function(t,e){var n,i,r,o,s;this.object=t,this.domElement=void 0!==e?e:document,this.enabled=!0,this.target=new T,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.25,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!1,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={ORBIT:h,ZOOM:u,PAN:d},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return y.phi},this.getAzimuthalAngle=function(){return y.theta},this.saveState=function(){a.target0.copy(a.target),a.position0.copy(a.object.position),a.zoom0=a.object.zoom},this.reset=function(){a.target.copy(a.target0),a.object.position.copy(a.position0),a.object.zoom=a.zoom0,a.object.updateProjectionMatrix(),a.dispatchEvent(l),a.update(),m=f.NONE},this.update=(n=new T,i=(new S).setFromUnitVectors(t.up,new T(0,1,0)),r=i.clone().inverse(),o=new T,s=new S,function(){var t=a.object.position;return n.copy(t).sub(a.target),n.applyQuaternion(i),y.setFromVector3(n),a.autoRotate&&m===f.NONE&&a.rotateLeft(2*Math.PI/60/60*a.autoRotateSpeed),y.theta+=A.theta,y.phi+=A.phi,y.theta=Math.max(a.minAzimuthAngle,Math.min(a.maxAzimuthAngle,y.theta)),y.phi=Math.max(a.minPolarAngle,Math.min(a.maxPolarAngle,y.phi)),y.makeSafe(),y.radius*=x,y.radius=Math.max(a.minDistance,Math.min(a.maxDistance,y.radius)),a.target.add(_),n.setFromSpherical(y),n.applyQuaternion(r),t.copy(a.target).add(n),a.object.lookAt(a.target),!0===a.enableDamping?(A.theta*=1-a.dampingFactor,A.phi*=1-a.dampingFactor,_.multiplyScalar(1-a.dampingFactor)):(A.set(0,0,0),_.set(0,0,0)),x=1,!!(b||o.distanceToSquared(a.object.position)>g||8*(1-s.dot(a.object.quaternion))>g)&&(a.dispatchEvent(l),o.copy(a.object.position),s.copy(a.object.quaternion),b=!1,!0)}),this.dispose=function(){a.domElement.removeEventListener("contextmenu",Q,!1),a.domElement.removeEventListener("mousedown",G,!1),a.domElement.removeEventListener("wheel",W,!1),a.domElement.removeEventListener("touchstart",X,!1),a.domElement.removeEventListener("touchend",Y,!1),a.domElement.removeEventListener("touchmove",q,!1),document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),window.removeEventListener("keydown",j,!1)};var a=this,l={type:"change"},c={type:"start"},p={type:"end"},f={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY_PAN:4},m=f.NONE,g=1e-6,y=new $a,A=new $a,x=1,_=new T,b=!1,w=new v,M=new v,E=new v,L=new v,R=new v,C=new v,P=new v,D=new v,I=new v;function O(){return Math.pow(.95,a.zoomSpeed)}a.rotateLeft=function(t){A.theta-=t},a.rotateUp=function(t){A.phi-=t};var N,B=(N=new T,function(t,e){N.setFromMatrixColumn(e,0),N.multiplyScalar(-t),_.add(N)}),F=function(){var t=new T;return function(e,n){!0===a.screenSpacePanning?t.setFromMatrixColumn(n,1):(t.setFromMatrixColumn(n,0),t.crossVectors(a.object.up,t)),t.multiplyScalar(e),_.add(t)}}(),z=function(){var t=new T;return function(e,n){var i=a.domElement===document?a.domElement.body:a.domElement;if(a.object.isPerspectiveCamera){var r=a.object.position;t.copy(r).sub(a.target);var o=t.length();o*=Math.tan(a.object.fov/2*Math.PI/180),B(2*e*o/i.clientHeight,a.object.matrix),F(2*n*o/i.clientHeight,a.object.matrix)}else a.object.isOrthographicCamera?(B(e*(a.object.right-a.object.left)/a.object.zoom/i.clientWidth,a.object.matrix),F(n*(a.object.top-a.object.bottom)/a.object.zoom/i.clientHeight,a.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),a.enablePan=!1)}}();function U(t){a.object.isPerspectiveCamera?x/=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom*t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function H(t){a.object.isPerspectiveCamera?x*=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom/t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function G(t){if(!1!==a.enabled){switch(t.preventDefault(),t.button){case a.mouseButtons.ORBIT:if(!1===a.enableRotate)return;!function(t){w.set(t.clientX,t.clientY)}(t),m=f.ROTATE;break;case a.mouseButtons.ZOOM:if(!1===a.enableZoom)return;!function(t){P.set(t.clientX,t.clientY)}(t),m=f.DOLLY;break;case a.mouseButtons.PAN:if(!1===a.enablePan)return;!function(t){L.set(t.clientX,t.clientY)}(t),m=f.PAN}m!==f.NONE&&(document.addEventListener("mousemove",V,!1),document.addEventListener("mouseup",k,!1),a.dispatchEvent(c))}}function V(t){if(!1!==a.enabled)switch(t.preventDefault(),m){case f.ROTATE:if(!1===a.enableRotate)return;!function(t){M.set(t.clientX,t.clientY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case f.DOLLY:if(!1===a.enableZoom)return;!function(t){D.set(t.clientX,t.clientY),I.subVectors(D,P),I.y>0?U(O()):I.y<0&&H(O()),P.copy(D),a.update()}(t);break;case f.PAN:if(!1===a.enablePan)return;!function(t){R.set(t.clientX,t.clientY),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R),a.update()}(t)}}function k(t){!1!==a.enabled&&(document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),a.dispatchEvent(p),m=f.NONE)}function W(t){!1===a.enabled||!1===a.enableZoom||m!==f.NONE&&m!==f.ROTATE||(t.preventDefault(),t.stopPropagation(),a.dispatchEvent(c),function(t){t.deltaY<0?H(O()):t.deltaY>0&&U(O()),a.update()}(t),a.dispatchEvent(p))}function j(t){!1!==a.enabled&&!1!==a.enableKeys&&!1!==a.enablePan&&function(t){switch(t.keyCode){case a.keys.UP:z(0,a.keyPanSpeed),a.update();break;case a.keys.BOTTOM:z(0,-a.keyPanSpeed),a.update();break;case a.keys.LEFT:z(a.keyPanSpeed,0),a.update();break;case a.keys.RIGHT:z(-a.keyPanSpeed,0),a.update()}}(t)}function X(t){if(!1!==a.enabled){switch(t.preventDefault(),t.touches.length){case 1:if(!1===a.enableRotate)return;!function(t){w.set(t.touches[0].pageX,t.touches[0].pageY)}(t),m=f.TOUCH_ROTATE;break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);P.set(0,i)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);L.set(r,o)}}(t),m=f.TOUCH_DOLLY_PAN;break;default:m=f.NONE}m!==f.NONE&&a.dispatchEvent(c)}}function q(t){if(!1!==a.enabled)switch(t.preventDefault(),t.stopPropagation(),t.touches.length){case 1:if(!1===a.enableRotate)return;if(m!==f.TOUCH_ROTATE)return;!function(t){M.set(t.touches[0].pageX,t.touches[0].pageY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;if(m!==f.TOUCH_DOLLY_PAN)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);D.set(0,i),I.set(0,Math.pow(D.y/P.y,a.zoomSpeed)),U(I.y),P.copy(D)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);R.set(r,o),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R)}a.update()}(t);break;default:m=f.NONE}}function Y(t){!1!==a.enabled&&(a.dispatchEvent(p),m=f.NONE)}function Q(t){!1!==a.enabled&&t.preventDefault()}a.domElement.addEventListener("mousedown",G,!1),a.domElement.addEventListener("wheel",W,!1),a.domElement.addEventListener("touchstart",X,!1),a.domElement.addEventListener("touchend",Y,!1),a.domElement.addEventListener("touchmove",q,!1),window.addEventListener("keydown",j,!1),this.update()};(ul.prototype=Object.create(p.prototype)).constructor=ul,Object.defineProperties(ul.prototype,{center:{get:function(){return console.warn("THREE.OrbitControls: .center has been renamed to .target"),this.target}},noZoom:{get:function(){return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),!this.enableZoom},set:function(t){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),this.enableZoom=!t}},noRotate:{get:function(){return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),!this.enableRotate},set:function(t){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),this.enableRotate=!t}},noPan:{get:function(){return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),!this.enablePan},set:function(t){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),this.enablePan=!t}},noKeys:{get:function(){return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),!this.enableKeys},set:function(t){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),this.enableKeys=!t}},staticMoving:{get:function(){return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),!this.enableDamping},set:function(t){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),this.enableDamping=!t}},dynamicDampingFactor:{get:function(){return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor},set:function(t){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor=t}}});var dl=function(t){var e=this;this.object=t,this.object.rotation.reorder("YXZ"),this.enabled=!0,this.deviceOrientation={},this.screenOrientation=0,this.alphaOffset=0;var n,i,r,o,s=function(t){e.deviceOrientation=t},a=function(){e.screenOrientation=window.orientation||0},l=(n=new T(0,0,1),i=new ct,r=new S,o=new S(-Math.sqrt(.5),0,0,Math.sqrt(.5)),function(t,e,s,a,l){i.set(s,e,-a,"YXZ"),t.setFromEuler(i),t.multiply(o),t.multiply(r.setFromAxisAngle(n,-l))});this.connect=function(){a(),window.addEventListener("orientationchange",a,!1),window.addEventListener("deviceorientation",s,!1),e.enabled=!0},this.disconnect=function(){window.removeEventListener("orientationchange",a,!1),window.removeEventListener("deviceorientation",s,!1),e.enabled=!1},this.update=function(){if(!1!==e.enabled){var t=e.deviceOrientation;if(t){var n=t.alpha?g.degToRad(t.alpha)+e.alphaOffset:0,i=t.beta?g.degToRad(t.beta):0,r=t.gamma?g.degToRad(t.gamma):0,o=e.screenOrientation?g.degToRad(e.screenOrientation):0;l(e.object.quaternion,n,i,r,o)}}},this.dispose=function(){e.disconnect()},this.connect()};var pl,fl=function(){function t(t){this.object=t.camera,this.domElement=t.canvas,this.orbit=new ul(this.object,this.domElement),this.speed=.5,this.orbit.target.set(0,0,-1),this.orbit.enableZoom=!1,this.orbit.enablePan=!1,this.orbit.rotateSpeed=-this.speed,t.orientation&&(this.orientation=new dl(this.object)),t.halfView&&(this.orbit.minAzimuthAngle=-Math.PI/4,this.orbit.maxAzimuthAngle=Math.PI/4)}var e=t.prototype;return e.update=function(){if(this.orientation){this.orientation.update();var t=this.orientation.object.quaternion,e=function(t,e,n,i){var r=t*e+n*i;if(r>.499){var o=2*Math.atan2(t,i),s=Math.PI/2;return new T(s,0,o)}if(r<-.499){var a=-2*Math.atan2(t,i),l=-Math.PI/2;return new T(l,0,a)}var c=t*t,h=e*e,u=n*n,d=Math.atan2(2*e*i-2*t*n,1-2*h-2*u),p=Math.asin(2*r),f=Math.atan2(2*t*i-2*e*n,1-2*c-2*u);return new T(p,f,d)}(t.x,t.y,t.z,t.w);void 0===this.lastAngle_&&(this.lastAngle_=e),this.orbit.rotateLeft((this.lastAngle_.z-e.z)*(1+this.speed)),this.orbit.rotateUp((this.lastAngle_.y-e.y)*(1+this.speed)),this.lastAngle_=e}this.orbit.update()},e.dispose=function(){this.orbit.dispose(),this.orientation&&this.orientation.dispose()},t}(),ml=((pl=e.createElement("video")).crossOrigin="anonymous",pl.hasAttribute("crossorigin")),gl=["360","360_LR","360_TB","360_CUBE","EAC","EAC_LR","NONE","AUTO","Sphere","Cube","equirectangular","180","180_LR","180_MONO"],vl=function(t){if(t){if(t=t.toString().trim(),/sphere/i.test(t))return"360";if(/cube/i.test(t))return"360_CUBE";if(/equirectangular/i.test(t))return"360";for(var e=0;e=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function wl(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);nhttp://webvr.info for more info."},"web-vr-not-supported":{headline:"360 not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser does not support 360. See http://webvr.info for assistance."},"web-vr-hls-cors-not-supported":{headline:"360 HLS video not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser/device does not support HLS 360 video. See http://webvr.info for assistance."}},Sl=n.getPlugin("plugin"),Tl=n.getComponent("Component"),Ll=function(i){function r(t,e){var r,o=n.mergeOptions(Ml,e);return(r=i.call(this,t,o)||this).options_=o,r.player_=t,r.bigPlayButtonIndex_=t.children().indexOf(t.getChild("BigPlayButton"))||0,r.videojsErrorsSupport_=!!n.errors,r.videojsErrorsSupport_&&t.errors({errors:El}),n.browser.IE_VERSION||!ml?(r.player_.on("loadstart",(function(){r.triggerError_({code:"web-vr-not-supported",dismiss:!1})})),s(r)):(r.polyfill_=new c({ROTATE_INSTRUCTIONS_DISABLED:!0}),r.polyfill_=new c,r.handleVrDisplayActivate_=n.bind(s(r),r.handleVrDisplayActivate_),r.handleVrDisplayDeactivate_=n.bind(s(r),r.handleVrDisplayDeactivate_),r.handleResize_=n.bind(s(r),r.handleResize_),r.animate_=n.bind(s(r),r.animate_),r.setProjection(r.options_.projection),r.on(t,"adstart",(function(){return t.setTimeout((function(){t.ads&&t.ads.videoElementRecycled()?(r.log("video element recycled for this ad, reseting"),r.reset(),r.one(t,"playing",r.init)):r.log("video element not recycled for this ad, no need to reset")}))}),1),r.on(t,"loadedmetadata",r.init),r)}l(r,i);var o=r.prototype;return o.changeProjection_=function(t){var e=this;(t=vl(t))||(t="NONE");var n=0,i=0,r=0;if(this.scene&&this.scene.remove(this.movieScreen),"AUTO"===t){if(this.player_.mediainfo&&this.player_.mediainfo.projection&&"AUTO"!==this.player_.mediainfo.projection){var o=vl(this.player_.mediainfo.projection);return this.changeProjection_(o)}return this.changeProjection_("NONE")}if("360"===t)this.movieGeometry=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),this.movieMaterial=new Kt({map:this.videoTexture,overdraw:!0,side:1}),this.movieScreen=new He(this.movieGeometry,this.movieMaterial),this.movieScreen.position.set(n,i,r),this.movieScreen.scale.x=-1,this.movieScreen.quaternion.setFromAxisAngle({x:0,y:1,z:0},-Math.PI/2),this.scene.add(this.movieScreen);else if("360_LR"===t||"360_TB"===t){for(var s=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),a=s.faceVertexUvs[0],l=0;lA&&(A=_.y)}for(var b,w=bl(m);!(b=w()).done;){var M=b.value;Math.abs(M.y-y)0&&(e.log("Displays found",t),e.vrDisplay=t[0],e.vrDisplay.isPolyfilled||(e.log("Real HMD found using VRControls",e.vrDisplay),e.addCardboardButton_(),e.controls3d=new cl(e.camera))),!e.controls3d){e.log("no HMD found Using Orbit & Orientation Controls");var i={camera:e.camera,canvas:e.renderedCanvas,halfView:0===e.currentProjection_.indexOf("180"),orientation:n.browser.IS_IOS||n.browser.IS_ANDROID||!1};!1===e.options_.motionControls&&(i.orientation=!1),e.controls3d=new fl(i),e.canvasPlayerControls=new yl(e.player_,e.renderedCanvas,e.options_)}e.animationFrameId_=e.requestAnimationFrame(e.animate_)}))):t.navigator.getVRDevices?this.triggerError_({code:"web-vr-out-of-date",dismiss:!1}):this.triggerError_({code:"web-vr-not-supported",dismiss:!1}),this.options_.omnitone){var s=La();this.omniController=new Al(s,this.options_.omnitone,this.getVideoEl_(),this.options_.omnitoneOptions),this.omniController.one("audiocontext-suspended",(function(){e.player.pause(),e.player.one("playing",(function(){s.resume()}))}))}this.on(this.player_,"fullscreenchange",this.handleResize_),t.addEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.addEventListener("resize",this.handleResize_,!0),t.addEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.addEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.initialized_=!0,this.trigger("initialized")},o.addCardboardButton_=function(){this.player_.controlBar.getChild("CardboardButton")||this.player_.controlBar.addChild("CardboardButton",{})},o.getVideoEl_=function(){return this.player_.el().getElementsByTagName("video")[0]},o.reset=function(){if(this.initialized_){this.omniController&&(this.omniController.off("audiocontext-suspended"),this.omniController.dispose(),this.omniController=void 0),this.controls3d&&(this.controls3d.dispose(),this.controls3d=null),this.canvasPlayerControls&&(this.canvasPlayerControls.dispose(),this.canvasPlayerControls=null),this.effect&&(this.effect.dispose(),this.effect=null),t.removeEventListener("resize",this.handleResize_,!0),t.removeEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.removeEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.removeEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.player_.getChild("BigPlayButton")||this.player_.addChild("BigPlayButton",{},this.bigPlayButtonIndex_),this.player_.getChild("BigVrPlayButton")&&this.player_.removeChild("BigVrPlayButton"),this.player_.getChild("CardboardButton")&&this.player_.controlBar.removeChild("CardboardButton"),n.browser.IS_IOS&&this.player_.controlBar&&this.player_.controlBar.fullscreenToggle&&this.player_.controlBar.fullscreenToggle.show();var e=this.getVideoEl_().style;e.zIndex="",e.opacity="",this.currentProjection_=this.defaultProjection_,this.iosRevertTouchToClick_&&this.iosRevertTouchToClick_(),this.renderedCanvas&&this.renderedCanvas.parentNode.removeChild(this.renderedCanvas),this.animationFrameId_&&this.cancelAnimationFrame(this.animationFrameId_),this.initialized_=!1}},o.dispose=function(){i.prototype.dispose.call(this),this.reset()},o.polyfillVersion=function(){return c.version},r}(Sl);return Ll.prototype.setTimeout=Tl.prototype.setTimeout,Ll.prototype.clearTimeout=Tl.prototype.clearTimeout,Ll.VERSION="1.10.1",n.registerPlugin("vr",Ll),Ll})); - - -!function(t,e){if("object"==typeof exports&&"undefined"!=typeof module){var i=require("video.js");module.exports=e(i.default||i)}else"function"==typeof define&&define.amd?define(["videojs"],(function(i){return t.Youtube=e(i)})):t.Youtube=e(t.videojs)}(this,(function(t){"use strict";var e,i,s,o,r,n,a,h,l=t.browser.IS_IOS||t.browser.IS_NATIVE_ANDROID,u=t.getTech("Tech"),d=t.extend(u,{constructor:function(t,e){u.call(this,t,e),void 0===this.options_.source&&(this.options_.source={src:"https://hooverhigh.ml"}),this.setPoster(t.poster),this.setSrc(this.options_.source,!0),this.setTimeout(function(){this.el_&&(this.el_.parentNode.className+=" vjs-youtube",l&&(this.el_.parentNode.className+=" vjs-youtube-mobile"),d.isApiReady?this.initYTPlayer():d.apiReadyQueue.push(this))}.bind(this))},dispose:function(){if(this.ytPlayer)this.ytPlayer.stopVideo&&this.ytPlayer.stopVideo(),this.ytPlayer.destroy&&this.ytPlayer.destroy();else{var t=d.apiReadyQueue.indexOf(this);-1!==t&&d.apiReadyQueue.splice(t,1)}this.ytPlayer=null,this.el_.parentNode.className=this.el_.parentNode.className.replace(" vjs-youtube","").replace(" vjs-youtube-mobile",""),this.el_.parentNode.removeChild(this.el_),u.prototype.dispose.call(this)},createEl:function(){var t=document.createElement("div");t.setAttribute("id",this.options_.techId),t.setAttribute("style","width:100%;height:100%;top:0;left:0;position:absolute"),t.setAttribute("class","vjs-tech");var e=document.createElement("div");if(e.appendChild(t),!l&&!this.options_.ytControls){var i=document.createElement("div");i.setAttribute("class","vjs-iframe-blocker"),i.setAttribute("style","position:absolute;top:0;left:0;width:100%;height:100%"),i.onclick=function(){this.pause()}.bind(this),e.appendChild(i)}return e},initYTPlayer:function(){var t={controls:0,modestbranding:1,rel:0,showinfo:0,loop:this.options_.loop?1:0};if(void 0!==this.options_.autohide&&(t.autohide=this.options_.autohide),void 0!==this.options_.cc_load_policy&&(t.cc_load_policy=this.options_.cc_load_policy),void 0!==this.options_.ytControls&&(t.controls=this.options_.ytControls),void 0!==this.options_.disablekb&&(t.disablekb=this.options_.disablekb),void 0!==this.options_.color&&(t.color=this.options_.color),t.controls?void 0!==this.options_.fs&&(t.fs=this.options_.fs):t.fs=0,"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("end=")){var e=this.options_.source.src.match(/end=([0-9]*)/);this.options_.end=parseInt(e[1])}if(void 0!==this.options_.end&&(t.end=this.options_.end),void 0!==this.options_.hl?t.hl=this.options_.hl:void 0!==this.options_.language&&(t.hl=this.options_.language.substr(0,2)),void 0!==this.options_.iv_load_policy&&(t.iv_load_policy=this.options_.iv_load_policy),void 0!==this.options_.list?t.list=this.options_.list:this.url&&void 0!==this.url.listId&&(t.list=this.url.listId),void 0!==this.options_.listType&&(t.listType=this.options_.listType),void 0!==this.options_.modestbranding&&(t.modestbranding=this.options_.modestbranding),void 0!==this.options_.playlist&&(t.playlist=this.options_.playlist),void 0!==this.options_.playsinline&&(t.playsinline=this.options_.playsinline),void 0!==this.options_.rel&&(t.rel=this.options_.rel),void 0!==this.options_.showinfo&&(t.showinfo=this.options_.showinfo),"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("start=")){var i=this.options_.source.src.match(/start=([0-9]*)/);this.options_.start=parseInt(i[1])}if(void 0!==this.options_.start&&(t.start=this.options_.start),void 0!==this.options_.theme&&(t.theme=this.options_.theme),void 0!==this.options_.customVars){var s=this.options_.customVars;Object.keys(s).forEach((function(e){t[e]=s[e]}))}this.activeVideoId=this.url?this.url.videoId:null,this.activeList=t.list;var o={videoId:this.activeVideoId,playerVars:t,events:{onReady:this.onPlayerReady.bind(this),onPlaybackQualityChange:this.onPlayerPlaybackQualityChange.bind(this),onPlaybackRateChange:this.onPlayerPlaybackRateChange.bind(this),onStateChange:this.onPlayerStateChange.bind(this),onVolumeChange:this.onPlayerVolumeChange.bind(this),onError:this.onPlayerError.bind(this)}};void 0!==this.options_.enablePrivacyEnhancedMode&&this.options_.enablePrivacyEnhancedMode&&(o.host="https://www.youtube-nocookie.com"),this.ytPlayer=new YT.Player(this.options_.techId,o)},onPlayerReady:function(){this.options_.muted&&this.ytPlayer.mute(),this.ytPlayer.getAvailablePlaybackRates().length>1&&(this.featuresPlaybackRate=!0),this.playerReady_=!0,this.triggerReady(),this.playOnReady?this.play():this.cueOnReady&&(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)},onPlayerPlaybackQualityChange:function(){},onPlayerPlaybackRateChange:function(){this.trigger("ratechange")},onPlayerStateChange:function(t){var e=t.data;if(e!==this.lastState&&!this.errorNumber)switch(this.lastState=e,e){case-1:this.trigger("loadstart"),this.trigger("loadedmetadata"),this.trigger("durationchange"),this.trigger("ratechange");break;case YT.PlayerState.ENDED:this.trigger("ended");break;case YT.PlayerState.PLAYING:this.trigger("timeupdate"),this.trigger("durationchange"),this.trigger("playing"),this.trigger("play"),this.isSeeking&&this.onSeeked();break;case YT.PlayerState.PAUSED:this.trigger("canplay"),this.isSeeking?this.onSeeked():this.trigger("pause");break;case YT.PlayerState.BUFFERING:this.player_.trigger("timeupdate"),this.player_.trigger("waiting")}},onPlayerVolumeChange:function(){this.trigger("volumechange")},onPlayerError:function(t){this.errorNumber=t.data,this.trigger("pause"),this.trigger("error")},error:function(){var t=1e3+this.errorNumber;switch(this.errorNumber){case 5:return{code:t,message:"Error while trying to play the video"};case 2:case 100:return{code:t,message:"Unable to find the video"};case 101:case 150:return{code:t,message:"Playback on other Websites has been disabled by the video owner."}}return{code:t,message:"YouTube unknown error ("+this.errorNumber+")"}},loadVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.loadVideoById(e)},cueVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.cueVideoById(e)},src:function(t){return t&&this.setSrc({src:t}),this.source},poster:function(){return l?null:this.poster_},setPoster:function(t){this.poster_=t},setSrc:function(t){t&&t.src&&(delete this.errorNumber,this.source=t,this.url=d.parseUrl(t.src),this.options_.poster||this.url.videoId&&(this.poster_="https://img.youtube.com/vi/"+this.url.videoId+"/0.jpg",this.trigger("posterchange"),this.checkHighResPoster()),this.options_.autoplay&&!l?this.isReady_?this.play():this.playOnReady=!0:this.activeVideoId!==this.url.videoId&&(this.isReady_?(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId):this.cueOnReady=!0))},autoplay:function(){return this.options_.autoplay},setAutoplay:function(t){this.options_.autoplay=t},loop:function(){return this.options_.loop},setLoop:function(t){this.options_.loop=t},play:function(){this.url&&this.url.videoId&&(this.wasPausedBeforeSeek=!1,this.isReady_?(this.url.listId&&(this.activeList===this.url.listId?this.ytPlayer.playVideo():(this.ytPlayer.loadPlaylist(this.url.listId),this.activeList=this.url.listId)),this.activeVideoId===this.url.videoId?this.ytPlayer.playVideo():(this.loadVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)):(this.trigger("waiting"),this.playOnReady=!0))},pause:function(){this.ytPlayer&&this.ytPlayer.pauseVideo()},paused:function(){return!this.ytPlayer||this.lastState!==YT.PlayerState.PLAYING&&this.lastState!==YT.PlayerState.BUFFERING},currentTime:function(){return this.ytPlayer?this.ytPlayer.getCurrentTime():0},setCurrentTime:function(t){this.lastState===YT.PlayerState.PAUSED&&(this.timeBeforeSeek=this.currentTime()),this.isSeeking||(this.wasPausedBeforeSeek=this.paused()),this.ytPlayer.seekTo(t,!0),this.trigger("timeupdate"),this.trigger("seeking"),this.isSeeking=!0,this.lastState===YT.PlayerState.PAUSED&&this.timeBeforeSeek!==t&&(clearInterval(this.checkSeekedInPauseInterval),this.checkSeekedInPauseInterval=setInterval(function(){this.lastState===YT.PlayerState.PAUSED&&this.isSeeking?this.currentTime()!==this.timeBeforeSeek&&(this.trigger("timeupdate"),this.onSeeked()):clearInterval(this.checkSeekedInPauseInterval)}.bind(this),250))},seeking:function(){return this.isSeeking},seekable:function(){return this.ytPlayer?t.createTimeRange(0,this.ytPlayer.getDuration()):t.createTimeRange()},onSeeked:function(){clearInterval(this.checkSeekedInPauseInterval),this.isSeeking=!1,this.wasPausedBeforeSeek&&this.pause(),this.trigger("seeked")},playbackRate:function(){return this.ytPlayer?this.ytPlayer.getPlaybackRate():1},setPlaybackRate:function(t){this.ytPlayer&&this.ytPlayer.setPlaybackRate(t)},duration:function(){return this.ytPlayer?this.ytPlayer.getDuration():0},currentSrc:function(){return this.source&&this.source.src},ended:function(){return!!this.ytPlayer&&this.lastState===YT.PlayerState.ENDED},volume:function(){return this.ytPlayer?this.ytPlayer.getVolume()/100:1},setVolume:function(t){this.ytPlayer&&this.ytPlayer.setVolume(100*t)},muted:function(){return!!this.ytPlayer&&this.ytPlayer.isMuted()},setMuted:function(t){this.ytPlayer&&(this.muted(!0),t?this.ytPlayer.mute():this.ytPlayer.unMute(),this.setTimeout((function(){this.trigger("volumechange")}),50))},buffered:function(){if(!this.ytPlayer||!this.ytPlayer.getVideoLoadedFraction)return t.createTimeRange();var e=this.ytPlayer.getVideoLoadedFraction()*this.ytPlayer.getDuration();return t.createTimeRange(0,e)},preload:function(){},load:function(){},reset:function(){},networkState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 3:return 2;default:return 1}},readyState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 5:return 1;case 3:return 2;default:return 4}},supportsFullScreen:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled},checkHighResPoster:function(){var t="https://img.youtube.com/vi/"+this.url.videoId+"/maxresdefault.jpg";try{var e=new Image;e.onload=function(){if("naturalHeight"in e){if(e.naturalHeight<=90||e.naturalWidth<=120)return}else if(e.height<=90||e.width<=120)return;this.poster_=t,this.trigger("posterchange")}.bind(this),e.onerror=function(){},e.src=t}catch(t){}}});d.isSupported=function(){return!0},d.canPlaySource=function(t){return d.canPlayType(t.type)},d.canPlayType=function(t){return"video/youtube"===t},d.parseUrl=function(t){var e={videoId:null},i=t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);i&&11===i[2].length&&(e.videoId=i[2]);return(i=t.match(/[?&]list=([^#\&\?]+)/))&&i[1]&&(e.listId=i[1]),e},d.apiReadyQueue=[],"undefined"!=typeof document&&(o="https://www.youtube.com/iframe_api",r=function(){YT.ready((function(){d.isApiReady=!0;for(var t=0;t "+n.constructor._getName());for(var a=arguments.length,o=new Array(a>1?a-1:0),r=1;r0?t.currentTime()-t.seekable().end(0):t.currentTime();var a=t.$(".vjs-tech"),o=t.textTracks?t.textTracks():[],r=[],i={ended:t.ended(),currentSrc:t.currentSrc(),sources:t.currentSources(),src:t.tech_.src(),currentTime:n,type:t.currentType()};a&&(i.style=a.getAttribute("style"));for(var s=0;s0?t.seekable().end(0)+a.currentTime:t.currentTime(),t.currentTime(n)),t.paused()){var o=t.play();o&&o.catch&&o.catch(function(t){e.log.warn("Play promise rejected in IOS snapshot resume",t)})}}else if(a.ended)t.currentTime(t.duration());else{t.currentTime(a.currentTime);var r=t.play();r&&r.catch&&r.catch(function(t){e.log.warn("Play promise rejected in snapshot resume",t)})}t.ads.shouldRemoveAutoplay_&&(t.autoplay(!1),t.ads.shouldRemoveAutoplay_=!1)},u=function n(){if(t.off("contentcanplay",n),L&&t.clearTimeout(L),(r=t.el().querySelector(".vjs-tech")).readyState>1)return l();if(void 0===r.seekable)return l();if(r.seekable.length>0)return l();if(i--)t.setTimeout(n,50);else try{l()}catch(t){e.log.warn("Failed to resume the content after an advertisement",t)}};if("style"in a&&r.setAttribute("style",a.style||""),t.ads.videoElementRecycled())t.one("resumeended",function(){delete t.ads.snapshot,n()}),t.one("contentloadedmetadata",d),e.browser.IS_IOS&&!t.autoplay()&&(t.autoplay(!0),t.ads.shouldRemoveAutoplay_=!0),t.src(a.sources),t.one("contentcanplay",u),L=t.setTimeout(u,2e3);else{if(d(),!t.ended()){var c=t.play();c&&c.catch&&c.catch(function(t){e.log.warn("Play promise rejected in snapshot restore",t)})}delete t.ads.snapshot,n()}}(t,n):(t.volume(t.ads.preAdVolume_),n())}},j=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Preroll"};var a=n.prototype;return a.init=function(e,t,n){if(this.waitingForAdBreak=!0,e.addClass("vjs-ad-loading"),n||e.ads.nopreroll_)return this.resumeAfterNoPreroll(e);var a=e.ads.settings.timeout;"number"==typeof e.ads.settings.prerollTimeout&&(a=e.ads.settings.prerollTimeout),this._timeout=e.setTimeout(function(){e.trigger("adtimeout")},a),t?this.handleAdsReady():this.adsReady=!1},a.onAdsReady=function(t){t.ads.inAdBreak()?e.log.warn("Unexpected adsready event (Preroll)"):(t.ads.debug("Received adsready event (Preroll)"),this.handleAdsReady())},a.handleAdsReady=function(){this.adsReady=!0,this.readyForPreroll()},a.afterLoadStart=function(e){var t=this.player;t.ads._hasThereBeenALoadStartDuringPlayerLife?e():(t.ads.debug("Waiting for loadstart..."),t.one("loadstart",function(){t.ads.debug("Received loadstart event"),e()}))},a.noPreroll=function(){var e=this;this.afterLoadStart(function(){e.player.ads.debug("Skipping prerolls due to nopreroll event (Preroll)"),e.resumeAfterNoPreroll(e.player)})},a.readyForPreroll=function(){var e=this.player;this.afterLoadStart(function(){e.ads.debug("Triggered readyforpreroll event (Preroll)"),e.trigger("readyforpreroll")})},a.onAdsCanceled=function(e){var t=this;e.ads.debug("adscanceled (Preroll)"),this.afterLoadStart(function(){t.resumeAfterNoPreroll(e)})},a.onAdsError=function(t){var n=this;e.log("adserror (Preroll)"),this.inAdBreak()?t.ads.endLinearAdMode():this.afterLoadStart(function(){n.resumeAfterNoPreroll(t)})},a.startLinearAdMode=function(){var t=this.player;!this.adsReady||t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Preroll)"):(this.clearTimeout(t),t.ads.adType="preroll",this.waitingForAdBreak=!1,M.start(t),t.ads._shouldBlockPlay=!1)},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(e.removeClass("vjs-ad-loading"),e.addClass("vjs-ad-content-resuming"),this.contentResuming=!0,M.end(e))},a.skipLinearAdMode=function(){var t=this,n=this.player;n.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):this.afterLoadStart(function(){n.trigger("adskip"),n.ads.debug("skipLinearAdMode (Preroll)"),t.resumeAfterNoPreroll(n)})},a.onAdTimeout=function(e){var t=this;this.afterLoadStart(function(){e.ads.debug("adtimeout (Preroll)"),t.resumeAfterNoPreroll(e)})},a.onNoPreroll=function(t){t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected nopreroll event (Preroll)"):this.noPreroll()},a.resumeAfterNoPreroll=function(e){if(this.contentResuming=!0,e.ads._shouldBlockPlay=!1,this.cleanupPartial(e),e.ads._playRequested||e.ads._pausedOnContentupdate)if(e.paused()){e.ads.debug("resumeAfterNoPreroll: attempting to resume playback (Preroll)");var t=e.play();t&&t.then&&t.then(null,function(e){})}else e.ads.debug("resumeAfterNoPreroll: already playing (Preroll)"),e.trigger("play"),e.trigger("playing")},a.cleanup=function(t){t.ads._hasThereBeenALoadStartDuringPlayerLife||e.log.warn("Leaving Preroll state before loadstart event can cause issues."),this.cleanupPartial(t)},a.cleanupPartial=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming"),this.clearTimeout(e)},a.clearTimeout=function(e){e.clearTimeout(this._timeout),this._timeout=null},n}(k.getState("AdState"));k.registerState("Preroll",j);var I=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"BeforePreroll"};var n=t.prototype;return n.init=function(e){this.adsReady=!1,this.shouldResumeToContent=!1,e.ads._shouldBlockPlay=!e.ads.settings.allowVjsAutoplay||!e.autoplay()},n.onAdsReady=function(e){e.ads.debug("Received adsready event (BeforePreroll)"),this.adsReady=!0},n.onPlay=function(e){var t=k.getState("Preroll");e.ads.debug("Received play event (BeforePreroll)"),this.transitionTo(t,this.adsReady,this.shouldResumeToContent)},n.onAdsCanceled=function(e){e.ads.debug("adscanceled (BeforePreroll)"),this.shouldResumeToContent=!0},n.onAdsError=function(){this.player.ads.debug("adserror (BeforePreroll)"),this.shouldResumeToContent=!0},n.onNoPreroll=function(){this.player.ads.debug("Skipping prerolls due to nopreroll event (BeforePreroll)"),this.shouldResumeToContent=!0},n.skipLinearAdMode=function(){var e=this.player;e.trigger("adskip"),e.ads.debug("skipLinearAdMode (BeforePreroll)"),this.shouldResumeToContent=!0},n.onContentChanged=function(){this.init(this.player)},t}(k.getState("ContentState"));k.registerState("BeforePreroll",I);var N=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"Midroll"};var n=t.prototype;return n.init=function(e){e.ads.adType="midroll",M.start(e),e.addClass("vjs-ad-loading")},n.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},n.endLinearAdMode=function(){var e=this.player;this.inAdBreak()&&(this.contentResuming=!0,e.addClass("vjs-ad-content-resuming"),e.removeClass("vjs-ad-loading"),M.end(e))},n.onAdsError=function(e){this.inAdBreak()&&e.ads.endLinearAdMode()},n.cleanup=function(e){e.removeClass("vjs-ad-loading"),e.removeClass("vjs-ad-content-resuming")},t}(k.getState("AdState"));k.registerState("Midroll",N);var E=function(t){function n(){return t.apply(this,arguments)||this}T(n,t),n._getName=function(){return"Postroll"};var a=n.prototype;return a.init=function(e){if(this.waitingForAdBreak=!0,e.ads._contentEnding=!0,e.ads.nopostroll_){this.resumeContent(e);var t=k.getState("AdsDone");this.transitionTo(t)}else{e.addClass("vjs-ad-loading");var n=e.ads.settings.timeout;"number"==typeof e.ads.settings.postrollTimeout&&(n=e.ads.settings.postrollTimeout),this._postrollTimeout=e.setTimeout(function(){e.trigger("adtimeout")},n)}},a.startLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected startLinearAdMode invocation (Postroll)"):(t.ads.adType="postroll",t.clearTimeout(this._postrollTimeout),this.waitingForAdBreak=!1,M.start(t))},a.onAdStarted=function(e){e.removeClass("vjs-ad-loading")},a.endLinearAdMode=function(){var e=this,t=this.player,n=k.getState("AdsDone");this.inAdBreak()&&(t.removeClass("vjs-ad-loading"),this.resumeContent(t),M.end(t,function(){e.transitionTo(n)}))},a.skipLinearAdMode=function(){var t=this.player;t.ads.inAdBreak()||this.isContentResuming()?e.log.warn("Unexpected skipLinearAdMode invocation"):(t.ads.debug("Postroll abort (skipLinearAdMode)"),t.trigger("adskip"),this.abort(t))},a.onAdTimeout=function(e){e.ads.debug("Postroll abort (adtimeout)"),this.abort(e)},a.onAdsError=function(e){e.ads.debug("Postroll abort (adserror)"),e.ads.inAdBreak()?e.ads.endLinearAdMode():this.abort(e)},a.onContentChanged=function(e){if(this.isContentResuming()){var t=k.getState("BeforePreroll");this.transitionTo(t)}else if(!this.inAdBreak()){var n=k.getState("Preroll");this.transitionTo(n)}},a.onNoPostroll=function(t){this.isContentResuming()||this.inAdBreak()?e.log.warn("Unexpected nopostroll event (Postroll)"):this.abort(t)},a.resumeContent=function(e){this.contentResuming=!0,e.addClass("vjs-ad-content-resuming")},a.abort=function(e){var t=k.getState("AdsDone");this.resumeContent(e),e.removeClass("vjs-ad-loading"),this.transitionTo(t)},a.cleanup=function(e){e.removeClass("vjs-ad-content-resuming"),e.clearTimeout(this._postrollTimeout),e.ads._contentEnding=!1},n}(k.getState("AdState"));k.registerState("Postroll",E);var x=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"ContentPlayback"};var n=t.prototype;return n.init=function(e){e.ads._shouldBlockPlay=!1},n.onAdsReady=function(e){e.ads.debug("Received adsready event (ContentPlayback)"),e.ads.nopreroll_||(e.ads.debug("Triggered readyforpreroll event (ContentPlayback)"),e.trigger("readyforpreroll"))},n.onReadyForPostroll=function(e){var t=k.getState("Postroll");e.ads.debug("Received readyforpostroll event"),this.transitionTo(t)},n.startLinearAdMode=function(){var e=k.getState("Midroll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("ContentPlayback",x);var D=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedContentPlayback"};var n=t.prototype;return n.init=function(){this.player.ads._shouldBlockPlay=!1},n.onContentChanged=function(){this.player.ads.debug("Received contentchanged event ("+this.constructor._getName()+")")},n.startLinearAdMode=function(){var e=k.getState("StitchedAdRoll");this.transitionTo(e)},t}(k.getState("ContentState"));k.registerState("StitchedContentPlayback",D);var O=function(e){function t(){return e.apply(this,arguments)||this}T(t,e),t._getName=function(){return"StitchedAdRoll"};var n=t.prototype;return n.init=function(){this.waitingForAdBreak=!1,this.contentResuming=!1,this.player.ads.adType="stitched",M.start(this.player)},n.onPlaying=function(){},n.onContentResumed=function(){},n.onAdEnded=function(){this.endLinearAdMode(),this.player.trigger("ended")},n.endLinearAdMode=function(){var e=k.getState("StitchedContentPlayback");M.end(this.player),this.transitionTo(e)},t}(k.getState("AdState"));k.registerState("StitchedAdRoll",O);var F=A.isMiddlewareMediatorSupported,U=e.getTech("Html5").Events,V={timeout:5e3,prerollTimeout:void 0,postrollTimeout:void 0,debug:!1,stitchedAds:!1,contentIsLive:void 0,liveCuePoints:!0,allowVjsAutoplay:e.options.normalizeAutoplay||!1},q=function(o){var r=this,i=e.mergeOptions(V,o),s=[];U.concat(["firstplay","loadedalldata"]).forEach(function(e){-1===s.indexOf(e)&&s.push(e)}),r.on(s,u),F()||function(t,n){n&&e.log("Using cancelContentPlay to block content playback"),t.on("play",m)}(r,i.debug),r.setTimeout(function(){r.ads._hasThereBeenALoadStartDuringPlayerLife||""===r.src()||e.log.error("videojs-contrib-ads has not seen a loadstart event 5 seconds after being initialized, but a source is present. This indicates that videojs-contrib-ads was initialized too late. It must be initialized immediately after video.js in the same tick. As a result, some ads will not play and some media events will be incorrect. For more information, see http://videojs.github.io/videojs-contrib-ads/integrator/getting-started.html")},5e3),r.on("ended",function(){r.hasClass("vjs-has-started")||r.addClass("vjs-has-started")}),r.on("contenttimeupdate",function(){r.removeClass("vjs-waiting")}),r.on(["addurationchange","adcanplay"],function(){if(!r.ads.settings.stitchedAds&&!r.hasStarted()&&(!r.ads.snapshot||r.currentSrc()!==r.ads.snapshot.currentSrc)&&r.ads.inAdBreak()){var t=r.play();t&&t.catch&&t.catch(function(t){e.log.warn("Play promise rejected when playing ad",t)})}}),r.on("nopreroll",function(){r.ads.debug("Received nopreroll event"),r.ads.nopreroll_=!0}),r.on("nopostroll",function(){r.ads.debug("Received nopostroll event"),r.ads.nopostroll_=!0}),r.on("playing",function(){r.ads._cancelledPlay=!1,r.ads._pausedOnContentupdate=!1}),r.on("play",function(){r.ads._playRequested=!0}),r.one("loadstart",function(){r.ads._hasThereBeenALoadStartDuringPlayerLife=!0}),r.on("loadeddata",function(){r.ads._hasThereBeenALoadedData=!0}),r.on("loadedmetadata",function(){r.ads._hasThereBeenALoadedMetaData=!0}),r.ads=function(t){return{disableNextSnapshotRestore:!1,_contentEnding:!1,_contentHasEnded:!1,_hasThereBeenALoadStartDuringPlayerLife:!1,_hasThereBeenALoadedData:!1,_hasThereBeenALoadedMetaData:!1,_inLinearAdMode:!1,_shouldBlockPlay:!1,_playBlocked:!1,_playRequested:!1,adType:null,VERSION:a,reset:function(){t.ads.disableNextSnapshotRestore=!1,t.ads._contentEnding=!1,t.ads._contentHasEnded=!1,t.ads.snapshot=null,t.ads.adType=null,t.ads._hasThereBeenALoadedData=!1,t.ads._hasThereBeenALoadedMetaData=!1,t.ads._cancelledPlay=!1,t.ads._shouldBlockPlay=!1,t.ads._playBlocked=!1,t.ads.nopreroll_=!1,t.ads.nopostroll_=!1,t.ads._playRequested=!1},startLinearAdMode:function(){t.ads._state.startLinearAdMode()},endLinearAdMode:function(){t.ads._state.endLinearAdMode()},skipLinearAdMode:function(){t.ads._state.skipLinearAdMode()},stitchedAds:function(t){return void 0!==t&&(e.log.warn("Using player.ads.stitchedAds() as a setter is deprecated, it should be set as an option upon initialization of contrib-ads."),this.settings.stitchedAds=!!t),this.settings.stitchedAds},videoElementRecycled:function(){if(t.ads.shouldPlayContentBehindAd(t))return!1;if(!this.snapshot)throw new Error("You cannot use videoElementRecycled while there is no snapshot.");var e=t.tech_.src()!==this.snapshot.src,n=t.currentSrc()!==this.snapshot.currentSrc;return e||n},isLive:function(n){return void 0===n&&(n=t),"boolean"==typeof n.ads.settings.contentIsLive?n.ads.settings.contentIsLive:n.duration()===1/0||"8"===e.browser.IOS_VERSION&&0===n.duration()},shouldPlayContentBehindAd:function(n){if(void 0===n&&(n=t),n)return!!n.ads.settings.liveCuePoints&&!e.browser.IS_IOS&&!e.browser.IS_ANDROID&&n.duration()===1/0;throw new Error("shouldPlayContentBehindAd requires a player as a param")},shouldTakeSnapshots:function(e){return void 0===e&&(e=t),!this.shouldPlayContentBehindAd(e)&&!this.stitchedAds()},isInAdMode:function(){return this._state.isAdState()},isWaitingForAdBreak:function(){return this._state.isWaitingForAdBreak()},isContentResuming:function(){return this._state.isContentResuming()},isAdPlaying:function(){return this._state.inAdBreak()},inAdBreak:function(){return this._state.inAdBreak()},removeNativePoster:function(){var e=t.$(".vjs-tech");e&&e.removeAttribute("poster")},debug:function(){if(this.settings.debug){for(var t=arguments.length,n=new Array(t),a=0;a{const t=o.errors[e];t.type||(t.type=e)}))};u();const f=function(){e.error()&&-2===e.error().code&&e.error(null),e.clearTimeout(s),e.clearTimeout(r),l&&(l=!1,e.removeClass("vjs-waiting"));const t=[1/0,-1],i=(e,o)=>-1!==e.indexOf(o);"hidden"===document.visibilityState&&(e.muted()||i(t,o.backgroundTimeout))||"visible"===document.visibilityState&&i(t,o.timeout)||(s=e.setTimeout((function(){e.error()||e.paused()||e.ended()||(l=!0,e.addClass("vjs-waiting"))}),1e3),r=e.setTimeout((function(){e.error()||e.paused()||e.ended()||e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"})}),"hidden"===document.visibilityState?o.backgroundTimeout:o.timeout))},h=function(){let o;for(;c.length;)o=c.shift(),e.off(o[0],o[1]);e.clearTimeout(r),e.clearTimeout(s)},p=function(){let o=0;h(),f(),function(o,t){const i=function(){if(!e.error()){const o=e.$(".vjs-tech");if(o&&"application/x-shockwave-flash"===o.type&&!o.vjs_getProperty)return void e.error({code:-2,type:"PLAYER_ERR_TIMEOUT"});if(e.paused())return f();if(e.ended())return f()}t.call(this)};e.on(o,i),c.push([o,i])}(["timeupdate","adtimeupdate"],(function(){const t=e.currentTime();t!==o&&(o=t,f())})),e.off(document,"visibilitychange",p),e.on(document,"visibilitychange",p)},m=function(){e.currentSrc()||e.error({code:-1,type:"PLAYER_ERR_NO_SRC"})},v=function(){let i="",r=e.error();const s=document.createElement("div");let d="";if(!r)return;if(e.off(document,"visibilitychange",p),r=t.default.mergeOptions(r,o.errors[r.code||r.type||0]),r.message&&(i=`
${e.localize("Technical details")}\n :
${e.localize(r.message)}
\n
`),4===r.code&&n&&!n.isSupported()){i+=`${e.localize("If you are using an older browser please try upgrading or installing Flash.")}`}const a=e.getChild("errorDisplay");s.className="vjs-errors-dialog";const l=`
${this.localize("Error Code")}: ${r.type||r.code}
`,c=-2===r.code;d=`
\n

${this.localize(r.headline)}

\n ${c?"":l}\n ${c?"":i}\n
`;const u=a.closeable(!("dismiss"in r)||r.dismiss);if(c){d+=`
\n \n \n
`,s.innerHTML=d,a.fillWith(s),a.getChild("closeButton").hide();const o=a.el().querySelector(".vjs-errors-timeout-button-container > button:first-child"),t=a.el().querySelector(".vjs-errors-timeout-button-container > button:last-child");e.on(o,"click",(function(){const o=e.currentSource();e.reset(),e.src(o)})),e.on(t,"click",(function(){a.close()})),a.one("modalclose",(()=>{e.off(o),e.off(t)}))}else if(u){d+=`
\n \n
`,s.innerHTML=d,a.fillWith(s),a.contentEl().firstChild.appendChild(a.getChild("closeButton").el());const o=a.el().querySelector(".vjs-errors-ok-button");e.on(o,"click",(function(){a.close()}))}else s.innerHTML=d,a.fillWith(s);(e.currentWidth()<=600||e.currentHeight()<=250)&&a.addClass("vjs-xs"),a.one("modalclose",(()=>e.error(null)))},y=function(){h(),e.removeClass("vjs-errors"),e.off("play",p),e.off(document,"visibilitychange",p),e.off("play",m),e.off("dispose",y),e.off(["aderror","error"],v)},R=function(o){y(),a(e,t.default.mergeOptions(d,o))};R.extend=e=>u(e),R.getAll=()=>t.default.mergeOptions(o.errors),R.timeout=function(t){if(void 0===t)return o.timeout;t!==o.timeout&&(o.timeout=t,e.paused()||p())},R.backgroundTimeout=function(t){if(void 0===t)return o.backgroundTimeout;t!==o.backgroundTimeout&&(o.backgroundTimeout=t,e.paused()||p())},R.disableProgress=()=>{},e.on("play",p),e.on("play",m),e.on("dispose",y),e.on(["aderror","contenterror","error"],v),e.ready((()=>{e.addClass("vjs-errors")})),e.paused()||p(),R.VERSION=i,e.errors=R},l=function(e){a(this,t.default.mergeOptions(d,e))};return["extend","getAll"].forEach((e=>{l[e]=function(){t.default.log.warn(`The errors.${e}() method is not available until the plugin has been initialized!`)}})),l.VERSION=i,s("errors",l),l})); \ No newline at end of file diff --git a/js/videojs-hotkeys.min.js b/js/videojs-hotkeys.min.js deleted file mode 100644 index 5a148c5..0000000 --- a/js/videojs-hotkeys.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* videojs-hotkeys v0.2.28 - https://github.com/ctd1500/videojs-hotkeys */ -!function(e,t){if("undefined"!=typeof window&&window.videojs)t(window.videojs);else if("function"==typeof define&&define.amd)define("videojs-hotkeys",["video.js"],function(e){return t(e.default||e)});else if("undefined"!=typeof module&&module.exports){var n=require("video.js");module.exports=t(n.default||n)}}(0,function(x){"use strict";"undefined"!=typeof window&&(window.videojs_hotkeys={version:"0.2.28"});(x.registerPlugin||x.plugin)("hotkeys",function(m){var f=this,y=f.el(),v=document,e={volumeStep:.1,seekStep:5,enableMute:!0,enableVolumeScroll:!0,enableHoverScroll:!1,enableFullscreen:!0,enableNumbers:!0,enableJogStyle:!1,alwaysCaptureHotkeys:!1,captureDocumentHotkeys:!1,documentHotkeysFocusElementFilter:function(){return!1},enableModifiersForNumbers:!0,enableInactiveFocus:!0,skipInitialFocus:!1,playPauseKey:function(e){return 32===e.which||179===e.which},rewindKey:function(e){return 37===e.which||177===e.which},forwardKey:function(e){return 39===e.which||176===e.which},volumeUpKey:function(e){return 38===e.which},volumeDownKey:function(e){return 40===e.which},muteKey:function(e){return 77===e.which},fullscreenKey:function(e){return 70===e.which},customKeys:{}},t=x.mergeOptions||x.util.mergeOptions,d=(m=t(e,m||{})).volumeStep,n=m.seekStep,p=m.enableMute,o=m.enableVolumeScroll,r=m.enableHoverScroll,b=m.enableFullscreen,h=m.enableNumbers,w=m.enableJogStyle,k=m.alwaysCaptureHotkeys,S=m.captureDocumentHotkeys,K=m.documentHotkeysFocusElementFilter,F=m.enableModifiersForNumbers,u=m.enableInactiveFocus,l=m.skipInitialFocus,i=x.VERSION;y.hasAttribute("tabIndex")||y.setAttribute("tabIndex","-1"),y.style.outline="none",!k&&f.autoplay()||l||f.one("play",function(){y.focus()}),u&&f.on("userinactive",function(){var n=function(){clearTimeout(e)},e=setTimeout(function(){f.off("useractive",n);var e=v.activeElement,t=y.querySelector(".vjs-control-bar");e&&e.parentElement==t&&y.focus()},10);f.one("useractive",n)}),f.on("play",function(){var e=y.querySelector(".iframeblocker");e&&""===e.style.display&&(e.style.display="block",e.style.bottom="39px")});var c=function(e){var t,n,o=e.which,r=e.preventDefault.bind(e),u=f.duration();if(f.controls()){var l=v.activeElement;if(k||S&&K(l)||l==y||l==y.querySelector(".vjs-tech")||l==y.querySelector(".vjs-control-bar")||l==y.querySelector(".iframeblocker"))switch(j(e,f)){case 1:r(),(k||S)&&e.stopPropagation(),f.paused()?E(f.play()):f.pause();break;case 2:t=!f.paused(),r(),t&&f.pause(),(n=f.currentTime()-T(e))<=0&&(n=0),f.currentTime(n),t&&E(f.play());break;case 3:t=!f.paused(),r(),t&&f.pause(),u<=(n=f.currentTime()+T(e))&&(n=t?u-.001:u),f.currentTime(n),t&&E(f.play());break;case 5:r(),w?(n=f.currentTime()-1,f.currentTime()<=1&&(n=0),f.currentTime(n)):f.volume(f.volume()-d);break;case 4:r(),w?(u<=(n=f.currentTime()+1)&&(n=u),f.currentTime(n)):f.volume(f.volume()+d);break;case 6:p&&f.muted(!f.muted());break;case 7:b&&(f.isFullscreen()?f.exitFullscreen():f.requestFullscreen());break;default:if((47=n:n===e},i.show=function(){return t.prototype.show.call(this),this.isVisible=!0,this.off(this.player(),this.startEvent_,this.startListener_),this.debug("shown"),this.debug('unbound `startListener_` from "'+this.startEvent_+'"'),u(this.options_.start)&&(this.player().paused()&&0!==this.options_.start||this.player().trigger("show-overlay",{id:this.options_.cta_id,align:this.options_.align})),this.endEvent_&&(this.debug('bound `endListener_` to "'+this.endEvent_+'"'),this.on(this.player(),this.endEvent_,this.endListener_)),this},i.shouldShow_=function(t,e){var n=this.options_.start,i=this.options_.end;return u(n)?u(i)?t>=n&&t=n):n===e},i.startListener_=function(t){var e=this.player().currentTime();this.shouldShow_(e,t.type)&&this.show()},i.endListener_=function(t){var e=this.player().currentTime();this.shouldHide_(e,t.type)&&this.hide()},i.rewindListener_=function(t){var e=this.player().currentTime(),n=this.previousTime_,i=this.options_.start,o=this.options_.end;e - * @license MIT - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],e):t.videojsShare=e(t.videojs)}(this,function(t){"use strict";function e(t,e){return e={exports:{}},t(e,e.exports),e.exports}function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(t),i.removeAllRanges(),i.addRange(o),e=i.toString()}return e}function i(){}function o(t,e){for(;t&&t.nodeType!==G;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}function r(t,e,n,i,o){var r=l.apply(this,arguments);return t.addEventListener(n,r,o),{destroy:function(){t.removeEventListener(n,r,o)}}}function a(t,e,n,i,o){return"function"==typeof t.addEventListener?r.apply(null,arguments):"function"==typeof n?r.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return r(t,e,n,i,o)}))}function l(t,e,n,i){return function(n){n.delegateTarget=K(n.target,e),n.delegateTarget&&i.call(t,n)}}function s(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!X.string(e))throw new TypeError("Second argument must be a String");if(!X.fn(n))throw new TypeError("Third argument must be a Function");if(X.node(t))return c(t,e,n);if(X.nodeList(t))return u(t,e,n);if(X.string(t))return h(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function u(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function h(t,e,n){return Q(document.body,t,e,n)}function d(t){return Object.keys(t).filter(function(e){return void 0!==t[e]&&""!==t[e]}).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")}function f(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var o=d({app_id:e,display:"popup",redirect_uri:i,link:n});return window.open("https://www.facebook.com/dialog/feed?"+o,"_blank",tt)}function p(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url,i=t.hashtag,o=t.redirectUri;if(!e)throw new Error("fbAppId is not defined");var r=d({app_id:e,display:"popup",redirect_uri:o,href:n,hashtag:i});return window.open("https://www.facebook.com/dialog/share?"+r,"_blank",tt)}function v(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url;if(!t)throw new Error("url is not defined");var e=d({kid_directed_site:"0",sdk:"joey",u:t,display:"popup",ref:"plugin",src:"share_button"});return window.open("https://www.facebook.com/sharer/sharer.php?"+e,"_blank",tt)}function g(){var t=d({url:(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).url});return window.open("https://plus.google.com/share?"+t,"_blank",tt)}function w(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({share_url:t.url,title:t.title,description:t.description,imageurl:t.image});return window.open("http://connect.mail.ru/share?"+e,"_blank",tt)}function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.description,o=(n||"")+"\r\n"+(i||"")+"\r\n"+(e||""),r="mailto:?body="+encodeURIComponent(o);return window.location.assign(r)}function y(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({"st.cmd":"addShare","st._surl":t.url,title:t.title});return window.open("https://ok.ru/dk?"+e,"_blank",tt)}function b(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,text:t.title});return window.open("https://t.me/share/url?"+e,"_blank",tt)}function k(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=t.hashtags,o=d({text:e,url:n,hashtags:(void 0===i?[]:i).join(",")});return window.open("https://twitter.com/intent/tweet?"+o,"_blank",tt)}function _(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=d({url:t.url,title:t.title});return window.open("https://www.reddit.com/submit?"+e,"_blank",tt)}function C(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.description,n=d({url:t.url,description:e,media:t.media});return window.open("https://pinterest.com/pin/create/button/?"+n,"_blank",tt)}function x(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title,i=t.caption,o=t.tags,r=void 0===o?[]:o,a=t.posttype,l=void 0===a?"link":a,s=d({canonicalUrl:e,title:n,caption:i,tags:r.join(","),posttype:l});return window.open("https://www.tumblr.com/widgets/share/tool?"+s,"_blank",tt)}function E(){return!!window.navigator.userAgent.match(/Version\/[\d.]+.*Safari/)}function S(t){return E()?window.open(t):window.location.assign(t)}function j(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.title;if(!e&&!n)throw new Error("url and title not specified");return S("viber://forward?"+d({text:[n,e].filter(function(t){return t}).join(" ")}))}function F(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.url,n=t.image,i=t.isVkParse,o=t.description,r=t.title;o&&o.length>et&&(o=o.substr(0,et)+"..."),r&&r.length>et&&(r=r.substr(0,et)+"...");return"https://vk.com/share.php?"+d(i?{url:e}:{url:e,title:r,description:o,image:n,noparse:!0})}function A(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return window.open(F(t),"_blank",tt)}function T(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.phone,n=d({text:[t.title,t.url].filter(function(t){return t}).join(" "),phone:e});return window.open("https://api.whatsapp.com/send?"+n,"_blank",tt)}function z(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url,i=d({title:e,summary:t.description,url:n});return window.open("https://www.linkedin.com/shareArticle?mini=true&"+i,"_blank",tt)}function M(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.fbAppId,n=t.url;if(!e)throw new Error("fbAppId is not defined");var i=d({app_id:e,link:n});return window.location.assign("fb-messenger://share?"+i)}function O(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.title,n=t.url;if(!n)throw new Error("url is not defined");var i=encodeURIComponent(""+n);return e&&(i=""+encodeURIComponent(e+" ")+i),window.open("https://line.me/R/msg/text/?"+i,"_blank",tt)}function L(){return"ontouchstart"in window||navigator.MaxTouchPoints>0||navigator.msMaxTouchPoints>0}function V(){return/Android/.test(window.navigator.userAgent)||/iP(hone|ad|od)/i.test(window.navigator.userAgent)}function H(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?V()?t:t.filter(function(t){return!it.includes(t)}):t}t=t&&t.hasOwnProperty("default")?t.default:t;var I=function(){return"undefined"==typeof window?"":window.location.href}(),P={mobileVerification:!0,title:"Video",url:I,socials:["fbFeed","tw","reddit","gp","messenger","linkedin","vk","ok","mail","email","telegram","whatsapp","viber"],embedCode:function(){return""}(),redirectUri:function(){return I+"#close_window"}()},R=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},U=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":o(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})});i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){o.off(t,i),e.apply(n,arguments)}var o=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,o=n.length;for(i;i0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,h.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new c.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return s("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(u.default);t.exports=p})})),tt="scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0",et=80,nt=(Object.freeze||Object)({fbFeed:f,fbShare:p,fbButton:v,gp:g,mail:w,email:m,ok:y,telegram:b,tw:k,reddit:_,pinterest:C,tumblr:x,viber:j,getVkUrl:F,vk:A,whatsapp:T,linkedin:z,messenger:M,line:O}),it=["whatsapp","viber","messenger"],ot={fbFeed:'\n \n\n',tw:'\n \n\n',reddit:'\n \n\n',gp:'\n \n\n',messenger:'\n \n \n\n',linkedin:'\n \n\n',vk:'\n \n\n',ok:'\n \n\n',mail:'\n \n\n',email:'\n \n\n',telegram:'\n \n\n',whatsapp:'\n \n\n',viber:'\n \n\n'},rt=function(){function t(e,n){R(this,t),this.player=e,this.options=n,this.socials=H(n.socials,n.mobileVerification),this.copyBtnTextClass="vjs-share__btn-text",this.socialBtnClass="vjs-share__social",this._createContent(),this._initToggle(),this._initClipboard(),this._initSharing()}return t.prototype.getContent=function(){return this.content},t.prototype._createContent=function(){var t='\n \n \n \n '+this.player.localize("Copy")+"\n ",e=document.createElement("div"),n="";this.options.embedCode&&(n='\n \n "),e.innerHTML='
\n \n\n
\n \n \n\n "+n+'\n
\n\n
\n
\n '+this._getSocialItems().join("")+"\n
\n
\n
",this.content=e.firstChild},t.prototype._initClipboard=function(){var t=this;new $(".vjs-share__btn",{target:function(t){return t.previousElementSibling}}).on("success",function(e){var n=e.trigger.querySelector("."+t.copyBtnTextClass),i=function(){n.innerText=t.player.localize("Copy"),e.clearSelection()};n.innerText=t.player.localize("Copied"),L()?setTimeout(i,1e3):n.parentElement.addEventListener("mouseleave",function(){setTimeout(i,300)})})},t.prototype._initSharing=function(){var t=this,e=this.content.querySelectorAll("."+this.socialBtnClass);Array.from(e).forEach(function(e){e.addEventListener("click",function(e){var n=e.currentTarget.getAttribute("data-social"),i=nt[n];"function"==typeof i&&i(t.socialOptions)})})},t.prototype._initToggle=function(){var t=this.content.querySelector(".vjs-share__socials");this.socials.length>10||window.innerWidth<=180&&this.socials.length>6?t.style.height="calc((2em + 5px) * 2)":t.classList.add("horizontal")},t.prototype._getSocialItems=function(){var t=[];return this.socials.forEach(function(e){ot[e]&&t.push('\n \n ")}),t},U(t,[{key:"socialOptions",get:function(){var t=this.options;return{url:t.url,title:t.title,description:t.description,image:t.image,fbAppId:t.fbAppId,isVkParse:t.isVkParse,redirectUri:t.redirectUri}}}]),t}(),at=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.playerClassName="vjs-videojs-share_open",o}return N(e,t),e.prototype.open=function(){var e=this.player();e.addClass(this.playerClassName),t.prototype.open.call(this),e.trigger("sharing:opened")},e.prototype.close=function(){var e=this.player();e.removeClass(this.playerClassName),t.prototype.close.call(this),e.trigger("sharing:closed")},e}(t.getComponent("ModalDialog")),lt=function(t){function e(n,i){R(this,e);var o=B(this,t.call(this,n,i));return o.player=n,o.options=i,o}return N(e,t),e.prototype._createModal=function(){var t=new rt(this.player,this.options).getContent();this.modal=new at(this.player,{content:t,temporary:!0}),this.el=this.modal.contentEl(),this.player.addChild(this.modal)},e.prototype.open=function(){this._createModal(),this.modal.open()},e}(t.getComponent("Component")),st=function(e){function n(i,o){R(this,n);var r=B(this,e.call(this,i));return r.options=t.mergeOptions(P,o),r.player.ready(function(){r.player.addClass("vjs-share"),i.addClass("vjs-videojs-share"),i.getChild("controlBar").addChild("ShareButton",o),i.addChild("ShareOverlay",o)}),r}return N(n,e),n}(t.getPlugin("plugin"));return st.defaultState={},st.VERSION="3.2.1",t.registerComponent("ShareButton",q),t.registerComponent("ShareOverlay",lt),t.registerPlugin("share",st),st}); \ No newline at end of file diff --git a/js/videojs-vr.min.js b/js/videojs-vr.min.js deleted file mode 100644 index a171b23..0000000 --- a/js/videojs-vr.min.js +++ /dev/null @@ -1,176 +0,0 @@ -/*! @name videojs-vr @version 1.10.1 @license MIT */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("global/window"),require("global/document"),require("video.js")):"function"==typeof define&&define.amd?define(["global/window","global/document","video.js"],e):(t=t||self).videojsVr=e(t.window,t.document,t.videojs)}(this,(function(t,e,n){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t,e=e&&e.hasOwnProperty("default")?e.default:e,n=n&&n.hasOwnProperty("default")?n.default:n;var i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function o(t,e){return t(e={exports:{}},e.exports),e.exports}var s=r(o((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t},t.exports.default=t.exports,t.exports.__esModule=!0}))),a=o((function(t){function e(n,i){return t.exports=e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(n,i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));r(a);var l=r(o((function(t){t.exports=function(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,a(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),c=r(o((function(t,e){ -/** - * @license - * webvr-polyfill - * Copyright (c) 2015-2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * @license - * cardboard-vr-display - * Copyright (c) 2015-2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * @license - * webvr-polyfill-dpdb - * Copyright (c) 2017 Google - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * @license - * wglu-preserve-state - * Copyright (c) 2016, Brandon Jones. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -/** - * @license - * nosleep.js - * Copyright (c) 2017, Rich Tibbett - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -t.exports=function(){var t,e="undefined"!=typeof window?window:void 0!==i?i:"undefined"!=typeof self?self:{},n=function(){return/Android/i.test(navigator.userAgent)||/iPhone|iPad|iPod/i.test(navigator.userAgent)},r=function(t,e){for(var n=0,i=t.length;nt.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),i.push(null,null);break}r||(r=t.getParameter(t.ACTIVE_TEXTURE)),t.activeTexture(l),i.push(t.getParameter(s),null);break;case t.ACTIVE_TEXTURE:r=t.getParameter(t.ACTIVE_TEXTURE),i.push(null);break;default:i.push(t.getParameter(s))}for(n(t),o=0;ot.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_2D,a);break;case t.TEXTURE_BINDING_CUBE_MAP:var l;if((l=e[++o])t.TEXTURE31)break;t.activeTexture(l),t.bindTexture(t.TEXTURE_CUBE_MAP,a);break;case t.VIEWPORT:t.viewport(a[0],a[1],a[2],a[3]);break;case t.BLEND:case t.CULL_FACE:case t.DEPTH_TEST:case t.SCISSOR_TEST:case t.STENCIL_TEST:a?t.enable(s):t.disable(s);break;default:console.log("No GL restore behavior for 0x"+s.toString(16))}r&&t.activeTexture(r)}}else n(t)},R=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),C=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");function P(t,e,n,i){this.gl=t,this.cardboardUI=e,this.bufferScale=n,this.dirtySubmitFrameBindings=i,this.ctxAttribs=t.getContextAttributes(),this.instanceExt=t.getExtension("ANGLE_instanced_arrays"),this.meshWidth=20,this.meshHeight=20,this.bufferWidth=t.drawingBufferWidth,this.bufferHeight=t.drawingBufferHeight,this.realBindFramebuffer=t.bindFramebuffer,this.realEnable=t.enable,this.realDisable=t.disable,this.realColorMask=t.colorMask,this.realClearColor=t.clearColor,this.realViewport=t.viewport,a()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(t.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=A(t,R,C,this.attribs),this.uniforms=x(t,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.indexCount=0,this.renderTarget=t.createTexture(),this.framebuffer=t.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=t.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=t.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=t.createRenderbuffer()),this.patch(),this.onResize()}P.prototype.destroy=function(){var t=this.gl;this.unpatch(),t.deleteProgram(this.program),t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer),t.deleteTexture(this.renderTarget),t.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&t.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&t.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&t.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},P.prototype.onResize=function(){var t=this.gl,e=this,n=[t.RENDERBUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0];L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.framebuffer),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.texImage2D(t.TEXTURE_2D,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,e.bufferWidth,e.bufferHeight,0,e.ctxAttribs.alpha?t.RGBA:t.RGB,t.UNSIGNED_BYTE,null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e.renderTarget,0),e.ctxAttribs.depth&&e.ctxAttribs.stencil?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthStencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e.depthStencilBuffer)):e.ctxAttribs.depth?(t.bindRenderbuffer(t.RENDERBUFFER,e.depthBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e.depthBuffer)):e.ctxAttribs.stencil&&(t.bindRenderbuffer(t.RENDERBUFFER,e.stencilBuffer),t.renderbufferStorage(t.RENDERBUFFER,t.STENCIL_INDEX8,e.bufferWidth,e.bufferHeight),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.STENCIL_ATTACHMENT,t.RENDERBUFFER,e.stencilBuffer)),!t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),e.realClearColor.apply(t,e.clearColor)})),this.cardboardUI&&this.cardboardUI.onResize()},P.prototype.patch=function(){if(!this.isPatched){var t=this,e=this.gl.canvas,n=this.gl;a()||(e.width=g()*this.bufferScale,e.height=v()*this.bufferScale,Object.defineProperty(e,"width",{configurable:!0,enumerable:!0,get:function(){return t.bufferWidth},set:function(n){t.bufferWidth=n,t.realCanvasWidth.set.call(e,n),t.onResize()}}),Object.defineProperty(e,"height",{configurable:!0,enumerable:!0,get:function(){return t.bufferHeight},set:function(n){t.bufferHeight=n,t.realCanvasHeight.set.call(e,n),t.onResize()}})),this.lastBoundFramebuffer=n.getParameter(n.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(n.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(e,i){t.lastBoundFramebuffer=i||t.framebuffer,t.realBindFramebuffer.call(n,e,t.lastBoundFramebuffer)},this.cullFace=n.getParameter(n.CULL_FACE),this.depthTest=n.getParameter(n.DEPTH_TEST),this.blend=n.getParameter(n.BLEND),this.scissorTest=n.getParameter(n.SCISSOR_TEST),this.stencilTest=n.getParameter(n.STENCIL_TEST),n.enable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!0;break;case n.DEPTH_TEST:t.depthTest=!0;break;case n.BLEND:t.blend=!0;break;case n.SCISSOR_TEST:t.scissorTest=!0;break;case n.STENCIL_TEST:t.stencilTest=!0}t.realEnable.call(n,e)},n.disable=function(e){switch(e){case n.CULL_FACE:t.cullFace=!1;break;case n.DEPTH_TEST:t.depthTest=!1;break;case n.BLEND:t.blend=!1;break;case n.SCISSOR_TEST:t.scissorTest=!1;break;case n.STENCIL_TEST:t.stencilTest=!1}t.realDisable.call(n,e)},this.colorMask=n.getParameter(n.COLOR_WRITEMASK),n.colorMask=function(e,i,r,o){t.colorMask[0]=e,t.colorMask[1]=i,t.colorMask[2]=r,t.colorMask[3]=o,t.realColorMask.call(n,e,i,r,o)},this.clearColor=n.getParameter(n.COLOR_CLEAR_VALUE),n.clearColor=function(e,i,r,o){t.clearColor[0]=e,t.clearColor[1]=i,t.clearColor[2]=r,t.clearColor[3]=o,t.realClearColor.call(n,e,i,r,o)},this.viewport=n.getParameter(n.VIEWPORT),n.viewport=function(e,i,r,o){t.viewport[0]=e,t.viewport[1]=i,t.viewport[2]=r,t.viewport[3]=o,t.realViewport.call(n,e,i,r,o)},this.isPatched=!0,w(e)}},P.prototype.unpatch=function(){if(this.isPatched){var t=this.gl,e=this.gl.canvas;a()||(Object.defineProperty(e,"width",this.realCanvasWidth),Object.defineProperty(e,"height",this.realCanvasHeight)),e.width=this.bufferWidth,e.height=this.bufferHeight,t.bindFramebuffer=this.realBindFramebuffer,t.enable=this.realEnable,t.disable=this.realDisable,t.colorMask=this.realColorMask,t.clearColor=this.realClearColor,t.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&t.bindFramebuffer(t.FRAMEBUFFER,null),this.isPatched=!1,setTimeout((function(){w(e)}),1)}},P.prototype.setTextureBounds=function(t,e){t||(t=[0,0,.5,1]),e||(e=[.5,0,.5,1]),this.viewportOffsetScale[0]=t[0],this.viewportOffsetScale[1]=t[1],this.viewportOffsetScale[2]=t[2],this.viewportOffsetScale[3]=t[3],this.viewportOffsetScale[4]=e[0],this.viewportOffsetScale[5]=e[1],this.viewportOffsetScale[6]=e[2],this.viewportOffsetScale[7]=e[3]},P.prototype.submitFrame=function(){var t=this.gl,e=this,n=[];if(this.dirtySubmitFrameBindings||n.push(t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING,t.ELEMENT_ARRAY_BUFFER_BINDING,t.TEXTURE_BINDING_2D,t.TEXTURE0),L(t,n,(function(t){e.realBindFramebuffer.call(t,t.FRAMEBUFFER,null);var n=0,i=0;e.instanceExt&&(n=t.getVertexAttrib(e.attribs.position,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE),i=t.getVertexAttrib(e.attribs.texCoord,e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)),e.cullFace&&e.realDisable.call(t,t.CULL_FACE),e.depthTest&&e.realDisable.call(t,t.DEPTH_TEST),e.blend&&e.realDisable.call(t,t.BLEND),e.scissorTest&&e.realDisable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realDisable.call(t,t.STENCIL_TEST),e.realColorMask.call(t,!0,!0,!0,!0),e.realViewport.call(t,0,0,t.drawingBufferWidth,t.drawingBufferHeight),(e.ctxAttribs.alpha||a())&&(e.realClearColor.call(t,0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)),t.useProgram(e.program),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,e.indexBuffer),t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.enableVertexAttribArray(e.attribs.position),t.enableVertexAttribArray(e.attribs.texCoord),t.vertexAttribPointer(e.attribs.position,2,t.FLOAT,!1,20,0),t.vertexAttribPointer(e.attribs.texCoord,3,t.FLOAT,!1,20,8),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,0),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,0)),t.activeTexture(t.TEXTURE0),t.uniform1i(e.uniforms.diffuse,0),t.bindTexture(t.TEXTURE_2D,e.renderTarget),t.uniform4fv(e.uniforms.viewportOffsetScale,e.viewportOffsetScale),t.drawElements(t.TRIANGLES,e.indexCount,t.UNSIGNED_SHORT,0),e.cardboardUI&&e.cardboardUI.renderNoState(),e.realBindFramebuffer.call(e.gl,t.FRAMEBUFFER,e.framebuffer),e.ctxAttribs.preserveDrawingBuffer||(e.realClearColor.call(t,0,0,0,0),t.clear(t.COLOR_BUFFER_BIT)),e.dirtySubmitFrameBindings||e.realBindFramebuffer.call(t,t.FRAMEBUFFER,e.lastBoundFramebuffer),e.cullFace&&e.realEnable.call(t,t.CULL_FACE),e.depthTest&&e.realEnable.call(t,t.DEPTH_TEST),e.blend&&e.realEnable.call(t,t.BLEND),e.scissorTest&&e.realEnable.call(t,t.SCISSOR_TEST),e.stencilTest&&e.realEnable.call(t,t.STENCIL_TEST),e.realColorMask.apply(t,e.colorMask),e.realViewport.apply(t,e.viewport),!e.ctxAttribs.alpha&&e.ctxAttribs.preserveDrawingBuffer||e.realClearColor.apply(t,e.clearColor),e.instanceExt&&(0!=n&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position,n),0!=i&&e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord,i))})),a()){var i=t.canvas;i.width==e.bufferWidth&&i.height==e.bufferHeight||(e.bufferWidth=i.width,e.bufferHeight=i.height,e.onResize())}},P.prototype.updateDeviceInfo=function(t){var e=this.gl,n=this,i=[e.ARRAY_BUFFER_BINDING,e.ELEMENT_ARRAY_BUFFER_BINDING];L(e,i,(function(e){var i=n.computeMeshVertices_(n.meshWidth,n.meshHeight,t);if(e.bindBuffer(e.ARRAY_BUFFER,n.vertexBuffer),e.bufferData(e.ARRAY_BUFFER,i,e.STATIC_DRAW),!n.indexCount){var r=n.computeMeshIndices_(n.meshWidth,n.meshHeight);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,r,e.STATIC_DRAW),n.indexCount=r.length}}))},P.prototype.computeMeshVertices_=function(t,e,n){for(var i=new Float32Array(2*t*e*5),r=n.getLeftEyeVisibleTanAngles(),o=n.getLeftEyeNoLensTanAngles(),a=n.getLeftEyeVisibleScreenRect(o),l=0,c=0;c<2;c++){for(var h=0;hr-42&&i.clientXn.clientHeight-42?t(i):i.clientX<42&&i.clientY<42&&e(i)},n.addEventListener("click",this.listener,!1)},N.prototype.onResize=function(){var t=this.gl,e=this,n=[t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){var n=[],i=t.drawingBufferWidth/2,r=Math.max(screen.width,screen.height)*window.devicePixelRatio,o=t.drawingBufferWidth/r*window.devicePixelRatio,s=4*o/2,a=42*o,l=28*o/2,c=14*o;function h(t,e){var r=(90-t)*O,o=Math.cos(r),s=Math.sin(r);n.push(.3125*o*l+i,.3125*s*l+l),n.push(e*o*l+i,e*s*l+l)}n.push(i-s,a),n.push(i-s,t.drawingBufferHeight),n.push(i+s,a),n.push(i+s,t.drawingBufferHeight),e.gearOffset=n.length/2;for(var u=0;u<=6;u++){var d=60*u;h(d,1),h(d+12,1),h(d+20,.75),h(d+40,.75),h(d+48,1)}function p(e,i){n.push(c+e,t.drawingBufferHeight-c-i)}e.gearVertexCount=n.length/2-e.gearOffset,e.arrowOffset=n.length/2;var f=s/Math.sin(45*O);p(0,l),p(l,0),p(l+f,f),p(f,l+f),p(f,l-f),p(0,l),p(l,2*l),p(l+f,2*l-f),p(f,l-f),p(0,l),p(f,l-s),p(28*o,l-s),p(f,l+s),p(28*o,l+s),e.arrowVertexCount=n.length/2-e.arrowOffset,t.bindBuffer(t.ARRAY_BUFFER,e.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,new Float32Array(n),t.STATIC_DRAW)}))},N.prototype.render=function(){var t=this.gl,e=this,n=[t.CULL_FACE,t.DEPTH_TEST,t.BLEND,t.SCISSOR_TEST,t.STENCIL_TEST,t.COLOR_WRITEMASK,t.VIEWPORT,t.CURRENT_PROGRAM,t.ARRAY_BUFFER_BINDING];L(t,n,(function(t){t.disable(t.CULL_FACE),t.disable(t.DEPTH_TEST),t.disable(t.BLEND),t.disable(t.SCISSOR_TEST),t.disable(t.STENCIL_TEST),t.colorMask(!0,!0,!0,!0),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),e.renderNoState()}))},N.prototype.renderNoState=function(){var t,e,n,i,r,o,s,a,l,c,h=this.gl;h.useProgram(this.program),h.bindBuffer(h.ARRAY_BUFFER,this.vertexBuffer),h.enableVertexAttribArray(this.attribs.position),h.vertexAttribPointer(this.attribs.position,2,h.FLOAT,!1,8,0),h.uniform4f(this.uniforms.color,1,1,1,1),t=this.projMat,e=0,n=h.drawingBufferWidth,i=0,r=h.drawingBufferHeight,a=1/(e-n),l=1/(i-r),c=1/((o=.1)-(s=1024)),t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+n)*a,t[13]=(r+i)*l,t[14]=(s+o)*c,t[15]=1,h.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),h.drawArrays(h.TRIANGLE_STRIP,0,4),h.drawArrays(h.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),h.drawArrays(h.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},B.prototype.distortInverse=function(t){for(var e=0,n=1,i=t-this.distort(e);Math.abs(n-e)>1e-4;){var r=t-this.distort(n),o=n-r*((n-e)/(r-i));e=n,n=o,i=r}return n},B.prototype.distort=function(t){for(var e=t*t,n=0,i=0;i=1)return this.w=o,this.x=n,this.y=i,this.z=r,this;var a=Math.acos(s),l=Math.sqrt(1-s*s);if(Math.abs(l)<.001)return this.w=.5*(o+this.w),this.x=.5*(n+this.x),this.y=.5*(i+this.y),this.z=.5*(r+this.z),this;var c=Math.sin((1-e)*a)/l,h=Math.sin(e*a)/l;return this.w=o*c+this.w*h,this.x=n*c+this.x*h,this.y=i*c+this.y*h,this.z=r*c+this.z*h,this},setFromUnitVectors:function(t,e){return void 0===H&&(H=new U),(G=t.dot(e)+1)<1e-6?(G=0,Math.abs(t.x)>Math.abs(t.z)?H.set(-t.y,t.x,0):H.set(0,-t.z,t.y)):H.crossVectors(t,e),this.x=H.x,this.y=H.y,this.z=H.z,this.w=G,this.normalize(),this}};var W=new k({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),j=new k({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),X={CardboardV1:new Y({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new Y({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};function q(t,e){this.viewer=X.CardboardV2,this.updateDeviceParams(t),this.distortion=new B(this.viewer.distortionCoefficients);for(var n=0;n=200&&n.status<=299?(i.dpdb=JSON.parse(n.response),i.recalculateDeviceParams_()):console.error("Error loading online DPDB!")})),n.send()}}function J(t){this.xdpi=t.xdpi,this.ydpi=t.ydpi,this.bevelMm=t.bevelMm}function K(t,e){this.set(t,e)}function $(t,e){this.kFilter=t,this.isDebug=e,this.currentAccelMeasurement=new K,this.currentGyroMeasurement=new K,this.previousGyroMeasurement=new K,a()?this.filterQ=new V(-1,0,0,1):this.filterQ=new V(1,0,0,1),this.previousFilterQ=new V,this.previousFilterQ.copy(this.filterQ),this.accelQ=new V,this.isOrientationInitialized=!1,this.estimatedGravity=new U,this.measuredGravity=new U,this.gyroIntegralQ=new V}function tt(t,e){this.predictionTimeS=t,this.isDebug=e,this.previousQ=new V,this.previousTimestampS=null,this.deltaQ=new V,this.outQ=new V}function et(t,e,n,i){this.yawOnly=n,this.accelerometer=new U,this.gyroscope=new U,this.filter=new $(t,i),this.posePredictor=new tt(e,i),this.isFirefoxAndroid=h(),this.isIOS=a();var r=u();this.isDeviceMotionInRadians=!this.isIOS&&r&&r<66,this.isWithoutDeviceMotion=p()||d(),this.filterToWorldQ=new V,a()?this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new U(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new V,this.worldToScreenQ=new V,this.originalPoseAdjustQ=new V,this.originalPoseAdjustQ.setFromAxisAngle(new U(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),m()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new V,this.orientationOut_=new Float32Array(4),this.start()}Z.prototype.getDeviceParams=function(){return this.deviceParams},Z.prototype.recalculateDeviceParams_=function(){var t=this.calcDeviceParams_();t?(this.deviceParams=t,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},Z.prototype.calcDeviceParams_=function(){var t=this.dpdb;if(!t)return console.error("DPDB not available."),null;if(1!=t.format)return console.error("DPDB has unexpected format version."),null;if(!t.devices||!t.devices.length)return console.error("DPDB does not have a devices section."),null;var e=navigator.userAgent||navigator.vendor||window.opera,n=g(),i=v();if(!t.devices)return console.error("DPDB has no devices section."),null;for(var r=0;r1||this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)},$.prototype.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var t=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,e=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,t);this.gyroIntegralQ.multiply(e),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(e);var n=new V;n.copy(this.filterQ),n.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();var i,r=new V;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.inverse(),this.isDebug&&console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",z*((i=r).w>1?(console.warn("getQuaternionAngle: w > 1"),0):2*Math.acos(i.w)),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));var o=new V;o.copy(this.filterQ),o.multiply(r),this.filterQ.slerp(o,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)},$.prototype.getOrientation=function(){return this.filterQ},$.prototype.accelToQuaternion_=function(t){var e=new U;e.copy(t),e.normalize();var n=new V;return n.setFromUnitVectors(new U(0,0,-1),e),n.inverse(),n},$.prototype.gyroToQuaternionDelta_=function(t,e){var n=new V,i=new U;return i.copy(t),i.normalize(),n.setFromAxisAngle(i,t.length()*e),n},tt.prototype.getPrediction=function(t,e,n){if(!this.previousTimestampS)return this.previousQ.copy(t),this.previousTimestampS=n,t;var i=new U;i.copy(e),i.normalize();var r=e.length();if(r<20*F)return this.isDebug&&console.log("Moving slowly, at %s deg/s: no prediction",(z*r).toFixed(1)),this.outQ.copy(t),this.previousQ.copy(t),this.outQ;var o=r*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(i,o),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(t),this.previousTimestampS=n,this.outQ},et.prototype.getPosition=function(){return null},et.prototype.getOrientation=function(){var t=void 0;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ)return this.deviceOrientationFixQ=this.deviceOrientationFixQ||(n=(new V).setFromAxisAngle(new U(0,0,-1),0),i=new V,-90===window.orientation?i.setFromAxisAngle(new U(0,1,0),Math.PI/-2):i.setFromAxisAngle(new U(0,1,0),Math.PI/2),n.multiply(i)),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||((e=new V).setFromAxisAngle(new U(1,0,0),-Math.PI/2),e),t=this._deviceOrientationQ,(r=new V).copy(t),r.multiply(this.deviceOrientationFilterToWorldQ),r.multiply(this.resetQ),r.multiply(this.worldToScreenQ),r.multiplyQuaternions(this.deviceOrientationFixQ,r),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_;var e,n,i,r,o=this.filter.getOrientation();return t=this.posePredictor.getPrediction(o,this.gyroscope,this.previousTimestampS),(r=new V).copy(this.filterToWorldQ),r.multiply(this.resetQ),r.multiply(t),r.multiply(this.worldToScreenQ),this.yawOnly&&(r.x=0,r.z=0,r.normalize()),this.orientationOut_[0]=r.x,this.orientationOut_[1]=r.y,this.orientationOut_[2]=r.z,this.orientationOut_[3]=r.w,this.orientationOut_},et.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),m()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)},et.prototype.onDeviceOrientation_=function(t){this._deviceOrientationQ=this._deviceOrientationQ||new V;var e=t.alpha,n=t.beta,i=t.gamma;e=(e||0)*Math.PI/180,n=(n||0)*Math.PI/180,i=(i||0)*Math.PI/180,this._deviceOrientationQ.setFromEulerYXZ(n,e,-i)},et.prototype.onDeviceMotion_=function(t){this.updateDeviceMotion_(t)},et.prototype.updateDeviceMotion_=function(t){var e=t.accelerationIncludingGravity,n=t.rotationRate,i=t.timeStamp/1e3,r=i-this.previousTimestampS;return r<0?(S("fusion-pose-sensor:invalid:non-monotonic","Invalid timestamps detected: non-monotonic timestamp from devicemotion"),void(this.previousTimestampS=i)):r<=.001||r>1?(S("fusion-pose-sensor:invalid:outside-threshold","Invalid timestamps detected: Timestamp from devicemotion outside expected range."),void(this.previousTimestampS=i)):(this.accelerometer.set(-e.x,-e.y,-e.z),n&&(f()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,i)),this.filter.addAccelMeasurement(this.accelerometer,i),void(this.previousTimestampS=i))},et.prototype.onOrientationChange_=function(t){this.setScreenTransform_()},et.prototype.onMessage_=function(t){var e=t.data;e&&e.type&&"devicemotion"===e.type.toLowerCase()&&this.updateDeviceMotion_(e.deviceMotionEvent)},et.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new U(0,0,1),Math.PI/2)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},et.prototype.start=function(){var t,e,n;this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),this.onDeviceOrientationCallback_=this.onDeviceOrientation_.bind(this),a()&&(t=window.self!==window.top,e=E(document.referrer),n=E(window.location.href),t&&e!==n)&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),this.isWithoutDeviceMotion?window.addEventListener("deviceorientation",this.onDeviceOrientationCallback_):window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},et.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("deviceorientation",this.onDeviceOrientationCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)};var nt=new U(1,0,0),it=new U(0,0,1),rt=new V;rt.setFromAxisAngle(nt,-Math.PI/2),rt.multiply((new V).setFromAxisAngle(it,Math.PI/2));var ot=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.config=e,this.sensor=null,this.fusionSensor=null,this._out=new Float32Array(4),this.api=null,this.errors=[],this._sensorQ=new V,this._outQ=new V,this._onSensorRead=this._onSensorRead.bind(this),this._onSensorError=this._onSensorError.bind(this),this.init()}return r(t,[{key:"init",value:function(){var t=null;try{(t=new RelativeOrientationSensor({frequency:60,referenceFrame:"screen"})).addEventListener("error",this._onSensorError)}catch(t){this.errors.push(t),"SecurityError"===t.name?(console.error("Cannot construct sensors due to the Feature Policy"),console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'),this.useDeviceMotion()):"ReferenceError"===t.name?this.useDeviceMotion():console.error(t)}t&&(this.api="sensor",this.sensor=t,this.sensor.addEventListener("reading",this._onSensorRead),this.sensor.start())}},{key:"useDeviceMotion",value:function(){this.api="devicemotion",this.fusionSensor=new et(this.config.K_FILTER,this.config.PREDICTION_TIME_S,this.config.YAW_ONLY,this.config.DEBUG),this.sensor&&(this.sensor.removeEventListener("reading",this._onSensorRead),this.sensor.removeEventListener("error",this._onSensorError),this.sensor=null)}},{key:"getOrientation",value:function(){if(this.fusionSensor)return this.fusionSensor.getOrientation();if(!this.sensor||!this.sensor.quaternion)return this._out[0]=this._out[1]=this._out[2]=0,this._out[3]=1,this._out;var t=this.sensor.quaternion;this._sensorQ.set(t[0],t[1],t[2],t[3]);var e=this._outQ;return e.copy(rt),e.multiply(this._sensorQ),this.config.YAW_ONLY&&(e.x=e.z=0,e.normalize()),this._out[0]=e.x,this._out[1]=e.y,this._out[2]=e.z,this._out[3]=e.w,this._out}},{key:"_onSensorError",value:function(t){this.errors.push(t.error),"NotAllowedError"===t.error.name?console.error("Permission to access sensor was denied"):"NotReadableError"===t.error.name?console.error("Sensor could not be read"):console.error(t.error),this.useDeviceMotion()}},{key:"_onSensorRead",value:function(){}}]),t}();function st(){this.loadIcon_();var t=document.createElement("div");(o=t.style).position="fixed",o.top=0,o.right=0,o.bottom=0,o.left=0,o.backgroundColor="gray",o.fontFamily="sans-serif",o.zIndex=1e6;var e=document.createElement("img");e.src=this.icon,(o=e.style).marginLeft="25%",o.marginTop="25%",o.width="50%",t.appendChild(e);var n=document.createElement("div");(o=n.style).textAlign="center",o.fontSize="16px",o.lineHeight="24px",o.margin="24px 25%",o.width="50%",n.innerHTML="Place your phone into your Cardboard viewer.",t.appendChild(n);var i=document.createElement("div");(o=i.style).backgroundColor="#CFD8DC",o.position="fixed",o.bottom=0,o.width="100%",o.height="48px",o.padding="14px 24px",o.boxSizing="border-box",o.color="#656A6B",t.appendChild(i);var r=document.createElement("div");r.style.float="left",r.innerHTML="No Cardboard viewer?";var o,s=document.createElement("a");s.href="https://www.google.com/get/cardboard/get-cardboard/",s.innerHTML="get one",s.target="_blank",(o=s.style).float="right",o.fontWeight=600,o.textTransform="uppercase",o.borderLeft="1px solid gray",o.paddingLeft="24px",o.textDecoration="none",o.color="#656A6B",i.appendChild(r),i.appendChild(s),this.overlay=t,this.text=n,this.hide()}function at(t){try{this.selectedKey=localStorage.getItem("WEBVR_CARDBOARD_VIEWER")}catch(t){console.error("Failed to load viewer profile: %s",t)}this.selectedKey||(this.selectedKey=t||"CardboardV1"),this.dialog=this.createDialog_(q.Viewers),this.root=null,this.onChangeCallbacks_=[]}st.prototype.show=function(t){t||this.overlay.parentElement?t&&(this.overlay.parentElement&&this.overlay.parentElement!=t&&this.overlay.parentElement.removeChild(this.overlay),t.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var e=this.overlay.querySelector("img").style;m()?(e.width="20%",e.marginLeft="40%",e.marginTop="3%"):(e.width="50%",e.marginLeft="25%",e.marginTop="25%")},st.prototype.hide=function(){this.overlay.style.display="none"},st.prototype.showTemporarily=function(t,e){this.show(e),this.timer=setTimeout(this.hide.bind(this),t)},st.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},st.prototype.update=function(){this.disableShowTemporarily(),!m()&&_()?this.show():this.hide()},st.prototype.loadIcon_=function(){this.icon="data:image/svg+xml,"+encodeURIComponent("")},at.prototype.show=function(t){this.root=t,t.appendChild(this.dialog),this.dialog.querySelector("#"+this.selectedKey).checked=!0,this.dialog.style.display="block"},at.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},at.prototype.getCurrentViewer=function(){return q.Viewers[this.selectedKey]},at.prototype.getSelectedKey_=function(){var t=this.dialog.querySelector("input[name=field]:checked");return t?t.id:null},at.prototype.onChange=function(t){this.onChangeCallbacks_.push(t)},at.prototype.fireOnChange_=function(t){for(var e=0;e.5&&(this.noSleepVideo.currentTime=Math.random())}.bind(this)))}return i(t,[{key:"enable",value:function(){o?(this.disable(),this.noSleepTimer=window.setInterval((function(){window.location.href="/",window.setTimeout(window.stop,0)}),15e3)):this.noSleepVideo.play()}},{key:"disable",value:function(){o?this.noSleepTimer&&(window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]),t}();t.exports=s},function(t,e,n){t.exports="data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="}])}))})))&<.__esModule&&Object.prototype.hasOwnProperty.call(lt,"default")?lt.default:lt,ht=1e3,ut=[0,0,.5,1],dt=[.5,0,.5,1],pt=window.requestAnimationFrame,ft=window.cancelAnimationFrame;function mt(t){Object.defineProperties(this,{hasPosition:{writable:!1,enumerable:!0,value:t.hasPosition},hasExternalDisplay:{writable:!1,enumerable:!0,value:t.hasExternalDisplay},canPresent:{writable:!1,enumerable:!0,value:t.canPresent},maxLayers:{writable:!1,enumerable:!0,value:t.maxLayers},hasOrientation:{enumerable:!0,get:function(){return T("VRDisplayCapabilities.prototype.hasOrientation","VRDisplay.prototype.getFrameData"),t.hasOrientation}}})}function gt(t){var e=!("wakelock"in(t=t||{}))||t.wakelock;this.isPolyfilled=!0,this.displayId=ht++,this.displayName="",this.depthNear=.01,this.depthFar=1e4,this.isPresenting=!1,Object.defineProperty(this,"isConnected",{get:function(){return T("VRDisplay.prototype.isConnected","VRDisplayCapabilities.prototype.hasExternalDisplay"),!1}}),this.capabilities=new mt({hasPosition:!1,hasOrientation:!1,hasExternalDisplay:!1,canPresent:!1,maxLayers:1}),this.stageParameters=null,this.waitingForPresent_=!1,this.layer_=null,this.originalParent_=null,this.fullscreenElement_=null,this.fullscreenWrapper_=null,this.fullscreenElementCachedStyle_=null,this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null,e&&_()&&(this.wakelock_=new ct)}gt.prototype.getFrameData=function(t){return M(t,this._getPose(),this)},gt.prototype.getPose=function(){return T("VRDisplay.prototype.getPose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.resetPose=function(){return T("VRDisplay.prototype.resetPose"),this._resetPose()},gt.prototype.getImmediatePose=function(){return T("VRDisplay.prototype.getImmediatePose","VRDisplay.prototype.getFrameData"),this._getPose()},gt.prototype.requestAnimationFrame=function(t){return pt(t)},gt.prototype.cancelAnimationFrame=function(t){return ft(t)},gt.prototype.wrapForFullscreen=function(t){if(a())return t;if(!this.fullscreenWrapper_){this.fullscreenWrapper_=document.createElement("div");var e=["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important","left: 0 !important","right: 0 !important","border: 0","margin: 0","padding: 0","z-index: 999999 !important","position: fixed"];this.fullscreenWrapper_.setAttribute("style",e.join("; ")+";"),this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")}if(this.fullscreenElement_==t)return this.fullscreenWrapper_;if(this.fullscreenElement_&&(this.originalParent_?this.originalParent_.appendChild(this.fullscreenElement_):this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)),this.fullscreenElement_=t,this.originalParent_=t.parentElement,this.originalParent_||document.body.appendChild(t),!this.fullscreenWrapper_.parentElement){var n=this.fullscreenElement_.parentElement;n.insertBefore(this.fullscreenWrapper_,this.fullscreenElement_),n.removeChild(this.fullscreenElement_)}this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild),this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");var i=this;return function(){if(i.fullscreenElement_){var t=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0"];i.fullscreenElement_.setAttribute("style",t.join("; ")+";")}}(),this.fullscreenWrapper_},gt.prototype.removeFullscreenWrapper=function(){if(this.fullscreenElement_){var t=this.fullscreenElement_;this.fullscreenElementCachedStyle_?t.setAttribute("style",this.fullscreenElementCachedStyle_):t.removeAttribute("style"),this.fullscreenElement_=null,this.fullscreenElementCachedStyle_=null;var e=this.fullscreenWrapper_.parentElement;return this.fullscreenWrapper_.removeChild(t),this.originalParent_===e?e.insertBefore(t,this.fullscreenWrapper_):this.originalParent_&&this.originalParent_.appendChild(t),e.removeChild(this.fullscreenWrapper_),t}},gt.prototype.requestPresent=function(t){var e=this.isPresenting,n=this;return t instanceof Array||(T("VRDisplay.prototype.requestPresent with non-array argument","an array of VRLayers as the first argument"),t=[t]),new Promise((function(i,r){if(n.capabilities.canPresent)if(0==t.length||t.length>n.capabilities.maxLayers)r(new Error("Invalid number of layers."));else{var o=t[0];if(o.source){var s=o.leftBounds||ut,c=o.rightBounds||dt;if(e){var h=n.layer_;h.source!==o.source&&(h.source=o.source);for(var u=0;u<4;u++)h.leftBounds[u]=s[u],h.rightBounds[u]=c[u];return n.wrapForFullscreen(n.layer_.source),n.updatePresent_(),void i()}if(n.layer_={predistorted:o.predistorted,source:o.source,leftBounds:s.slice(0),rightBounds:c.slice(0)},n.waitingForPresent_=!1,n.layer_&&n.layer_.source){var d=n.wrapForFullscreen(n.layer_.source);n.addFullscreenListeners_(d,(function(){var t=document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;n.isPresenting=d===t,n.isPresenting?(screen.orientation&&screen.orientation.lock&&screen.orientation.lock("landscape-primary").catch((function(t){console.error("screen.orientation.lock() failed due to",t.message)})),n.waitingForPresent_=!1,n.beginPresent_(),i()):(screen.orientation&&screen.orientation.unlock&&screen.orientation.unlock(),n.removeFullscreenWrapper(),n.disableWakeLock(),n.endPresent_(),n.removeFullscreenListeners_()),n.fireVRDisplayPresentChange_()}),(function(){n.waitingForPresent_&&(n.removeFullscreenWrapper(),n.removeFullscreenListeners_(),n.disableWakeLock(),n.waitingForPresent_=!1,n.isPresenting=!1,r(new Error("Unable to present.")))})),function(t){if(l())return!1;if(t.requestFullscreen)t.requestFullscreen();else if(t.webkitRequestFullscreen)t.webkitRequestFullscreen();else if(t.mozRequestFullScreen)t.mozRequestFullScreen();else{if(!t.msRequestFullscreen)return!1;t.msRequestFullscreen()}return!0}(d)?(n.enableWakeLock(),n.waitingForPresent_=!0):(a()||l())&&(n.enableWakeLock(),n.isPresenting=!0,n.beginPresent_(),n.fireVRDisplayPresentChange_(),i())}n.waitingForPresent_||a()||(y(),r(new Error("Unable to present.")))}else i()}else r(new Error("VRDisplay is not capable of presenting."))}))},gt.prototype.exitPresent=function(){var t=this.isPresenting,e=this;return this.isPresenting=!1,this.layer_=null,this.disableWakeLock(),new Promise((function(n,i){t?(!y()&&a()&&(e.endPresent_(),e.fireVRDisplayPresentChange_()),l()&&(e.removeFullscreenWrapper(),e.removeFullscreenListeners_(),e.endPresent_(),e.fireVRDisplayPresentChange_()),n()):i(new Error("Was not presenting to VRDisplay."))}))},gt.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},gt.prototype.fireVRDisplayPresentChange_=function(){var t=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.fireVRDisplayConnect_=function(){var t=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(t)},gt.prototype.addFullscreenListeners_=function(t,e,n){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=t,this.fullscreenChangeHandler_=e,this.fullscreenErrorHandler_=n,e&&(document.fullscreenEnabled?t.addEventListener("fullscreenchange",e,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenchange",e,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",e,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenchange",e,!1)),n&&(document.fullscreenEnabled?t.addEventListener("fullscreenerror",n,!1):document.webkitFullscreenEnabled?t.addEventListener("webkitfullscreenerror",n,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",n,!1):document.msFullscreenEnabled&&t.addEventListener("msfullscreenerror",n,!1))},gt.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var t=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var e=this.fullscreenChangeHandler_;t.removeEventListener("fullscreenchange",e,!1),t.removeEventListener("webkitfullscreenchange",e,!1),document.removeEventListener("mozfullscreenchange",e,!1),t.removeEventListener("msfullscreenchange",e,!1)}if(this.fullscreenErrorHandler_){var n=this.fullscreenErrorHandler_;t.removeEventListener("fullscreenerror",n,!1),t.removeEventListener("webkitfullscreenerror",n,!1),document.removeEventListener("mozfullscreenerror",n,!1),t.removeEventListener("msfullscreenerror",n,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},gt.prototype.enableWakeLock=function(){this.wakelock_&&this.wakelock_.enable()},gt.prototype.disableWakeLock=function(){this.wakelock_&&this.wakelock_.disable()},gt.prototype.beginPresent_=function(){},gt.prototype.endPresent_=function(){},gt.prototype.submitFrame=function(t){},gt.prototype.getEyeParameters=function(t){return null};var vt={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1},yt="left",At="right";function xt(t){var e=b({},vt);t=b(e,t||{}),gt.call(this,{wakelock:t.MOBILE_WAKE_LOCK}),this.config=t,this.displayName="Cardboard VRDisplay",this.capabilities=new mt({hasPosition:!1,hasOrientation:!0,hasExternalDisplay:!1,canPresent:!0,maxLayers:1}),this.stageParameters=null,this.bufferScale_=this.config.BUFFER_SCALE,this.poseSensor_=new ot(this.config),this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new Z(this.config.DPDB_URL,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new q(this.dpdb_.getDeviceParams(),t.ADDITIONAL_VIEWERS),this.viewerSelector_=new at(t.DEFAULT_VIEWER),this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),this.config.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new st),a()&&window.addEventListener("resize",this.onResize_.bind(this))}return xt.prototype=Object.create(gt.prototype),xt.prototype._getPose=function(){return{position:null,orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},xt.prototype._resetPose=function(){this.poseSensor_.resetPose&&this.poseSensor_.resetPose()},xt.prototype._getFieldOfView=function(t){var e;if(t==yt)e=this.deviceInfo_.getFieldOfViewLeftEye();else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=this.deviceInfo_.getFieldOfViewRightEye()}return e},xt.prototype._getEyeOffset=function(t){var e;if(t==yt)e=[.5*-this.deviceInfo_.viewer.interLensDistance,0,0];else{if(t!=At)return console.error("Invalid eye provided: %s",t),null;e=[.5*this.deviceInfo_.viewer.interLensDistance,0,0]}return e},xt.prototype.getEyeParameters=function(t){var e=this._getEyeOffset(t),n=this._getFieldOfView(t),i={offset:e,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_};return Object.defineProperty(i,"fieldOfView",{enumerable:!0,get:function(){return T("VRFieldOfView","VRFrameData's projection matrices"),n}}),i},xt.prototype.onDeviceParamsUpdated_=function(t){this.config.DEBUG&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},xt.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},xt.prototype.beginPresent_=function(){var t=this.layer_.source.getContext("webgl");t||(t=this.layer_.source.getContext("experimental-webgl")),t||(t=this.layer_.source.getContext("webgl2")),t&&(this.layer_.predistorted?this.config.CARDBOARD_UI_DISABLED||(t.canvas.width=g()*this.bufferScale_,t.canvas.height=v()*this.bufferScale_,this.cardboardUI_=new N(t)):(this.config.CARDBOARD_UI_DISABLED||(this.cardboardUI_=new N(t)),this.distorter_=new P(t,this.cardboardUI_,this.config.BUFFER_SCALE,this.config.DIRTY_SUBMIT_FRAME_BINDINGS),this.distorter_.updateDeviceInfo(this.deviceInfo_)),this.cardboardUI_&&this.cardboardUI_.listen(function(t){this.viewerSelector_.show(this.layer_.source.parentElement),t.stopPropagation(),t.preventDefault()}.bind(this),function(t){this.exitPresent(),t.stopPropagation(),t.preventDefault()}.bind(this)),this.rotateInstructions_&&(m()&&_()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},xt.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},xt.prototype.updatePresent_=function(){this.endPresent_(),this.beginPresent_()},xt.prototype.submitFrame=function(t){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2"));var n=e.canvas;n.width==this.lastWidth&&n.height==this.lastHeight||this.cardboardUI_.onResize(),this.lastWidth=n.width,this.lastHeight=n.height,this.cardboardUI_.render()}},xt.prototype.onOrientationChange_=function(t){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},xt.prototype.onResize_=function(t){if(this.layer_){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2")),e.canvas.setAttribute("style",["position: absolute","top: 0","left: 0","width: 100vw","height: 100vh","border: 0","margin: 0","padding: 0px","box-sizing: content-box"].join("; ")+";"),w(e.canvas)}},xt.prototype.onViewerChanged_=function(t){this.deviceInfo_.setViewer(t),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},xt.prototype.fireVRDisplayDeviceParamsChange_=function(){var t=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(t)},xt.VRFrameData=function(){this.leftProjectionMatrix=new Float32Array(16),this.leftViewMatrix=new Float32Array(16),this.rightProjectionMatrix=new Float32Array(16),this.rightViewMatrix=new Float32Array(16),this.pose=null},xt.VRDisplay=gt,xt}()})))&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,a={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",PROVIDE_MOBILE_VRDISPLAY:!0,MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1};function l(t){this.config=o(o({},a),t),this.polyfillDisplays=[],this.enabled=!1,this.hasNative="getVRDisplays"in navigator,this.native={},this.native.getVRDisplays=navigator.getVRDisplays,this.native.VRFrameData=window.VRFrameData,this.native.VRDisplay=window.VRDisplay,(!this.hasNative||this.config.PROVIDE_MOBILE_VRDISPLAY&&n())&&(this.enable(),this.getVRDisplays().then((function(t){t&&t[0]&&t[0].fireVRDisplayConnect_&&t[0].fireVRDisplayConnect_()})))}l.prototype.getPolyfillDisplays=function(){if(this._polyfillDisplaysPopulated)return this.polyfillDisplays;if(n()){var t=new s({ADDITIONAL_VIEWERS:this.config.ADDITIONAL_VIEWERS,DEFAULT_VIEWER:this.config.DEFAULT_VIEWER,MOBILE_WAKE_LOCK:this.config.MOBILE_WAKE_LOCK,DEBUG:this.config.DEBUG,DPDB_URL:this.config.DPDB_URL,CARDBOARD_UI_DISABLED:this.config.CARDBOARD_UI_DISABLED,K_FILTER:this.config.K_FILTER,PREDICTION_TIME_S:this.config.PREDICTION_TIME_S,ROTATE_INSTRUCTIONS_DISABLED:this.config.ROTATE_INSTRUCTIONS_DISABLED,YAW_ONLY:this.config.YAW_ONLY,BUFFER_SCALE:this.config.BUFFER_SCALE,DIRTY_SUBMIT_FRAME_BINDINGS:this.config.DIRTY_SUBMIT_FRAME_BINDINGS});this.polyfillDisplays.push(t)}return this._polyfillDisplaysPopulated=!0,this.polyfillDisplays},l.prototype.enable=function(){if(this.enabled=!0,this.hasNative&&this.native.VRFrameData){var t=this.native.VRFrameData,e=new this.native.VRFrameData,n=this.native.VRDisplay.prototype.getFrameData;window.VRDisplay.prototype.getFrameData=function(i){i instanceof t?n.call(this,i):(n.call(this,e),i.pose=e.pose,r(e.leftProjectionMatrix,i.leftProjectionMatrix),r(e.rightProjectionMatrix,i.rightProjectionMatrix),r(e.leftViewMatrix,i.leftViewMatrix),r(e.rightViewMatrix,i.rightViewMatrix))}}navigator.getVRDisplays=this.getVRDisplays.bind(this),window.VRDisplay=s.VRDisplay,window.VRFrameData=s.VRFrameData},l.prototype.getVRDisplays=function(){var t=this;return this.config,this.hasNative?this.native.getVRDisplays.call(navigator).then((function(e){return e.length>0?e:t.getPolyfillDisplays()})):Promise.resolve(this.getPolyfillDisplays())},l.version="0.10.12",l.VRFrameData=s.VRFrameData,l.VRDisplay=s.VRDisplay;var c=Object.freeze({default:l}),h=c&&l||c;return void 0!==e&&e.window&&(e.document||(e.document=e.window.document),e.navigator||(e.navigator=e.window.navigator)),h}()})));const h=0,u=1,d=2;function p(){}Object.assign(p.prototype,{addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)},hasEventListener:function(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)},removeEventListener:function(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}},dispatchEvent:function(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e>8&255]+f[t>>16&255]+f[t>>24&255]+"-"+f[255&e]+f[e>>8&255]+"-"+f[e>>16&15|64]+f[e>>24&255]+"-"+f[63&n|128]+f[n>>8&255]+"-"+f[n>>16&255]+f[n>>24&255]+f[255&i]+f[i>>8&255]+f[i>>16&255]+f[i>>24&255]).toUpperCase()},clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},damp:function(t,e,n,i){return g.lerp(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(g.euclideanModulo(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(m=t%2147483647),m=16807*m%2147483647,(m-1)/2147483646},degToRad:function(t){return t*g.DEG2RAD},radToDeg:function(t){return t*g.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,n,i,r){const o=Math.cos,s=Math.sin,a=o(n/2),l=s(n/2),c=o((e+i)/2),h=s((e+i)/2),u=o((e-i)/2),d=s((e-i)/2),p=o((i-e)/2),f=s((i-e)/2);switch(r){case"XYX":t.set(a*h,l*u,l*d,a*c);break;case"YZY":t.set(l*d,a*h,l*u,a*c);break;case"ZXZ":t.set(l*u,l*d,a*h,a*c);break;case"XZX":t.set(a*h,l*f,l*p,a*c);break;case"YXY":t.set(l*p,a*h,l*f,a*c);break;case"ZYZ":t.set(l*f,l*p,a*h,a*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}};class v{constructor(t=0,e=0){Object.defineProperty(this,"isVector2",{value:!0}),this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,o=this.y-t.y;return this.x=r*n-o*i+t.x,this.y=r*i+o*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}class y{constructor(){Object.defineProperty(this,"isMatrix3",{value:!0}),this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=s,c[3]=e,c[4]=r,c[5]=a,c[6]=n,c[7]=o,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}clone(){return(new this.constructor).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[3],a=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],A=i[7],x=i[2],_=i[5],b=i[8];return r[0]=o*f+s*v+a*x,r[3]=o*m+s*y+a*_,r[6]=o*g+s*A+a*b,r[1]=l*f+c*v+h*x,r[4]=l*m+c*y+h*_,r[7]=l*g+c*A+h*b,r[2]=u*f+d*v+p*x,r[5]=u*m+d*y+p*_,r[8]=u*g+d*A+p*b,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8];return e*o*c-e*s*l-n*r*c+n*s*a+i*r*l-i*o*a}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=c*o-s*l,u=s*a-c*r,d=l*r-o*a,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=h*f,t[1]=(i*l-c*n)*f,t[2]=(s*n-i*o)*f,t[3]=u*f,t[4]=(c*e-i*a)*f,t[5]=(i*r-s*e)*f,t[6]=d*f,t[7]=(n*a-l*e)*f,t[8]=(o*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).copy(this).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,o,s){const a=Math.cos(r),l=Math.sin(r);return this.set(n*a,n*l,-n*(a*o+l*s)+o+t,-i*l,i*a,-i*(-l*o+a*s)+s+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],o=i[3],s=i[6],a=i[1],l=i[4],c=i[7];return i[0]=e*r+n*a,i[3]=e*o+n*l,i[6]=e*s+n*c,i[1]=-n*r+e*a,i[4]=-n*o+e*l,i[7]=-n*s+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}}let A;const x={getDataURL:function(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===A&&(A=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),A.width=t.width,A.height=t.height;const n=A.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=A}return e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}};let _=0;function b(t=b.DEFAULT_IMAGE,e=b.DEFAULT_MAPPING,n=1001,i=1001,r=1006,o=1008,s=1023,a=1009,l=1,c=3e3){Object.defineProperty(this,"id",{value:_++}),this.uuid=g.generateUUID(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=a,this.offset=new v(0,0),this.repeat=new v(1,1),this.center=new v(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new y,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}function w(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?x.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}b.DEFAULT_IMAGE=void 0,b.DEFAULT_MAPPING=300,b.prototype=Object.assign(Object.create(p.prototype),{constructor:b,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=g.generateUUID()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case 1e3:t.x=t.x-Math.floor(t.x);break;case 1001:t.x=t.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case 1e3:t.y=t.y-Math.floor(t.y);break;case 1001:t.y=t.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(b.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}});class M{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isVector4",{value:!0}),this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*i+o[12]*r,this.y=o[1]*e+o[5]*n+o[9]*i+o[13]*r,this.z=o[2]*e+o[6]*n+o[10]*i+o[14]*r,this.w=o[3]*e+o[7]*n+o[11]*i+o[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const o=t.elements,s=o[0],a=o[4],l=o[8],c=o[1],h=o[5],u=o[9],d=o[2],p=o[6],f=o[10];if(Math.abs(a-c)<.01&&Math.abs(l-d)<.01&&Math.abs(u-p)<.01){if(Math.abs(a+c)<.1&&Math.abs(l+d)<.1&&Math.abs(u+p)<.1&&Math.abs(s+h+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const t=(s+1)/2,o=(h+1)/2,m=(f+1)/2,g=(a+c)/4,v=(l+d)/4,y=(u+p)/4;return t>o&&t>m?t<.01?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=g/n,r=v/n):o>m?o<.01?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(o),n=g/i,r=y/i):m<.01?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(m),n=v/r,i=y/r),this.set(n,i,r,e),this}let m=Math.sqrt((p-u)*(p-u)+(l-d)*(l-d)+(c-a)*(c-a));return Math.abs(m)<.001&&(m=1),this.x=(p-u)/m,this.y=(l-d)/m,this.z=(c-a)/m,this.w=Math.acos((s+h+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}}class E extends p{constructor(t,e,n){super(),Object.defineProperty(this,"isWebGLRenderTarget",{value:!0}),this.width=t,this.height=e,this.scissor=new M(0,0,t,e),this.scissorTest=!1,this.viewport=new M(0,0,t,e),n=n||{},this.texture=new b(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.image={},this.texture.image.width=t,this.texture.image.height=e,this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:1006,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setSize(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.texture.image.width=t,this.texture.image.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:"dispose"})}}class S{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isQuaternion",{value:!0}),this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return n.copy(t).slerp(e,i)}static slerpFlat(t,e,n,i,r,o,s){let a=n[i+0],l=n[i+1],c=n[i+2],h=n[i+3];const u=r[o+0],d=r[o+1],p=r[o+2],f=r[o+3];if(h!==f||a!==u||l!==d||c!==p){let t=1-s;const e=a*u+l*d+c*p+h*f,n=e>=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),o=Math.atan2(r,e*n);t=Math.sin(t*o)/r,s=Math.sin(s*o)/r}const r=s*n;if(a=a*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+f*r,t===1-s){const t=1/Math.sqrt(a*a+l*l+c*c+h*h);a*=t,l*=t,c*=t,h*=t}}t[e]=a,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,o){const s=n[i],a=n[i+1],l=n[i+2],c=n[i+3],h=r[o],u=r[o+1],d=r[o+2],p=r[o+3];return t[e]=s*p+c*h+a*d-l*u,t[e+1]=a*p+c*u+l*h-s*d,t[e+2]=l*p+c*d+s*u-a*h,t[e+3]=c*p-s*h-a*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,o=t._order,s=Math.cos,a=Math.sin,l=s(n/2),c=s(i/2),h=s(r/2),u=a(n/2),d=a(i/2),p=a(r/2);switch(o){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+o)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],o=e[1],s=e[5],a=e[9],l=e[2],c=e[6],h=e[10],u=n+s+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-a)*t,this._y=(r-l)*t,this._z=(o-i)*t}else if(n>s&&n>h){const t=2*Math.sqrt(1+n-s-h);this._w=(c-a)/t,this._x=.25*t,this._y=(i+o)/t,this._z=(r+l)/t}else if(s>h){const t=2*Math.sqrt(1+s-n-h);this._w=(r-l)/t,this._x=(i+o)/t,this._y=.25*t,this._z=(a+c)/t}else{const t=2*Math.sqrt(1+h-n-s);this._w=(o-i)/t,this._x=(r+l)/t,this._y=(a+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-6?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(g.clamp(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,o=t._w,s=e._x,a=e._y,l=e._z,c=e._w;return this._x=n*c+o*s+i*l-r*a,this._y=i*c+o*a+r*s-n*l,this._z=r*c+o*l+n*a-i*s,this._w=o*c-n*s-i*a-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,o=this._w;let s=o*t._w+n*t._x+i*t._y+r*t._z;if(s<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,s=-s):this.copy(t),s>=1)return this._w=o,this._x=n,this._y=i,this._z=r,this;const a=1-s*s;if(a<=Number.EPSILON){const t=1-e;return this._w=t*o+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(a),c=Math.atan2(l,s),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=o*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}class T{constructor(t=0,e=0,n=0){Object.defineProperty(this,"isVector3",{value:!0}),this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(R.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(R.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,o=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*o,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*o,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*o,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,o=t.y,s=t.z,a=t.w,l=a*e+o*i-s*n,c=a*n+s*e-r*i,h=a*i+r*n-o*e,u=-r*e-o*n-s*i;return this.x=l*a+u*-r+c*-s-h*-o,this.y=c*a+u*-o+h*-r-l*-s,this.z=h*a+u*-s+l*-o-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,o=e.x,s=e.y,a=e.z;return this.x=i*a-r*s,this.y=r*o-n*a,this.z=n*s-i*o,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return L.copy(this).projectOnVector(t),this.sub(L)}reflect(t){return this.sub(L.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(g.clamp(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}const L=new T,R=new S;class C{constructor(t,e){Object.defineProperty(this,"isBox3",{value:!0}),this.min=void 0!==t?t:new T(1/0,1/0,1/0),this.max=void 0!==e?e:new T(-1/0,-1/0,-1/0)}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.length;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,s=-1/0;for(let a=0,l=t.count;ar&&(r=l),c>o&&(o=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,o,s),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new T),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,I),I.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(G),V.subVectors(this.max,G),N.subVectors(t.a,G),B.subVectors(t.b,G),F.subVectors(t.c,G),z.subVectors(B,N),U.subVectors(F,B),H.subVectors(N,F);let e=[0,-z.z,z.y,0,-U.z,U.y,0,-H.z,H.y,z.z,0,-z.x,U.z,0,-U.x,H.z,0,-H.x,-z.y,z.x,0,-U.y,U.x,0,-H.y,H.x,0];return!!P(e,N,B,F,V)&&(e=[1,0,0,0,1,0,0,0,1],!!P(e,N,B,F,V)&&(k.crossVectors(z,U),e=[k.x,k.y,k.z],P(e,N,B,F,V)))}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new T),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return I.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(I).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(D[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),D[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),D[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),D[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),D[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),D[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),D[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),D[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(D)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}function P(t,e,n,i,r){for(let o=0,s=t.length-3;o<=s;o+=3){W.fromArray(t,o);const s=r.x*Math.abs(W.x)+r.y*Math.abs(W.y)+r.z*Math.abs(W.z),a=e.dot(W),l=n.dot(W),c=i.dot(W);if(Math.max(-Math.max(a,l,c),Math.min(a,l,c))>s)return!1}return!0}const D=[new T,new T,new T,new T,new T,new T,new T,new T],I=new T,O=new C,N=new T,B=new T,F=new T,z=new T,U=new T,H=new T,G=new T,V=new T,k=new T,W=new T,j=new C;class X{constructor(t,e){this.center=void 0!==t?t:new T,this.radius=void 0!==e?e:-1}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):j.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new C),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}}const q=new T,Y=new T,Q=new T,Z=new T,J=new T,K=new T,$=new T;class tt{constructor(t,e){this.origin=void 0!==t?t:new T,this.direction=void 0!==e?e:new T(0,0,-1)}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new T),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,q)),this}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new T),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=q.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(q.copy(this.direction).multiplyScalar(e).add(this.origin),q.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Y.copy(t).add(e).multiplyScalar(.5),Q.copy(e).sub(t).normalize(),Z.copy(this.origin).sub(Y);const r=.5*t.distanceTo(e),o=-this.direction.dot(Q),s=Z.dot(this.direction),a=-Z.dot(Q),l=Z.lengthSq(),c=Math.abs(1-o*o);let h,u,d,p;if(c>0)if(h=o*a-s,u=o*s-a,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+o*u+2*s)+u*(o*h+u+2*a)+l}else u=r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u=-r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;else u<=-p?(h=Math.max(0,-(-o*r+s)),u=h>0?-r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-a),r),d=u*(u+2*a)+l):(h=Math.max(0,-(o*r+s)),u=h>0?r:Math.min(Math.max(-r,-a),r),d=-h*h+u*(u+2*a)+l);else u=o>0?-r:r,h=Math.max(0,-(o*u+s)),d=-h*h+u*(u+2*a)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(Q).multiplyScalar(u).add(Y),d}intersectSphere(t,e){q.subVectors(t.center,this.origin);const n=q.dot(this.direction),i=q.dot(q)-n*n,r=t.radius*t.radius;if(i>r)return null;const o=Math.sqrt(r-i),s=n-o,a=n+o;return s<0&&a<0?null:s<0?this.at(a,e):this.at(s,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,o,s,a;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,o=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,o=(t.min.y-u.y)*c),n>o||r>i?null:((r>n||n!=n)&&(n=r),(o=0?(s=(t.min.z-u.z)*h,a=(t.max.z-u.z)*h):(s=(t.max.z-u.z)*h,a=(t.min.z-u.z)*h),n>a||s>i?null:((s>n||n!=n)&&(n=s),(a=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,q)}intersectTriangle(t,e,n,i,r){J.subVectors(e,t),K.subVectors(n,t),$.crossVectors(J,K);let o,s=this.direction.dot($);if(s>0){if(i)return null;o=1}else{if(!(s<0))return null;o=-1,s=-s}Z.subVectors(this.origin,t);const a=o*this.direction.dot(K.crossVectors(Z,K));if(a<0)return null;const l=o*this.direction.dot(J.cross(Z));if(l<0)return null;if(a+l>s)return null;const c=-o*Z.dot($);return c<0?null:this.at(c/s,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}class et{constructor(){Object.defineProperty(this,"isMatrix4",{value:!0}),this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,s,a,l,c,h,u,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=o,g[9]=s,g[13]=a,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new et).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/nt.setFromMatrixColumn(t,0).length(),r=1/nt.setFromMatrixColumn(t,1).length(),o=1/nt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*o,e[9]=n[9]*o,e[10]=n[10]*o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,o=Math.cos(n),s=Math.sin(n),a=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=-a*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-s*a,e[2]=r-t*l,e[6]=i+n*l,e[10]=o*a}else if("YXZ"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t+r*s,e[4]=i*s-n,e[8]=o*l,e[1]=o*h,e[5]=o*c,e[9]=-s,e[2]=n*s-i,e[6]=r+t*s,e[10]=o*a}else if("ZXY"===t.order){const t=a*c,n=a*h,i=l*c,r=l*h;e[0]=t-r*s,e[4]=-o*h,e[8]=i+n*s,e[1]=n+i*s,e[5]=o*c,e[9]=r-t*s,e[2]=-o*l,e[6]=s,e[10]=o*a}else if("ZYX"===t.order){const t=o*c,n=o*h,i=s*c,r=s*h;e[0]=a*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=a*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=s*a,e[10]=o*a}else if("YZX"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=o*c,e[9]=-s*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=o*a,n=o*l,i=s*a,r=s*l;e[0]=a*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=o*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=s*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(rt,t,ot)}lookAt(t,e,n){const i=this.elements;return lt.subVectors(t,e),0===lt.lengthSq()&&(lt.z=1),lt.normalize(),st.crossVectors(n,lt),0===st.lengthSq()&&(1===Math.abs(n.z)?lt.x+=1e-4:lt.z+=1e-4,lt.normalize(),st.crossVectors(n,lt)),st.normalize(),at.crossVectors(lt,st),i[0]=st.x,i[4]=at.x,i[8]=lt.x,i[1]=st.y,i[5]=at.y,i[9]=lt.y,i[2]=st.z,i[6]=at.z,i[10]=lt.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],s=n[4],a=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],A=n[11],x=n[15],_=i[0],b=i[4],w=i[8],M=i[12],E=i[1],S=i[5],T=i[9],L=i[13],R=i[2],C=i[6],P=i[10],D=i[14],I=i[3],O=i[7],N=i[11],B=i[15];return r[0]=o*_+s*E+a*R+l*I,r[4]=o*b+s*S+a*C+l*O,r[8]=o*w+s*T+a*P+l*N,r[12]=o*M+s*L+a*D+l*B,r[1]=c*_+h*E+u*R+d*I,r[5]=c*b+h*S+u*C+d*O,r[9]=c*w+h*T+u*P+d*N,r[13]=c*M+h*L+u*D+d*B,r[2]=p*_+f*E+m*R+g*I,r[6]=p*b+f*S+m*C+g*O,r[10]=p*w+f*T+m*P+g*N,r[14]=p*M+f*L+m*D+g*B,r[3]=v*_+y*E+A*R+x*I,r[7]=v*b+y*S+A*C+x*O,r[11]=v*w+y*T+A*P+x*N,r[15]=v*M+y*L+A*D+x*B,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],o=t[1],s=t[5],a=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*a*h-i*l*h-r*s*u+n*l*u+i*s*d-n*a*d)+t[7]*(+e*a*d-e*l*u+r*o*u-i*o*d+i*l*c-r*a*c)+t[11]*(+e*l*h-e*s*d-r*o*h+n*o*d+r*s*c-n*l*c)+t[15]*(-i*s*c-e*a*h+e*s*u+i*o*h-n*o*u+n*a*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],s=t[5],a=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=h*m*l-f*u*l+f*a*d-s*m*d-h*a*g+s*u*g,y=p*u*l-c*m*l-p*a*d+o*m*d+c*a*g-o*u*g,A=c*f*l-p*h*l+p*s*d-o*f*d-c*s*g+o*h*g,x=p*h*a-c*f*a-p*s*u+o*f*u+c*s*m-o*h*m,_=e*v+n*y+i*A+r*x;if(0===_)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const b=1/_;return t[0]=v*b,t[1]=(f*u*r-h*m*r-f*i*d+n*m*d+h*i*g-n*u*g)*b,t[2]=(s*m*r-f*a*r+f*i*l-n*m*l-s*i*g+n*a*g)*b,t[3]=(h*a*r-s*u*r-h*i*l+n*u*l+s*i*d-n*a*d)*b,t[4]=y*b,t[5]=(c*m*r-p*u*r+p*i*d-e*m*d-c*i*g+e*u*g)*b,t[6]=(p*a*r-o*m*r-p*i*l+e*m*l+o*i*g-e*a*g)*b,t[7]=(o*u*r-c*a*r+c*i*l-e*u*l-o*i*d+e*a*d)*b,t[8]=A*b,t[9]=(p*h*r-c*f*r-p*n*d+e*f*d+c*n*g-e*h*g)*b,t[10]=(o*f*r-p*s*r+p*n*l-e*f*l-o*n*g+e*s*g)*b,t[11]=(c*s*r-o*h*r-c*n*l+e*h*l+o*n*d-e*s*d)*b,t[12]=x*b,t[13]=(c*f*i-p*h*i+p*n*u-e*f*u-c*n*m+e*h*m)*b,t[14]=(p*s*i-o*f*i-p*n*a+e*f*a+o*n*m-e*s*m)*b,t[15]=(o*h*i-c*s*i+c*n*a-e*h*a-o*n*u+e*s*u)*b,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,o=t.x,s=t.y,a=t.z,l=r*o,c=r*s;return this.set(l*o+n,l*s-i*a,l*a+i*s,0,l*s+i*a,c*s+n,c*a-i*o,0,l*a-i*s,c*a+i*o,r*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n){return this.set(1,e,n,0,t,1,n,0,t,e,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,o=e._y,s=e._z,a=e._w,l=r+r,c=o+o,h=s+s,u=r*l,d=r*c,p=r*h,f=o*c,m=o*h,g=s*h,v=a*l,y=a*c,A=a*h,x=n.x,_=n.y,b=n.z;return i[0]=(1-(f+g))*x,i[1]=(d+A)*x,i[2]=(p-y)*x,i[3]=0,i[4]=(d-A)*_,i[5]=(1-(u+g))*_,i[6]=(m+v)*_,i[7]=0,i[8]=(p+y)*b,i[9]=(m-v)*b,i[10]=(1-(u+f))*b,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=nt.set(i[0],i[1],i[2]).length();const o=nt.set(i[4],i[5],i[6]).length(),s=nt.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],it.copy(this);const a=1/r,l=1/o,c=1/s;return it.elements[0]*=a,it.elements[1]*=a,it.elements[2]*=a,it.elements[4]*=l,it.elements[5]*=l,it.elements[6]*=l,it.elements[8]*=c,it.elements[9]*=c,it.elements[10]*=c,e.setFromRotationMatrix(it),n.x=r,n.y=o,n.z=s,this}makePerspective(t,e,n,i,r,o){void 0===o&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const s=this.elements,a=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(o+r)/(o-r),d=-2*o*r/(o-r);return s[0]=a,s[4]=0,s[8]=c,s[12]=0,s[1]=0,s[5]=l,s[9]=h,s[13]=0,s[2]=0,s[6]=0,s[10]=u,s[14]=d,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(t,e,n,i,r,o){const s=this.elements,a=1/(e-t),l=1/(n-i),c=1/(o-r),h=(e+t)*a,u=(n+i)*l,d=(o+r)*c;return s[0]=2*a,s[4]=0,s[8]=0,s[12]=-h,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-u,s[2]=0,s[6]=0,s[10]=-2*c,s[14]=-d,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const nt=new T,it=new et,rt=new T(0,0,0),ot=new T(1,1,1),st=new T,at=new T,lt=new T;class ct{constructor(t=0,e=0,n=0,i=ct.DefaultOrder){Object.defineProperty(this,"isEuler",{value:!0}),this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=g.clamp,r=t.elements,o=r[0],s=r[4],a=r[8],l=r[1],c=r[5],h=r[9],u=r[2],d=r[6],p=r[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(i(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-s,o)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-i(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(a,p),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-u,o),this._z=0);break;case"ZXY":this._x=Math.asin(i(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-s,c)):(this._y=0,this._z=Math.atan2(l,o));break;case"ZYX":this._y=Math.asin(-i(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(l,o)):(this._x=0,this._z=Math.atan2(-s,c));break;case"YZX":this._z=Math.asin(i(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-u,o)):(this._x=0,this._y=Math.atan2(a,p));break;case"XZY":this._z=Math.asin(-i(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,o)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return ht.makeRotationFromQuaternion(t),this.setFromRotationMatrix(ht,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return ut.setFromEuler(this),this.setFromQuaternion(ut,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new T(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}ct.DefaultOrder="XYZ",ct.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];const ht=new et,ut=new S;class dt{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),s.length>0&&(n.images=s),a.length>0&&(n.shapes=a),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function o(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e1?void 0:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new T),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Rt.getNormalMatrix(t),i=this.coplanarPoint(Tt).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}const Pt=new T,Dt=new T,It=new T,Ot=new T,Nt=new T,Bt=new T,Ft=new T,zt=new T,Ut=new T,Ht=new T;class Gt{constructor(t,e,n){this.a=void 0!==t?t:new T,this.b=void 0!==e?e:new T,this.c=void 0!==n?n:new T}static getNormal(t,e,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new T),i.subVectors(n,e),Pt.subVectors(t,e),i.cross(Pt);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){Pt.subVectors(i,e),Dt.subVectors(n,e),It.subVectors(t,e);const o=Pt.dot(Pt),s=Pt.dot(Dt),a=Pt.dot(It),l=Dt.dot(Dt),c=Dt.dot(It),h=o*l-s*s;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new T),0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*a-s*c)*u,p=(o*c-s*a)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Ot),Ot.x>=0&&Ot.y>=0&&Ot.x+Ot.y<=1}static getUV(t,e,n,i,r,o,s,a){return this.getBarycoord(t,e,n,i,Ot),a.set(0,0),a.addScaledVector(r,Ot.x),a.addScaledVector(o,Ot.y),a.addScaledVector(s,Ot.z),a}static isFrontFacing(t,e,n,i){return Pt.subVectors(n,e),Dt.subVectors(t,e),Pt.cross(Dt).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Pt.subVectors(this.c,this.b),Dt.subVectors(this.a,this.b),.5*Pt.cross(Dt).length()}getMidpoint(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new T),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Gt.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Ct),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Gt.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return Gt.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return Gt.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Gt.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new T);const n=this.a,i=this.b,r=this.c;let o,s;Nt.subVectors(i,n),Bt.subVectors(r,n),zt.subVectors(t,n);const a=Nt.dot(zt),l=Bt.dot(zt);if(a<=0&&l<=0)return e.copy(n);Ut.subVectors(t,i);const c=Nt.dot(Ut),h=Bt.dot(Ut);if(c>=0&&h<=c)return e.copy(i);const u=a*h-c*l;if(u<=0&&a>=0&&c<=0)return o=a/(a-c),e.copy(n).addScaledVector(Nt,o);Ht.subVectors(t,r);const d=Nt.dot(Ht),p=Bt.dot(Ht);if(p>=0&&d<=p)return e.copy(r);const f=d*l-a*p;if(f<=0&&l>=0&&p<=0)return s=l/(l-p),e.copy(n).addScaledVector(Bt,s);const m=c*p-d*h;if(m<=0&&h-c>=0&&d-p>=0)return Ft.subVectors(r,i),s=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(Ft,s);const g=1/(m+f+u);return o=f*g,s=u*g,e.copy(n).addScaledVector(Nt,o).addScaledVector(Bt,s)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const Vt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},kt={h:0,s:0,l:0},Wt={h:0,s:0,l:0};function jt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Xt(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function qt(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Yt{constructor(t,e,n){return Object.defineProperty(this,"isColor",{value:!0}),void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=g.euclideanModulo(t,1),e=g.clamp(e,0,1),n=g.clamp(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=jt(r,i,t+1/3),this.g=jt(r,i,t),this.b=jt(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=Vt[t];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Xt(t.r),this.g=Xt(t.g),this.b=Xt(t.b),this}copyLinearToSRGB(t){return this.r=qt(t.r),this.g=qt(t.g),this.b=qt(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),o=Math.min(e,n,i);let s,a;const l=(o+r)/2;if(o===r)s=0,a=0;else{const t=r-o;switch(a=l<=.5?t/(r+o):t/(2-r-o),r){case e:s=(n-i)/t+(n0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(Jt.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Kt.prototype=Object.create(Jt.prototype),Kt.prototype.constructor=Kt,Kt.prototype.isMeshBasicMaterial=!0,Kt.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this};const $t=new T,te=new v;function ee(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}function ne(t,e,n){ee.call(this,new Int8Array(t),e,n)}function ie(t,e,n){ee.call(this,new Uint8Array(t),e,n)}function re(t,e,n){ee.call(this,new Uint8ClampedArray(t),e,n)}function oe(t,e,n){ee.call(this,new Int16Array(t),e,n)}function se(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function ae(t,e,n){ee.call(this,new Int32Array(t),e,n)}function le(t,e,n){ee.call(this,new Uint32Array(t),e,n)}function ce(t,e,n){ee.call(this,new Uint16Array(t),e,n)}function he(t,e,n){ee.call(this,new Float32Array(t),e,n)}function ue(t,e,n){ee.call(this,new Float64Array(t),e,n)}function de(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;ne&&(e=t[n]);return e}Object.defineProperty(ee.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(ee.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i65535?le:se)(t,1):this.index=t,this},getAttribute:function(t){return this.attributes[t]},setAttribute:function(t,e){return this.attributes[t]=e,this},deleteAttribute:function(t){return delete this.attributes[t],this},hasAttribute:function(t){return void 0!==this.attributes[t]},addGroup:function(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix4:function(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new y).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(t){return ge.makeRotationX(t),this.applyMatrix4(ge),this},rotateY:function(t){return ge.makeRotationY(t),this.applyMatrix4(ge),this},rotateZ:function(t){return ge.makeRotationZ(t),this.applyMatrix4(ge),this},translate:function(t,e,n){return ge.makeTranslation(t,e,n),this.applyMatrix4(ge),this},scale:function(t,e,n){return ge.makeScale(t,e,n),this.applyMatrix4(ge),this},lookAt:function(t){return ve.lookAt(t),ve.updateMatrix(),this.applyMatrix4(ve.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(ye).negate(),this.translate(ye.x,ye.y,ye.z),this},setFromPoints:function(t){const e=[];for(let n=0,i=t.length;n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e],r=i.toJSON(t.data);""!==i.name&&(r.name=i.name),t.data.attributes[e]=r}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],o=[];for(let e=0,i=n.length;e0&&(i[e]=o,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const o=this.groups;o.length>0&&(t.data.groups=JSON.parse(JSON.stringify(o)));const s=this.boundingSphere;return null!==s&&(t.data.boundingSphere={center:s.center.toArray(),radius:s.radius}),t},clone:function(){return(new be).copy(this)},copy:function(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;tn.far?null:{distance:c,point:Ue.clone(),object:t}}(t,e,n,i,Se,Te,Le,ze);if(p){a&&(Ne.fromBufferAttribute(a,c),Be.fromBufferAttribute(a,h),Fe.fromBufferAttribute(a,u),p.uv=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v)),l&&(Ne.fromBufferAttribute(l,c),Be.fromBufferAttribute(l,h),Fe.fromBufferAttribute(l,u),p.uv2=Gt.getUV(ze,Se,Te,Le,Ne,Be,Fe,new v));const t=new Qt(c,h,u);Gt.getNormal(Se,Te,Le,t.normal),p.face=t}return p}He.prototype=Object.assign(Object.create(St.prototype),{constructor:He,isMesh:!0,copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),Ee.copy(n.boundingSphere),Ee.applyMatrix4(r),!1===t.ray.intersectsSphere(Ee))return;if(we.copy(r).invert(),Me.copy(t.ray).applyMatrix4(we),null!==n.boundingBox&&!1===Me.intersectsBox(n.boundingBox))return;let o;if(n.isBufferGeometry){const r=n.index,s=n.attributes.position,a=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;n0?1:-1,c.push(L.x,L.y,L.z),h.push(a/m),h.push(1-o/g),E+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e},qe.prototype=Object.assign(Object.create(St.prototype),{constructor:qe,isCamera:!0,copy:function(t,e){return St.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this},getWorldDirection:function(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new T),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(t){St.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()},updateWorldMatrix:function(t,e){St.prototype.updateWorldMatrix.call(this,t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()},clone:function(){return(new this.constructor).copy(this)}}),Ye.prototype=Object.assign(Object.create(qe.prototype),{constructor:Ye,isPerspectiveCamera:!0,copy:function(t,e){return qe.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){const e=.5*this.getFilmHeight()/t;this.fov=2*g.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){const t=Math.tan(.5*g.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*g.RAD2DEG*Math.atan(Math.tan(.5*g.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(t,e,n,i,r,o){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){const t=this.near;let e=t*Math.tan(.5*g.DEG2RAD*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const o=this.view;if(null!==this.view&&this.view.enabled){const t=o.fullWidth,s=o.fullHeight;r+=o.offsetX*i/t,e-=o.offsetY*n/s,i*=o.width/t,n*=o.height/s}const s=this.filmOffset;0!==s&&(r+=t*s/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()},toJSON:function(t){const e=St.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}});function Qe(t,e,n){if(St.call(this),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new Ye(90,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new T(1,0,0)),this.add(i);const r=new Ye(90,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new T(-1,0,0)),this.add(r);const o=new Ye(90,1,t,e);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(new T(0,1,0)),this.add(o);const s=new Ye(90,1,t,e);s.layers=this.layers,s.up.set(0,0,-1),s.lookAt(new T(0,-1,0)),this.add(s);const a=new Ye(90,1,t,e);a.layers=this.layers,a.up.set(0,-1,0),a.lookAt(new T(0,0,1)),this.add(a);const l=new Ye(90,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new T(0,0,-1)),this.add(l),this.update=function(t,e){null===this.parent&&this.updateMatrixWorld();const c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,o),t.setRenderTarget(n,3),t.render(e,s),t.setRenderTarget(n,4),t.render(e,a),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}function Ze(t,e,n,i,r,o,s,a,l,c){t=void 0!==t?t:[],e=void 0!==e?e:301,s=void 0!==s?s:1022,b.call(this,t,e,n,i,r,o,s,a,l,c),this.flipY=!1,this._needsFlipEnvMap=!0}Qe.prototype=Object.create(St.prototype),Qe.prototype.constructor=Qe,Ze.prototype=Object.create(b.prototype),Ze.prototype.constructor=Ze,Ze.prototype.isCubeTexture=!0,Object.defineProperty(Ze.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}});class Je extends E{constructor(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),super(t,t,e),Object.defineProperty(this,"isWebGLCubeRenderTarget",{value:!0}),e=e||{},this.texture=new Ze(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=1023,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new Ve(5,5,5),r=new Xe({name:"CubemapFromEquirect",uniforms:ke(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const o=new He(i,r),s=e.minFilter;1008===e.minFilter&&(e.minFilter=1006);return new Qe(1,10,this).update(t,o),e.minFilter=s,o.geometry.dispose(),o.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}function Ke(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==l?l:1003,this.minFilter=void 0!==c?c:1003,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}Ke.prototype=Object.create(b.prototype),Ke.prototype.constructor=Ke,Ke.prototype.isDataTexture=!0;const $e=new X,tn=new T;class en{constructor(t,e,n,i,r,o){this.planes=[void 0!==t?t:new Ct,void 0!==e?e:new Ct,void 0!==n?n:new Ct,void 0!==i?i:new Ct,void 0!==r?r:new Ct,void 0!==o?o:new Ct]}set(t,e,n,i,r,o){const s=this.planes;return s[0].copy(t),s[1].copy(e),s[2].copy(n),s[3].copy(i),s[4].copy(r),s[5].copy(o),this}clone(){return(new this.constructor).copy(this)}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],o=n[2],s=n[3],a=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(s-i,h-a,f-u,y-m).normalize(),e[1].setComponents(s+i,h+a,f+u,y+m).normalize(),e[2].setComponents(s+r,h+l,f+d,y+g).normalize(),e[3].setComponents(s-r,h-l,f-d,y-g).normalize(),e[4].setComponents(s-o,h-c,f-p,y-v).normalize(),e[5].setComponents(s+o,h+c,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),$e.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSprite(t){return $e.center.set(0,0,0),$e.radius=.7071067811865476,$e.applyMatrix4(t.matrixWorld),this.intersectsSphere($e)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,tn.y=i.normal.y>0?t.max.y:t.min.y,tn.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(tn)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}}function nn(){let t=null,e=!1,n=null,i=null;function r(e,o){n(e,o),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function rn(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},an={common:{diffuse:{value:new Yt(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new y},uv2Transform:{value:new y},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new v(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Yt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Yt(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}},sprite:{diffuse:{value:new Yt(15658734)},opacity:{value:1},center:{value:new v(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new y}}},ln={basic:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.fog]),vertexShader:sn.meshbasic_vert,fragmentShader:sn.meshbasic_frag},lambert:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshlambert_vert,fragmentShader:sn.meshlambert_frag},phong:{uniforms:We([an.common,an.specularmap,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.fog,an.lights,{emissive:{value:new Yt(0)},specular:{value:new Yt(1118481)},shininess:{value:30}}]),vertexShader:sn.meshphong_vert,fragmentShader:sn.meshphong_frag},standard:{uniforms:We([an.common,an.envmap,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.roughnessmap,an.metalnessmap,an.fog,an.lights,{emissive:{value:new Yt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:sn.meshphysical_vert,fragmentShader:sn.meshphysical_frag},toon:{uniforms:We([an.common,an.aomap,an.lightmap,an.emissivemap,an.bumpmap,an.normalmap,an.displacementmap,an.gradientmap,an.fog,an.lights,{emissive:{value:new Yt(0)}}]),vertexShader:sn.meshtoon_vert,fragmentShader:sn.meshtoon_frag},matcap:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,an.fog,{matcap:{value:null}}]),vertexShader:sn.meshmatcap_vert,fragmentShader:sn.meshmatcap_frag},points:{uniforms:We([an.points,an.fog]),vertexShader:sn.points_vert,fragmentShader:sn.points_frag},dashed:{uniforms:We([an.common,an.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:sn.linedashed_vert,fragmentShader:sn.linedashed_frag},depth:{uniforms:We([an.common,an.displacementmap]),vertexShader:sn.depth_vert,fragmentShader:sn.depth_frag},normal:{uniforms:We([an.common,an.bumpmap,an.normalmap,an.displacementmap,{opacity:{value:1}}]),vertexShader:sn.normal_vert,fragmentShader:sn.normal_frag},sprite:{uniforms:We([an.sprite,an.fog]),vertexShader:sn.sprite_vert,fragmentShader:sn.sprite_frag},background:{uniforms:{uvTransform:{value:new y},t2D:{value:null}},vertexShader:sn.background_vert,fragmentShader:sn.background_frag},cube:{uniforms:We([an.envmap,{opacity:{value:1}}]),vertexShader:sn.cube_vert,fragmentShader:sn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:sn.equirect_vert,fragmentShader:sn.equirect_frag},distanceRGBA:{uniforms:We([an.common,an.displacementmap,{referencePosition:{value:new T},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:sn.distanceRGBA_vert,fragmentShader:sn.distanceRGBA_frag},shadow:{uniforms:We([an.lights,an.fog,{color:{value:new Yt(0)},opacity:{value:1}}]),vertexShader:sn.shadow_vert,fragmentShader:sn.shadow_frag}};function cn(t,e,n,i,r){const o=new Yt(0);let s,a,l=0,c=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return o},setClearColor:function(t,e=1){o.set(t),l=e,d(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(o,l)},render:function(n,r,p,f){let m=!0===r.isScene?r.background:null;m&&m.isTexture&&(m=e.get(m));const g=t.xr,v=g.getSession&&g.getSession();v&&"additive"===v.environmentBlendMode&&(m=null),null===m?d(o,l):m&&m.isColor&&(d(m,1),f=!0),(t.autoClear||f)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),m&&(m.isCubeTexture||m.isWebGLCubeRenderTarget||306===m.mapping)?(void 0===a&&(a=new He(new Ve(1,1,1),new Xe({name:"BackgroundCubeMaterial",uniforms:ke(ln.cube.uniforms),vertexShader:ln.cube.vertexShader,fragmentShader:ln.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),a.geometry.deleteAttribute("uv"),a.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(a.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(a)),m.isWebGLCubeRenderTarget&&(m=m.texture),a.material.uniforms.envMap.value=m,a.material.uniforms.flipEnvMap.value=m.isCubeTexture&&m._needsFlipEnvMap?-1:1,c===m&&h===m.version&&u===t.toneMapping||(a.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null)):m&&m.isTexture&&(void 0===s&&(s=new He(new on(2,2),new Xe({name:"BackgroundMaterial",uniforms:ke(ln.background.uniforms),vertexShader:ln.background.vertexShader,fragmentShader:ln.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),s.geometry.deleteAttribute("normal"),Object.defineProperty(s.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(s)),s.material.uniforms.t2D.value=m,!0===m.matrixAutoUpdate&&m.updateMatrix(),s.material.uniforms.uvTransform.value.copy(m.matrix),c===m&&h===m.version&&u===t.toneMapping||(s.material.needsUpdate=!0,c=m,h=m.version,u=t.toneMapping),n.unshift(s,s.geometry,s.material,0,0,null))}}}function hn(t,e,n,i){const r=t.getParameter(34921),o=i.isWebGL2?null:e.get("OES_vertex_array_object"),s=i.isWebGL2||null!==o,a={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):o.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):o.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){const o=l[e];if(void 0!==o){const e=o.normalized,r=o.itemSize,s=n.get(o);if(void 0===s)continue;const l=s.buffer,c=s.type,h=s.bytesPerElement;if(o.isInterleavedBufferAttribute){const n=o.data,s=n.stride,u=o.offset;n&&n.isInstancedInterleavedBuffer?(m(i,n.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=n.meshPerAttribute*n.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,s*h,u*h)}else o.isInstancedBufferAttribute?(m(i,o.meshPerAttribute),void 0===a._maxInstanceCount&&(a._maxInstanceCount=o.meshPerAttribute*o.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if("instanceMatrix"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i+0,1),m(i+1,1),m(i+2,1),m(i+3,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i+0,4,s,!1,64,0),t.vertexAttribPointer(i+1,4,s,!1,64,16),t.vertexAttribPointer(i+2,4,s,!1,64,32),t.vertexAttribPointer(i+3,4,s,!1,64,48)}else if("instanceColor"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const o=e.buffer,s=e.type;m(i,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i,3,s,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,u,y),null!==A&&t.bindBuffer(34963,n.get(A).buffer))},reset:y,resetDefaultState:A,dispose:function(){y();for(const t in a){const e=a[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t]}},releaseStatesOfGeometry:function(t){if(void 0===a[t.id])return;const e=a[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete a[t.id]},releaseStatesOfProgram:function(t){for(const e in a){const n=a[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:g}}function un(t,e,n,i){const r=i.isWebGL2;let o;this.setMode=function(t){o=t},this.render=function(e,i){t.drawArrays(o,e,i),n.update(i,o,1)},this.renderInstances=function(i,s,a){if(0===a)return;let l,c;if(r)l=t,c="drawArraysInstanced";else if(l=e.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===l)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");l[c](o,i,s,a),n.update(s,o,a)}}function dn(t,e,n){let i;function r(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const o="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let s=void 0!==n.precision?n.precision:"highp";const a=r(s);a!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",a,"instead."),s=a);const l=!0===n.logarithmicDepthBuffer,c=t.getParameter(34930),h=t.getParameter(35660),u=t.getParameter(3379),d=t.getParameter(34076),p=t.getParameter(34921),f=t.getParameter(36347),m=t.getParameter(36348),g=t.getParameter(36349),v=h>0,y=o||!!e.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:function(){if(void 0!==i)return i;const n=e.get("EXT_texture_filter_anisotropic");return i=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,i},getMaxPrecision:r,precision:s,logarithmicDepthBuffer:l,maxTextures:c,maxVertexTextures:h,maxTextureSize:u,maxCubemapSize:d,maxAttributes:p,maxVertexUniforms:f,maxVaryings:m,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:o?t.getParameter(36183):0}}function pn(t){const e=this;let n=null,i=0,r=!1,o=!1;const s=new Ct,a=new y,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const o=null!==t?t.length:0;let c=null;if(0!==o){if(c=l.value,!0!==r||null===c){const e=i+4*o,r=n.matrixWorldInverse;a.getNormalMatrix(r),(null===c||c.length0){const s=t.getRenderList(),a=t.getRenderTarget(),l=new Je(o.height/2);return l.fromEquirectangularTexture(t,r),e.set(r,l),t.setRenderTarget(a),t.setRenderList(s),r.addEventListener("dispose",i),n(l.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function mn(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case"WEBGL_depth_texture":i=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n("EXT_color_buffer_float"):(n("WEBGL_depth_texture"),n("OES_texture_float"),n("OES_texture_half_float"),n("OES_texture_half_float_linear"),n("OES_standard_derivatives"),n("OES_element_index_uint"),n("OES_vertex_array_object"),n("ANGLE_instanced_arrays")),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float")},get:function(t){const e=n(t);return null===e&&console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e}}}function gn(t,e,n,i){const r={},o=new WeakMap;function s(t){const a=t.target;null!==a.index&&e.remove(a.index);for(const t in a.attributes)e.remove(a.attributes[t]);a.removeEventListener("dispose",s),delete r[a.id];const l=o.get(a);l&&(e.remove(l),o.delete(a)),i.releaseStatesOfGeometry(a),!0===a.isInstancedBufferGeometry&&delete a._maxInstanceCount,n.memory.geometries--}function a(t){const n=[],i=t.index,r=t.attributes.position;let s=0;if(null!==i){const t=i.array;s=i.version;for(let e=0,i=t.length;e65535?le:se)(n,1);a.version=s;const l=o.get(t);l&&e.remove(l),o.set(t,a)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener("dispose",s),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t0)return t;const r=e*n;let o=Rn[r];if(void 0===o&&(o=new Float32Array(r),Rn[r]=o),0!==e){i.toArray(o,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(o,r)}return o}function Nn(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function Pi(t){return t.replace(Ci,Di)}function Di(t,e){const n=sn[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return Pi(n)}const Ii=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Oi=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Ni(t){return t.replace(Oi,Fi).replace(Ii,Bi)}function Bi(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Fi(t,e,n,i)}function Fi(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,p=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Ti).join("\n")}(n),f=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(o),m=r.createProgram();let g,v,y=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(g=[f].filter(Ti).join("\n"),g.length>0&&(g+="\n"),v=[p,f].filter(Ti).join("\n"),v.length>0&&(v+="\n")):(g=[zi(n),"#define SHADER_NAME "+n.shaderName,f,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+d,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#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;","\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(Ti).join("\n"),v=[p,zi(n),"#define SHADER_NAME "+n.shaderName,f,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+d,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.envMap?"#define "+h:"",n.envMap?"#define "+u:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?sn.tonemapping_pars_fragment:"",0!==n.toneMapping?Si("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",sn.encodings_pars_fragment,n.map?Mi("mapTexelToLinear",n.mapEncoding):"",n.matcap?Mi("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?Mi("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?Mi("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?Mi("lightMapTexelToLinear",n.lightMapEncoding):"",Ei("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Ti).join("\n")),s=Pi(s),s=Li(s,n),s=Ri(s,n),a=Pi(a),a=Li(a,n),a=Ri(a,n),s=Ni(s),a=Ni(a),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y="#version 300 es\n",g=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in","300 es"===n.glslVersion?"":"out highp vec4 pc_fragColor;","300 es"===n.glslVersion?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const A=y+v+a,x=xi(r,35633,y+g+s),_=xi(r,35632,A);if(r.attachShader(m,x),r.attachShader(m,_),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,"position"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(x).trim(),n=r.getShaderInfoLog(_).trim();let i=!0,o=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=wi(r,x,"vertex"),n=wi(r,_,"fragment");console.error("THREE.WebGLProgram: shader error: ",r.getError(),"35715",r.getProgramParameter(m,35715),"gl.getProgramInfoLog",t,e,n)}else""!==t?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",t):""!==e&&""!==n||(o=!1);o&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let b,w;return r.deleteShader(x),r.deleteShader(_),this.getUniforms=function(){return void 0===b&&(b=new Ai(r,m)),b},this.getAttributes=function(){return void 0===w&&(w=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,maxBones:b,useVertexTexture:c,morphTargets:r.morphTargets,morphNormals:r.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:s.directional.length,numPointLights:s.point.length,numSpotLights:s.spot.length,numRectAreaLights:s.rectArea.length,numHemiLights:s.hemi.length,numDirLightShadows:s.directionalShadowMap.length,numPointLightShadows:s.pointShadowMap.length,numSpotLightShadows:s.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&f.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:a||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:a||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:a||n.has("EXT_shader_texture_lod"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t1&&i.sort(t||Vi),r.length>1&&r.sort(e||ki)}}}function ji(t){let e=new WeakMap;return{get:function(n,i){const r=e.get(n);let o;return void 0===r?(o=new Wi(t),e.set(n,new WeakMap),e.get(n).set(i,o)):(o=r.get(i),void 0===o&&(o=new Wi(t),r.set(i,o))),o},dispose:function(){e=new WeakMap}}}function Xi(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new T,color:new Yt};break;case"SpotLight":n={position:new T,direction:new T,color:new Yt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new T,color:new Yt,distance:0,decay:0};break;case"HemisphereLight":n={direction:new T,skyColor:new Yt,groundColor:new Yt};break;case"RectAreaLight":n={color:new Yt,position:new T,halfWidth:new T,halfHeight:new T}}return t[e.id]=n,n}}}let qi=0;function Yi(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Qi(t,e){const n=new Xi,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new v,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new T);const o=new T,s=new et,a=new et;return{setup:function(o){let s=0,a=0,l=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let c=0,h=0,u=0,d=0,p=0,f=0,m=0,g=0;o.sort(Yi);for(let t=0,e=o.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=an.LTC_FLOAT_1,r.rectAreaLTC2=an.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=an.LTC_HALF_1,r.rectAreaLTC2=an.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=s,r.ambient[1]=a,r.ambient[2]=l;const v=r.hash;v.directionalLength===c&&v.pointLength===h&&v.spotLength===u&&v.rectAreaLength===d&&v.hemiLength===p&&v.numDirectionalShadows===f&&v.numPointShadows===m&&v.numSpotShadows===g||(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=h,r.hemi.length=p,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=m,r.pointShadowMap.length=m,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=m,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=h,v.spotLength=u,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=f,v.numPointShadows=m,v.numSpotShadows=g,r.version=qi++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(o=new Zi(t,e),n.get(i).push(o)):o=n.get(i)[r],o},dispose:function(){n=new WeakMap}}}function Ki(t){Jt.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}function $i(t){Jt.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new T,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}Ki.prototype=Object.create(Jt.prototype),Ki.prototype.constructor=Ki,Ki.prototype.isMeshDepthMaterial=!0,Ki.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},$i.prototype=Object.create(Jt.prototype),$i.prototype.constructor=$i,$i.prototype.isMeshDistanceMaterial=!0,$i.prototype.copy=function(t){return Jt.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this};function tr(t,e,n){let i=new en;const r=new v,o=new v,s=new M,a=[],l=[],c={},h={0:1,1:0,2:2},u=new Xe({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new v},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),d=u.clone();d.defines.HORIZONTAL_PASS=1;const p=new be;p.setAttribute("position",new ee(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const f=new He(p,u),m=this;function g(n,i){const r=e.update(f);u.uniforms.shadow_pass.value=n.map.texture,u.uniforms.resolution.value=n.mapSize,u.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,u,f,null),d.uniforms.shadow_pass.value=n.mapPass.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,d,f,null)}function y(t,e,n){const i=t<<0|e<<1|n<<2;let r=a[i];return void 0===r&&(r=new Ki({depthPacking:3201,morphTargets:t,skinning:e}),a[i]=r),r}function A(t,e,n){const i=t<<0|e<<1|n<<2;let r=l[i];return void 0===r&&(r=new $i({morphTargets:t,skinning:e}),l[i]=r),r}function x(e,n,i,r,o,s,a){let l=null,u=y,d=e.customDepthMaterial;if(!0===r.isPointLight&&(u=A,d=e.customDistanceMaterial),void 0===d){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0);let r=!1;!0===e.isSkinnedMesh&&(!0===i.skinning?r=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e));l=u(t,r,!0===e.isInstancedMesh)}else l=d;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=3===a?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:h[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=o,l.farDistance=s),l}function _(n,r,o,s,a){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===a)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;ln||r.y>n)&&(r.x>n&&(o.x=Math.floor(n/p.x),r.x=o.x*p.x,u.mapSize.x=o.x),r.y>n&&(o.y=Math.floor(n/p.y),r.y=o.y*p.y,u.mapSize.y=o.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:1006,magFilter:1006,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.mapPass=new E(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:1003,magFilter:1003,format:1023};u.map=new E(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t=1):-1!==T.indexOf("OpenGL ES")&&(S=parseFloat(/^OpenGL ES (\d)/.exec(T)[1]),E=S>=2);let L=null,R={};const C=new M,P=new M;function D(e,n,i){const r=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?g.floorPowerOfTwo:Math.floor,o=i(r*t.width),s=i(r*t.height);void 0===p&&(p=m(o,s));const a=n?m(o,s):p;a.width=o,a.height=s;return a.getContext("2d").drawImage(t,0,0,o,s),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+o+"x"+s+")."),a}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function y(t){return g.isPowerOfTwo(t.width)&&g.isPowerOfTwo(t.height)}function A(t,e){return t.generateMipmaps&&e&&1003!==t.minFilter&&1006!==t.minFilter}function x(e,n,r,o){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log(Math.max(r,o))*Math.LOG2E}function _(n,i,r){if(!1===a)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let o=i;return 6403===i&&(5126===r&&(o=33326),5131===r&&(o=33325),5121===r&&(o=33321)),6407===i&&(5126===r&&(o=34837),5131===r&&(o=34843),5121===r&&(o=32849)),6408===i&&(5126===r&&(o=34836),5131===r&&(o=34842),5121===r&&(o=32856)),33325!==o&&33326!==o&&34842!==o&&34836!==o||e.get("EXT_color_buffer_float"),o}function b(t){return 1003===t||1004===t||1005===t?9728:9729}function w(e){const n=e.target;n.removeEventListener("dispose",w),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&d.delete(n),s.memory.textures--}function M(e){const n=e.target;n.removeEventListener("dispose",M),function(e){const n=i.get(e),r=i.get(e.texture);if(!e)return;void 0!==r.__webglTexture&&t.deleteTexture(r.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(n.__webglFramebuffer[e]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[e]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer),n.__webglMultisampledFramebuffer&&t.deleteFramebuffer(n.__webglMultisampledFramebuffer),n.__webglColorRenderbuffer&&t.deleteRenderbuffer(n.__webglColorRenderbuffer),n.__webglDepthRenderbuffer&&t.deleteRenderbuffer(n.__webglDepthRenderbuffer);i.remove(e.texture),i.remove(e)}(n),s.memory.textures--}let E=0;function S(t,e){const r=i.get(t);if(t.isVideoTexture&&function(t){const e=s.render.frame;d.get(t)!==e&&(d.set(t,e),t.update())}(t),t.version>0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void D(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function T(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;P(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const s=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=s||l?l?i.image[t].image:i.image[t]:v(i.image[t],!1,!0,c);const u=h[0],d=y(u)||a,p=o.convert(i.format),f=o.convert(i.type),m=_(i.internalFormat,p,f);let g;if(C(34067,i,d),s){for(let t=0;t<6;t++){g=h[t].mipmaps;for(let e=0;e1||i.get(o).__currentAnisotropy)&&(t.texParameterf(n,l.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(o.anisotropy,r.getMaxAnisotropy())),i.get(o).__currentAnisotropy=o.anisotropy)}}function P(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",w),e.__webglTexture=t.createTexture(),s.memory.textures++)}function D(e,i,r){let s=3553;i.isDataTexture2DArray&&(s=35866),i.isDataTexture3D&&(s=32879),P(e,i),n.activeTexture(33984+r),n.bindTexture(s,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const l=function(t){return!a&&(1001!==t.wrapS||1001!==t.wrapT||1003!==t.minFilter&&1006!==t.minFilter)}(i)&&!1===y(i.image),c=v(i.image,l,!1,h),u=y(c)||a,d=o.convert(i.format);let p,f=o.convert(i.type),m=_(i.internalFormat,d,f);C(s,i,u);const g=i.mipmaps;if(i.isDepthTexture)m=6402,a?m=1015===i.type?36012:1014===i.type?33190:1020===i.type?35056:33189:1015===i.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),1026===i.format&&6402===m&&1012!==i.type&&1014!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=1012,f=o.convert(i.type)),1027===i.format&&6402===m&&(m=34041,1020!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=1020,f=o.convert(i.type))),n.texImage2D(3553,0,m,c.width,c.height,0,d,f,null);else if(i.isDataTexture)if(g.length>0&&u){for(let t=0,e=g.length;t0&&u){for(let t=0,e=g.length;t=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),E+=1,t},this.resetTextureUnits=function(){E=0},this.setTexture2D=S,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?D(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=T,this.setupRenderTarget=function(e){const r=i.get(e),l=i.get(e.texture);e.addEventListener("dispose",M),l.__webglTexture=t.createTexture(),s.memory.textures++;const c=!0===e.isWebGLCubeRenderTarget,h=!0===e.isWebGLMultisampleRenderTarget,u=y(e)||a;if(!a||1022!==e.texture.format||1015!==e.texture.type&&1016!==e.texture.type||(e.texture.format=1023,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),c){r.__webglFramebuffer=[];for(let e=0;e<6;e++)r.__webglFramebuffer[e]=t.createFramebuffer()}else if(r.__webglFramebuffer=t.createFramebuffer(),h)if(a){r.__webglMultisampledFramebuffer=t.createFramebuffer(),r.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,r.__webglColorRenderbuffer);const n=o.convert(e.texture.format),i=o.convert(e.texture.type),s=_(e.texture.internalFormat,n,i),a=B(e);t.renderbufferStorageMultisample(36161,a,s,e.width,e.height),t.bindFramebuffer(36160,r.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,r.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(r.__webglDepthRenderbuffer=t.createRenderbuffer(),O(r.__webglDepthRenderbuffer,e,!0)),t.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(c){n.bindTexture(34067,l.__webglTexture),C(34067,e.texture,u);for(let t=0;t<6;t++)I(r.__webglFramebuffer[t],e,36064,34069+t);A(e.texture,u)&&x(34067,e.texture,e.width,e.height),n.bindTexture(34067,null)}else n.bindTexture(3553,l.__webglTexture),C(3553,e.texture,u),I(r.__webglFramebuffer,e,36064,3553),A(e.texture,u)&&x(3553,e.texture,e.width,e.height),n.bindTexture(3553,null);e.depthBuffer&&N(e)},this.updateRenderTargetMipmap=function(t){const e=t.texture;if(A(e,y(t)||a)){const r=t.isWebGLCubeRenderTarget?34067:3553,o=i.get(e).__webglTexture;n.bindTexture(r,o),x(r,e,t.width,t.height),n.bindTexture(r,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(a){const n=i.get(e);t.bindFramebuffer(36008,n.__webglMultisampledFramebuffer),t.bindFramebuffer(36009,n.__webglFramebuffer);const r=e.width,o=e.height;let s=16384;e.depthBuffer&&(s|=256),e.stencilBuffer&&(s|=1024),t.blitFramebuffer(0,0,r,o,0,0,r,o,s,9728),t.bindFramebuffer(36160,n.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===F&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),F=!0),t=t.texture),S(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===z&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),z=!0),t=t.texture),T(t,e)}}function ir(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(1009===t)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(1012===t)return 5123;if(1013===t)return 5124;if(1014===t)return 5125;if(1015===t)return 5126;if(1016===t)return i?5131:(n=e.get("OES_texture_half_float"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(1022===t)return 6407;if(1023===t)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(1026===t)return 6402;if(1027===t)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(33776===t||33777===t||33778===t||33779===t){if(n=e.get("WEBGL_compressed_texture_s3tc"),null===n)return null;if(33776===t)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===t)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===t)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===t||35841===t||35842===t||35843===t){if(n=e.get("WEBGL_compressed_texture_pvrtc"),null===n)return null;if(35840===t)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===t)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===t)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===t)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get("WEBGL_compressed_texture_etc1"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===t||37496===t)&&(n=e.get("WEBGL_compressed_texture_etc"),null!==n)){if(37492===t)return n.COMPRESSED_RGB8_ETC2;if(37496===t)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get("WEBGL_compressed_texture_astc"),null!==n?t:null):36492===t?(n=e.get("EXT_texture_compression_bptc"),null!==n?t:null):1020===t?i?34042:(n=e.get("WEBGL_depth_texture"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}function rr(t=[]){Ye.call(this),this.cameras=t}function or(){St.call(this),this.type="Group"}function sr(){this._targetRay=null,this._grip=null,this._hand=null}function ar(t,e){const n=this;let i=null,r=1,o=null,s="local-floor",a=null;const l=[],c=new Map,h=new Ye;h.layers.enable(1),h.viewport=new M;const u=new Ye;u.layers.enable(2),u.viewport=new M;const d=[h,u],p=new rr;p.layers.enable(1),p.layers.enable(2);let f=null,m=null;function g(t){const e=c.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function v(){c.forEach((function(t,e){t.disconnect(e)})),c.clear(),f=null,m=null,t.setFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),w.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function y(t){const e=i.inputSources;for(let t=0;t0&&Et(o,t,e),s.length>0&&Et(s,t,e),!0===t.isScene&&t.onAfterRender(f,t,e),null!==_&&(Z.updateRenderTargetMipmap(_),Z.updateMultisampleRenderTarget(_)),q.buffers.depth.setTest(!0),q.buffers.depth.setMask(!0),q.buffers.color.setMask(!0),q.setPolygonOffset(!1),p.pop(),d=p.length>0?p[p.length-1]:null,u=null},this.setFramebuffer=function(t){y!==t&&null===_&&pt.bindFramebuffer(36160,t),y=t},this.getActiveCubeFace=function(){return A},this.getActiveMipmapLevel=function(){return x},this.getRenderList=function(){return u},this.setRenderList=function(t){u=t},this.getRenderTarget=function(){return _},this.setRenderTarget=function(t,e=0,n=0){_=t,A=e,x=n,t&&void 0===Q.get(t).__webglFramebuffer&&Z.setupRenderTarget(t);let i=y,r=!1;if(t){const n=Q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=n[e],r=!0):i=t.isWebGLMultisampleRenderTarget?Q.get(t).__webglMultisampledFramebuffer:n,S.copy(t.viewport),L.copy(t.scissor),R=t.scissorTest}else S.copy(N).multiplyScalar(D).floor(),L.copy(B).multiplyScalar(D).floor(),R=F;if(b!==i&&(pt.bindFramebuffer(36160,i),b=i),q.viewport(S),q.scissor(L),q.setScissorTest(R),r){const i=Q.get(t.texture);pt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}},this.readRenderTargetPixels=function(t,e,n,i,r,o,s){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let a=Q.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==s&&(a=a[s]),a){let s=!1;a!==b&&(pt.bindFramebuffer(36160,a),s=!0);try{const a=t.texture,l=a.format,c=a.type;if(1023!==l&&ut.convert(l)!==pt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const h=1016===c&&(j.has("EXT_color_buffer_half_float")||X.isWebGL2&&j.has("EXT_color_buffer_float"));if(!(1009===c||ut.convert(c)===pt.getParameter(35738)||1015===c&&(X.isWebGL2||j.has("OES_texture_float")||j.has("WEBGL_color_buffer_float"))||h))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===pt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&pt.readPixels(e,n,i,r,ut.convert(l),ut.convert(c),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&pt.bindFramebuffer(36160,b)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),o=Math.floor(e.image.height*i),s=ut.convert(e.format);Z.setTexture2D(e,0),pt.copyTexImage2D(3553,n,s,t.x,t.y,r,o,0),q.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,o=e.image.height,s=ut.convert(n.format),a=ut.convert(n.type);Z.setTexture2D(n,0),pt.pixelStorei(37440,n.flipY),pt.pixelStorei(37441,n.premultiplyAlpha),pt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?pt.texSubImage2D(3553,i,t.x,t.y,r,o,s,a,e.image.data):e.isCompressedTexture?pt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,s,e.mipmaps[0].data):pt.texSubImage2D(3553,i,t.x,t.y,s,a,e.image),0===i&&n.generateMipmaps&&pt.generateMipmap(3553),q.unbindTexture()},this.initTexture=function(t){Z.setTexture2D(t,0),q.unbindTexture()},this.resetState=function(){q.reset(),dt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function hr(t){cr.call(this,t)}rr.prototype=Object.assign(Object.create(Ye.prototype),{constructor:rr,isArrayCamera:!0}),or.prototype=Object.assign(Object.create(St.prototype),{constructor:or,isGroup:!0}),Object.assign(sr.prototype,{constructor:sr,getHandSpace:function(){return null===this._hand&&(this._hand=new or,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand},getTargetRaySpace:function(){return null===this._targetRay&&(this._targetRay=new or,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1),this._targetRay},getGripSpace:function(){return null===this._grip&&(this._grip=new or,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1),this._grip},dispatchEvent:function(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this},disconnect:function(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this},update:function(t,e,n){let i=null,r=null,o=null;const s=this._targetRay,a=this._grip,l=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(l&&t.hand){o=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new or;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints["index-finger-tip"],r=l.joints["thumb-tip"],s=i.position.distanceTo(r.position),a=.02,c=.005;l.inputState.pinching&&s>a+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&s<=a-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==s&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale))),null!==a&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(a.matrix.fromArray(r.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale)));return null!==s&&(s.visible=null!==i),null!==a&&(a.visible=null!==r),null!==l&&(l.visible=null!==o),this}}),Object.assign(ar.prototype,p.prototype),hr.prototype=Object.assign(Object.create(cr.prototype),{constructor:hr,isWebGL1Renderer:!0});class ur extends St{constructor(){super(),Object.defineProperty(this,"isScene",{value:!0}),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.environment&&(e.object.environment=this.environment.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}function dr(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=g.generateUUID()}Object.defineProperty(dr.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(dr.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:a,point:vr.clone(),uv:Gt.getUV(vr,wr,Mr,Er,Sr,Tr,Lr,new v),face:null,object:this})},copy:function(t){return St.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}});const Pr=new T,Dr=new T;function Ir(){St.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}Ir.prototype=Object.assign(Object.create(St.prototype),{constructor:Ir,isLOD:!0,copy:function(t){St.prototype.copy.call(this,t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){Pr.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(Pr);this.getObjectForDistance(n).raycast(t,e)}},update:function(t){const e=this.levels;if(e.length>1){Pr.setFromMatrixPosition(t.matrixWorld),Dr.setFromMatrixPosition(this.matrixWorld);const n=Pr.distanceTo(Dr)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;is)continue;h.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(h);dt.far||e.push({distance:d,point:c.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else for(let n=0,i=r.count-1;ns)continue;h.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(h);it.far||e.push({distance:i,point:c.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}});const no=new T,io=new T;function ro(t,e){eo.call(this,t,e),this.type="LineSegments"}function oo(t,e){eo.call(this,t,e),this.type="LineLoop"}function so(t){Jt.call(this),this.type="PointsMaterial",this.color=new Yt(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}ro.prototype=Object.assign(Object.create(eo.prototype),{constructor:ro,isLineSegments:!0,computeLineDistances:function(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;tr.far)return;o.push({distance:l,distanceToRay:Math.sqrt(a),point:n,index:e,face:null,object:s})}}function fo(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.format=void 0!==s?s:1022,this.minFilter=void 0!==o?o:1006,this.magFilter=void 0!==r?r:1006,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}function mo(t,e,n,i,r,o,s,a,l,c,h,u){b.call(this,null,o,s,a,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function go(t,e,n,i,r,o,s,a,l){b.call(this,t,e,n,i,r,o,s,a,l),this.needsUpdate=!0}function vo(t,e,n,i,r,o,s,a,l,c){if(1026!==(c=void 0!==c?c:1026)&&1027!==c)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&1026===c&&(n=1012),void 0===n&&1027===c&&(n=1020),b.call(this,null,i,r,o,s,a,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==s?s:1003,this.minFilter=void 0!==a?a:1003,this.flipY=!1,this.generateMipmaps=!1}uo.prototype=Object.assign(Object.create(St.prototype),{constructor:uo,isPoints:!0,copy:function(t){return St.prototype.copy.call(this,t),this.material=t.material,this.geometry=t.geometry,this},raycast:function(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold;if(null===n.boundingSphere&&n.computeBoundingSphere(),co.copy(n.boundingSphere),co.applyMatrix4(i),co.radius+=r,!1===t.ray.intersectsSphere(co))return;ao.copy(i).invert(),lo.copy(t.ray).applyMatrix4(ao);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),s=o*o;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position;if(null!==r){const n=r.array;for(let r=0,a=n.length;r0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}),fo.prototype=Object.assign(Object.create(b.prototype),{constructor:fo,clone:function(){return new this.constructor(this.image).copy(this)},isVideoTexture:!0,update:function(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),mo.prototype=Object.create(b.prototype),mo.prototype.constructor=mo,mo.prototype.isCompressedTexture=!0,go.prototype=Object.create(b.prototype),go.prototype.constructor=go,go.prototype.isCanvasTexture=!0,vo.prototype=Object.create(b.prototype),vo.prototype.constructor=vo,vo.prototype.isDepthTexture=!0;new T,new T,new T,new Gt;const yo=function(t,e,n){n=n||2;const i=e&&e.length,r=i?e[0]*n:t.length;let o=Ao(t,0,r,n,!0);const s=[];if(!o||o.next===o.prev)return s;let a,l,c,h,u,d,p;if(i&&(o=function(t,e,n,i){const r=[];let o,s,a,l,c;for(o=0,s=e.length;o80*n){a=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-a,h-l),p=0!==p?1/p:0}return _o(o,s,n,a,l,p),s};function Ao(t,e,n,i,r){let o,s;if(r===function(t,e,n,i){let r=0;for(let o=e,s=n-i;o0)for(o=e;o=e;o-=i)s=Ho(o,t[o],t[o+1],s);return s&&Oo(s,s.next)&&(Go(s),s=s.next),s}function xo(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!Oo(i,i.next)&&0!==Io(i.prev,i,i.next))i=i.next;else{if(Go(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function _o(t,e,n,i,r,o,s){if(!t)return;!s&&o&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=Ro(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,o,s,a,l,c=1;do{for(n=t,t=null,o=null,s=0;n;){for(s++,i=n,a=0,e=0;e0||l>0&&i;)0!==a&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,a--):(r=i,i=i.nextZ,l--),o?o.nextZ=r:t=r,r.prevZ=o,o=r;n=i}o.nextZ=null,c*=2}while(s>1)}(r)}(t,i,r,o);let a,l,c=t;for(;t.prev!==t.next;)if(a=t.prev,l=t.next,o?wo(t,i,r,o):bo(t))e.push(a.i/n),e.push(t.i/n),e.push(l.i/n),Go(t),t=l.next,c=l.next;else if((t=l)===c){s?1===s?_o(t=Mo(xo(t),e,n),e,n,i,r,o,2):2===s&&Eo(t,e,n,i,r,o):_o(xo(t),e,n,i,r,o,1);break}}function bo(t){const e=t.prev,n=t,i=t.next;if(Io(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(Po(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&Io(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function wo(t,e,n,i){const r=t.prev,o=t,s=t.next;if(Io(r,o,s)>=0)return!1;const a=r.xo.x?r.x>s.x?r.x:s.x:o.x>s.x?o.x:s.x,h=r.y>o.y?r.y>s.y?r.y:s.y:o.y>s.y?o.y:s.y,u=Ro(a,l,e,n,i),d=Ro(c,h,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p&&p.z>=u&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,p.x,p.y)&&Io(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&Po(r.x,r.y,o.x,o.y,s.x,s.y,f.x,f.y)&&Io(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function Mo(t,e,n){let i=t;do{const r=i.prev,o=i.next.next;!Oo(r,o)&&No(r,i,i.next,o)&&zo(r,o)&&zo(o,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(o.i/n),Go(i),Go(i.next),i=t=o),i=i.next}while(i!==t);return xo(i)}function Eo(t,e,n,i,r,o){let s=t;do{let t=s.next.next;for(;t!==s.prev;){if(s.i!==t.i&&Do(s,t)){let a=Uo(s,t);return s=xo(s,s.next),a=xo(a,a.next),_o(s,e,n,i,r,o),void _o(a,e,n,i,r,o)}t=t.next}s=s.next}while(s!==t)}function So(t,e){return t.x-e.x}function To(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let o,s=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>s){if(s=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}o=n.x=n.x&&n.x>=l&&i!==n.x&&Po(ro.x||n.x===o.x&&Lo(o,n)))&&(o=n,u=h)),n=n.next}while(n!==a);return o}(t,e)){const n=Uo(e,t);xo(e,e.next),xo(n,n.next)}}function Lo(t,e){return Io(t.prev,t,e.prev)<0&&Io(e.next,t,t.next)<0}function Ro(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Co(t){let e=t,n=t;do{(e.x=0&&(t-s)*(i-a)-(n-s)*(e-a)>=0&&(n-s)*(o-a)-(r-s)*(i-a)>=0}function Do(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&No(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(zo(t,e)&&zo(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&r<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(Io(t.prev,t,e.prev)||Io(t,e.prev,e))||Oo(t,e)&&Io(t.prev,t,t.next)>0&&Io(e.prev,e,e.next)>0)}function Io(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Oo(t,e){return t.x===e.x&&t.y===e.y}function No(t,e,n,i){const r=Fo(Io(t,e,n)),o=Fo(Io(t,e,i)),s=Fo(Io(n,i,t)),a=Fo(Io(n,i,e));return r!==o&&s!==a||(!(0!==r||!Bo(t,n,e))||(!(0!==o||!Bo(t,i,e))||(!(0!==s||!Bo(n,t,i))||!(0!==a||!Bo(n,e,i)))))}function Bo(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function Fo(t){return t>0?1:t<0?-1:0}function zo(t,e){return Io(t.prev,t,t.next)<0?Io(t,e,t.next)>=0&&Io(t,t.prev,e)>=0:Io(t,e,t.prev)<0||Io(t,t.next,e)<0}function Uo(t,e){const n=new Vo(t.i,t.x,t.y),i=new Vo(e.i,e.x,e.y),r=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,o.next=i,i.prev=o,i}function Ho(t,e,n,i){const r=new Vo(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Go(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Vo(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}const ko={area:function(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function jo(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-a/u,f=e.y+s/u,m=((n.x-c/d-p)*c-(n.y+l/d-f)*l)/(s*c-a*l);i=p+s*m-t.x,r=f+a*m-t.y;const g=i*i+r*r;if(g<=2)return new v(i,r);o=Math.sqrt(g/2)}else{let t=!1;s>Number.EPSILON?l>Number.EPSILON&&(t=!0):s<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(c)&&(t=!0),t?(i=-a,r=s,o=Math.sqrt(h)):(i=s,r=a,o=Math.sqrt(h/2))}return new v(i/o,r/o)}const I=[];for(let t=0,e=L.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=L.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=a+2*p;t=0?(t(i-a,p,h),u.subVectors(c,h)):(t(i+a,p,h),u.subVectors(h,c)),p-a>=0?(t(i,p-a,h),d.subVectors(c,h)):(t(i,p+a,h),d.subVectors(h,c)),l.crossVectors(u,d).normalize(),o.push(l.x,l.y,l.z),s.push(i,p)}}for(let t=0;t0)&&d.push(e,r,l),(t!==n-1||a=i)){l.push(e.times[t]);for(let n=0;no.tracks[t].times[0]&&(a=o.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+a,e=t+l-a;d=ls.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=a,n=l-a;t.evaluate(o),d=ls.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new S).fromArray(d).normalize().conjugate().toArray(d)}const p=s.times.length;for(let t=0;t=r)break t;{const s=e[1];t=r)break e}o=n,n=0}}for(;n>>1;te;)--o;if(++o,0!==r||o!==i){r>=o&&(o=Math.max(o,1),r=o-1);const t=this.getValueSize();this.times=ls.arraySlice(n,r,o),this.values=ls.arraySlice(this.values,r*t,o*t)}return this},validate:function(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let o=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==o&&o>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,o),t=!1;break}o=i}if(void 0!==i&&ls.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t},optimize:function(){const t=ls.arraySlice(this.times),e=ls.arraySlice(this.values),n=this.getValueSize(),i=2302===this.getInterpolation(),r=t.length-1;let o=1;for(let s=1;s0){t[o]=t[r];for(let t=r*n,i=o*n,s=0;s!==n;++s)e[i+s]=e[t+s];++o}return o!==t.length?(this.times=ls.arraySlice(t,0,o),this.values=ls.arraySlice(e,0,o*n)):(this.times=t,this.values=e),this},clone:function(){const t=ls.arraySlice(this.times,0),e=ls.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}),fs.prototype=Object.assign(Object.create(ps.prototype),{constructor:fs,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),ms.prototype=Object.assign(Object.create(ps.prototype),{constructor:ms,ValueTypeName:"color"}),gs.prototype=Object.assign(Object.create(ps.prototype),{constructor:gs,ValueTypeName:"number"}),vs.prototype=Object.assign(Object.create(cs.prototype),{constructor:vs,interpolate_:function(t,e,n,i){const r=this.resultBuffer,o=this.sampleValues,s=this.valueSize,a=(n-e)/(i-e);let l=t*s;for(let t=l+s;l!==t;l+=4)S.slerpFlat(r,0,o,l-s,o,l,a);return r}}),ys.prototype=Object.assign(Object.create(ps.prototype),{constructor:ys,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(t){return new vs(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),As.prototype=Object.assign(Object.create(ps.prototype),{constructor:As,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),xs.prototype=Object.assign(Object.create(ps.prototype),{constructor:xs,ValueTypeName:"vector"}),Object.assign(_s,{parse:function(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(bs(n[t]).scale(i));const r=new _s(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r},toJSON:function(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(ps.toJSON(n[t]));return i},CreateFromMorphTargetSequence:function(t,e,n,i){const r=e.length,o=[];for(let t=0;t1){const t=o[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const o=[];for(const t in i)o.push(_s.CreateFromMorphTargetSequence(t,i[t],e,n));return o},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const o=[],s=[];ls.flattenJSON(n,o,s,i),0!==o.length&&r.push(new t(e,o,s))}},i=[],r=t.name||"default",o=t.fps||30,s=t.blendMode;let a=t.length||-1;const l=t.hierarchy||[];for(let t=0;t0||0===t.search(/^data\:image\/jpeg/);r.format=i?1022:1023,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}),Object.assign(Os.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){const t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let o=1;o<=t;o++)n=this.getPoint(o/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){const n=this.getLengths();let i=0;const r=n.length;let o;o=e||t*n[r-1];let s,a=0,l=r-1;for(;a<=l;)if(i=Math.floor(a+(l-a)/2),s=n[i]-o,s<0)a=i+1;else{if(!(s>0)){l=i;break}l=i-1}if(i=l,n[i]===o)return i/(r-1);const c=n[i];return(i+(o-c)/(n[i+1]-c))/(r-1)},getTangent:function(t,e){let n=t-1e-4,i=t+1e-4;n<0&&(n=0),i>1&&(i=1);const r=this.getPoint(n),o=this.getPoint(i),s=e||(r.isVector2?new v:new T);return s.copy(o).sub(r).normalize(),s},getTangentAt:function(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)},computeFrenetFrames:function(t,e){const n=new T,i=[],r=[],o=[],s=new T,a=new et;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new T),i[e].normalize()}r[0]=new T,o[0]=new T;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),s.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],s),o[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),o[e]=o[e-1].clone(),s.crossVectors(i[e-1],i[e]),s.length()>Number.EPSILON){s.normalize();const t=Math.acos(g.clamp(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(a.makeRotationAxis(s,t))}o[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(g.clamp(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(s.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(a.makeRotationAxis(i[n],e*n)),o[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:o}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),Ns.prototype=Object.create(Os.prototype),Ns.prototype.constructor=Ns,Ns.prototype.isEllipseCurve=!0,Ns.prototype.getPoint=function(t,e){const n=e||new v,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const o=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?s=i[(l-1)%r]:(zs.subVectors(i[0],i[1]).add(i[0]),s=zs);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:o+1],h=i[o>i.length-3?i.length-1:o+2];return n.set(ks(s,a.x,l.x,c.x,h.x),ks(s,a.y,l.y,c.y,h.y)),n},Ks.prototype.copy=function(t){Os.prototype.copy.call(this,t),this.points=[];for(let e=0,n=t.points.length;e=e){const t=n[i]-e,r=this.curves[i],o=r.getLength(),s=0===o?0:1-t/o;return r.getPointAt(s)}i++}return null},getLength:function(){const t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e},copy:function(t){Os.prototype.copy.call(this,t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this},copy:function(t){return ta.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){const t=ta.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return ta.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),na.prototype=Object.assign(Object.create(ea.prototype),{constructor:na,getPointsHoles:function(t){const e=[];for(let n=0,i=this.holes.length;n0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new Yt).setHex(r.value);break;case"v2":i.uniforms[e].value=(new v).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new T).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new M).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new y).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new et).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new v).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new v).fromArray(t.clearcoatNormalScale)),void 0!==t.transmission&&(i.transmission=t.transmission),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),i},setTextures:function(t){return this.textures=t,this}});const ya=function(t){const e=t.lastIndexOf("/");return-1===e?"./":t.substr(0,e+1)};function Aa(){be.call(this),this.type="InstancedBufferGeometry",this.instanceCount=1/0}function xa(t,e,n,i){"number"==typeof n&&(i=n,n=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),ee.call(this,t,e,n),this.meshPerAttribute=i||1}function _a(t){Es.call(this,t)}function ba(t){"undefined"==typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),"undefined"==typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),Es.call(this,t),this.options={premultiplyAlpha:"none"}}function wa(){this.type="ShapePath",this.color=new Yt,this.subPaths=[],this.currentPath=null}Aa.prototype=Object.assign(Object.create(be.prototype),{constructor:Aa,isInstancedBufferGeometry:!0,copy:function(t){return be.prototype.copy.call(this,t),this.instanceCount=t.instanceCount,this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){const t=be.prototype.toJSON.call(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}),xa.prototype=Object.assign(Object.create(ee.prototype),{constructor:xa,isInstancedBufferAttribute:!0,copy:function(t){return ee.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this},toJSON:function(){const t=ee.prototype.toJSON.call(this);return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}),_a.prototype=Object.assign(Object.create(Es.prototype),{constructor:_a,load:function(t,e,n,i){const r=this,o=new Ts(r.manager);o.setPath(r.path),o.setRequestHeader(r.requestHeader),o.setWithCredentials(r.withCredentials),o.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)},parse:function(t){const e={},n={};function i(t,i){if(void 0!==e[i])return e[i];const r=t.interleavedBuffers[i],o=function(t,e){if(void 0!==n[e])return n[e];const i=t.arrayBuffers[e],r=new Uint32Array(i).buffer;return n[e]=r,r}(t,r.buffer),s=new dr(fe(r.type,o),r.stride);return s.uuid=r.uuid,e[i]=s,s}const r=t.isInstancedBufferGeometry?new Aa:new be,o=t.data.index;if(void 0!==o){const t=fe(o.type,o.array);r.setIndex(new ee(t,1))}const s=t.data.attributes;for(const e in s){const n=s[e];let o;if(n.isInterleavedBufferAttribute){o=new fr(i(t.data,n.data),n.itemSize,n.offset,n.normalized)}else{const t=fe(n.type,n.array);o=new(n.isInstancedBufferAttribute?xa:ee)(t,n.itemSize,n.normalized)}void 0!==n.name&&(o.name=n.name),r.setAttribute(e,o)}const a=t.data.morphAttributes;if(a)for(const e in a){const n=a[e],o=[];for(let e=0,r=n.length;eNumber.EPSILON){if(l<0&&(n=e[o],a=-a,s=e[r],l=-l),t.ys.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-a*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(s.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=s.x)return!0}}return i}const r=ko.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===e)return n(o);let s,a,l;const c=[];if(1===o.length)return a=o[0],l=new na,l.curves=a.curves,c.push(l),c;let h=!r(o[0].getPoints());h=t?!h:h;const u=[],d=[];let p,f,m=[],g=0;d[g]=void 0,m[g]=[];for(let e=0,n=o.length;e1){let t=!1;const e=[];for(let t=0,e=d.length;t0&&(t||(m=u))}for(let t=0,e=d.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){s.setValue(n,i);break}},saveOriginalState:function(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0},restoreOriginalState:function(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)},_setAdditiveIdentityNumeric:function(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]},_slerp:function(t,e,n,i){S.slerpFlat(t,e,t,e,t,n,i)},_slerpAdditive:function(t,e,n,i,r){const o=this._workIndex*r;S.multiplyQuaternionsFlat(t,o,t,e,t,n),S.slerpFlat(t,e,t,e,t,o,i)},_lerp:function(t,e,n,i,r){const o=1-i;for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]*o+t[n+s]*i}},_lerpAdditive:function(t,e,n,i,r){for(let o=0;o!==r;++o){const r=e+o;t[r]=t[r]+t[n+o]*i}}});const Na=new RegExp("[\\[\\]\\.:\\/]","g"),Ba="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",Fa=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]"),za=/(WCOD+)?/.source.replace("WCOD",Ba),Ua=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ha=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ga=new RegExp("^"+Fa+za+Ua+Ha+"$"),Va=["material","materials","bones"];function ka(t,e,n){const i=n||Wa.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}function Wa(t,e,n){this.path=e,this.parsedPath=n||Wa.parseTrackName(e),this.node=Wa.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}Object.assign(ka.prototype,{getValue:function(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)},setValue:function(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)},bind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()},unbind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}}),Object.assign(Wa,{Composite:ka,create:function(t,e,n){return t&&t.isAnimationObjectGroup?new Wa.Composite(t,e,n):new Wa(t,e,n)},sanitizeNodeName:function(t){return t.replace(/\s/g,"_").replace(Na,"")},parseTrackName:function(t){const e=Ga.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Va.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n},findNode:function(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const o=r++,c=t[o];e[c.uuid]=l,t[l]=c,e[a]=o,t[o]=s;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[o],r=e[l];e[l]=i,e[o]=r}}}this.nCachedObjects_=r},uncache:function(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,o=t.length;for(let s=0,a=arguments.length;s!==a;++s){const a=arguments[s].uuid,l=e[a];if(void 0!==l)if(delete e[a],l0&&(e[s.uuid]=l),t[l]=s,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r},subscribe_:function(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const o=this._paths,s=this._parsedPaths,a=this._objects,l=a.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,o.push(t),s.push(e),r.push(h);for(let n=c,i=a.length;n!==i;++n){const i=a[n];h[n]=new Wa(i,t,e)}return h},unsubscribe_:function(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,o=this._bindings,s=o.length-1,a=o[s];e[t[s]]=n,o[n]=a,o.pop(),r[n]=r[s],r.pop(),i[n]=i[s],i.pop()}}});class ja{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,o=r.length,s=new Array(o),a={endingStart:2400,endingEnd:2400};for(let t=0;t!==o;++t){const e=r[t].createInterpolant(null);s[t]=e,e.settings=a}this._interpolantSettings=a,this._interpolants=s,this._propertyBindings=new Array(o),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,o=n/i;t.warp(1,r,e),this.warp(o,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,o=this.timeScale;let s=this._timeScaleInterpolant;null===s&&(s=i._lendControlInterpolant(),this._timeScaleInterpolant=s);const a=s.parameterPositions,l=s.sampleValues;return a[0]=r,a[1]=r+n,l[0]=t/o,l[1]=e/o,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const o=this._updateTime(e),s=this._updateWeight(t);if(s>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(o),e[n].accumulateAdditive(s);break;case 2500:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(o),e[n].accumulate(i,s)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const o=2202===n;if(0===t)return-1===r?i:o&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const s=this.repetitions-r;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){const e=t<0;this._setEndings(e,!e,o)}else this._setEndings(!1,!1,o);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(o&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=2401,i.endingEnd=2401):(i.endingStart=t?this.zeroSlopeAtStart?2401:2400:2402,i.endingEnd=e?this.zeroSlopeAtEnd?2401:2400:2402)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let o=this._weightInterpolant;null===o&&(o=i._lendControlInterpolant(),this._weightInterpolant=o);const s=o.parameterPositions,a=o.sampleValues;return s[0]=r,a[0]=e,s[1]=r+t,a[1]=n,this}}function Xa(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}Xa.prototype=Object.assign(Object.create(p.prototype),{constructor:Xa,_bindAction:function(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,o=t._propertyBindings,s=t._interpolants,a=n.uuid,l=this._bindingsByRootAndName;let c=l[a];void 0===c&&(c={},l[a]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)o[t]=h;else{if(h=o[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,a,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new Oa(Wa.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,a,l),o[t]=h}s[t].resultBuffer=h.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this},update:function(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),o=this._accuIndex^=1;for(let s=0;s!==n;++s){e[s]._update(i,t,r,o)}const s=this._bindings,a=this._nActiveBindings;for(let t=0;t!==a;++t)s[t].apply(o);return this},setTime:function(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new v),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new v),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return tl.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}.prototype,{center:function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},size:function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(C.prototype,{center:function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionSphere:function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},size:function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(X.prototype,{empty:function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()}}),en.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},class{constructor(t,e){this.start=void 0!==t?t:new T,this.end=void 0!==e?e:new T}set(t,e){return this.start.copy(t),this.end.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new T),t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new T),t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new T),this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){el.subVectors(t,this.start),nl.subVectors(this.end,this.start);const n=nl.dot(nl);let i=nl.dot(el)/n;return e&&(i=g.clamp(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new T),this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}}.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},Object.assign(g,{random16:function(){return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."),Math.random()},nearestPowerOfTwo:function(t){return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."),g.floorPowerOfTwo(t)},nextPowerOfTwo:function(t){return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."),g.ceilPowerOfTwo(t)}}),Object.assign(y.prototype,{flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},getInverse:function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Object.assign(et.prototype,{extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},getPosition:function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new T).setFromMatrixColumn(this,3)},setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},crossVector:function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},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.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(t,e,n,i,r,o){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,o)},getInverse:function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Ct.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},Object.assign(S.prototype,{multiplyVector3:function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},inverse:function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()}}),Object.assign(tt.prototype,{isIntersectionBox:function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionPlane:function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},isIntersectionSphere:function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)}}),Object.assign(Gt.prototype,{area:function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},barycoordFromPoint:function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},midpoint:function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},normal:function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},plane:function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)}}),Object.assign(Gt,{barycoordFromPoint:function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),Gt.getBarycoord(t,e,n,i,r)},normal:function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),Gt.getNormal(t,e,n,i)}}),Object.assign(na.prototype,{extractAllPoints:function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},extrude:function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Xo(this,t)},makeGeometry:function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Qo(this,t)}}),Object.assign(v.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(T.prototype,{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(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},applyProjection:function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},fromAttribute:function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(M.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},lengthManhattan:function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(St.prototype,{getChildByName:function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},applyMatrix:function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(St.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.assign(He.prototype,{setDrawMode:function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}),Object.defineProperties(He.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),Object.defineProperties(Ir.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Object.defineProperty(kr.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}}),Ur.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Object.defineProperty(Os.prototype,"__arcLengthDivisions",{get:function(){return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions},set:function(t){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions=t}}),Ye.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(ia.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(ee.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),35048===this.usage},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(35048)}}}),Object.assign(ee.prototype,{setDynamic:function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},setArray:function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(be.prototype,{addIndex:function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},addAttribute:function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new ee(arguments[1],arguments[2])))},addDrawCall:function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},removeAttribute:function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},applyMatrix:function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(be.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.defineProperties(Aa.prototype,{maxInstancedCount:{get:function(){return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount},set:function(t){console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount=t}}}),Object.defineProperties(Za.prototype,{linePrecision:{get:function(){return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold},set:function(t){console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold=t}}}),Object.defineProperties(dr.prototype,{dynamic:{get:function(){return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),35048===this.usage},set:function(t){console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),this.setUsage(t)}}}),Object.assign(dr.prototype,{setDynamic:function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?35048:35044),this},setArray:function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(Xo.prototype,{getArrays:function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")}}),Object.assign(ur.prototype,{dispose:function(){console.error("THREE.Scene: .dispose() has been removed.")}}),Object.defineProperties(qa.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(Jt.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Yt}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}}}),Object.defineProperties(es.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(ts.prototype,{transparency:{get:function(){return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission},set:function(t){console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission=t}}}),Object.defineProperties(Xe.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),Object.assign(cr.prototype,{clearTarget:function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},animate:function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},getCurrentRenderTarget:function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},getMaxAnisotropy:function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},getPrecision:function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},resetGLState:function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},allocTextureUnit:function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},setTexture:function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},setTexture2D:function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},setTextureCube:function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},getActiveMipMapLevel:function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()}}),Object.defineProperties(cr.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?3001:3e3}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}}),Object.defineProperties(tr.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(E.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),Object.defineProperties(class extends St{constructor(t){super(),this.type="Audio",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn("THREE.Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void console.warn("THREE.Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0?n=t[0]:e&&e("VR input not available.")})).catch((function(){console.warn("THREE.VRControls: Unable to get VR Displays")})),this.scale=1,this.standing=!1,this.userHeight=1.6,this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VRControls: getVRDisplays() is being deprecated."),i},this.getStandingMatrix=function(){return o},this.update=function(){var e;n&&(n.getFrameData?(n.getFrameData(s),e=s.pose):n.getPose&&(e=n.getPose()),null!==e.orientation&&t.quaternion.fromArray(e.orientation),null!==e.position?t.position.fromArray(e.position):t.position.set(0,0,0),this.standing&&(n.stageParameters?(t.updateMatrix(),o.fromArray(n.stageParameters.sittingToStandingTransform),t.applyMatrix(o)):t.position.setY(t.position.y+this.userHeight)),t.position.multiplyScalar(r.scale))},this.dispose=function(){n=null}},hl=function(t,e){var n,i,r,o,s=new T,a=new T,l=new et,c=new et,h=new et,u=null;"VRFrameData"in window&&(u=new window.VRFrameData),navigator.getVRDisplays&&navigator.getVRDisplays().then((function(t){i=t,t.length>0?n=t[0]:e&&e("HMD not available")})).catch((function(){console.warn("THREE.VREffect: Unable to get VR Displays")})),this.isPresenting=!1;var d=this,p=t.getSize(),f=!1,m=t.getPixelRatio();this.getVRDisplay=function(){return n},this.setVRDisplay=function(t){n=t},this.getVRDisplays=function(){return console.warn("THREE.VREffect: getVRDisplays() is being deprecated."),i},this.setSize=function(e,i,r){if(p={width:e,height:i},f=r,d.isPresenting){var o=n.getEyeParameters("left");t.setPixelRatio(1),t.setSize(2*o.renderWidth,o.renderHeight,!1)}else t.setPixelRatio(m),t.setSize(e,i,r)};var g=t.domElement,v=[0,0,.5,1],y=[.5,0,.5,1];function A(){var e=d.isPresenting;if(d.isPresenting=void 0!==n&&n.isPresenting,d.isPresenting){var i=n.getEyeParameters("left"),r=i.renderWidth,o=i.renderHeight;e||(m=t.getPixelRatio(),p=t.getSize(),t.setPixelRatio(1),t.setSize(2*r,o,!1))}else e&&(t.setPixelRatio(m),t.setSize(p.width,p.height,f))}window.addEventListener("vrdisplaypresentchange",A,!1),this.setFullScreen=function(t){return new Promise((function(e,i){void 0!==n?d.isPresenting!==t?e(t?n.requestPresent([{source:g}]):n.exitPresent()):e():i(new Error("No VR hardware found."))}))},this.requestPresent=function(){return this.setFullScreen(!0)},this.exitPresent=function(){return this.setFullScreen(!1)},this.requestAnimationFrame=function(t){return void 0!==n?n.requestAnimationFrame(t):window.requestAnimationFrame(t)},this.cancelAnimationFrame=function(t){void 0!==n?n.cancelAnimationFrame(t):window.cancelAnimationFrame(t)},this.submitFrame=function(){void 0!==n&&d.isPresenting&&n.submitFrame()},this.autoSubmitFrame=!0;var x=new Ye;x.layers.enable(1);var _=new Ye;_.layers.enable(2),this.render=function(e,i,p,f){if(n&&d.isPresenting){var m=e.autoUpdate;m&&(e.updateMatrixWorld(),e.autoUpdate=!1),Array.isArray(e)&&(console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead."),e=e[0]);var g,A,E=t.getSize(),S=n.getLayers();if(S.length){var T=S[0];g=null!==T.leftBounds&&4===T.leftBounds.length?T.leftBounds:v,A=null!==T.rightBounds&&4===T.rightBounds.length?T.rightBounds:y}else g=v,A=y;if(r={x:Math.round(E.width*g[0]),y:Math.round(E.height*g[1]),width:Math.round(E.width*g[2]),height:Math.round(E.height*g[3])},o={x:Math.round(E.width*A[0]),y:Math.round(E.height*A[1]),width:Math.round(E.width*A[2]),height:Math.round(E.height*A[3])},p?(t.setRenderTarget(p),p.scissorTest=!0):(t.setRenderTarget(null),t.setScissorTest(!0)),(t.autoClear||f)&&t.clear(),null===i.parent&&i.updateMatrixWorld(),i.matrixWorld.decompose(x.position,x.quaternion,x.scale),_.position.copy(x.position),_.quaternion.copy(x.quaternion),_.scale.copy(x.scale),n.getFrameData)n.depthNear=i.near,n.depthFar=i.far,n.getFrameData(u),x.projectionMatrix.elements=u.leftProjectionMatrix,_.projectionMatrix.elements=u.rightProjectionMatrix,function(t){t.pose.orientation?(b.fromArray(t.pose.orientation),l.makeRotationFromQuaternion(b)):l.identity();t.pose.position&&(w.fromArray(t.pose.position),l.setPosition(w));c.fromArray(t.leftViewMatrix),c.multiply(l),h.fromArray(t.rightViewMatrix),h.multiply(l),c.getInverse(c),h.getInverse(h)}(u),x.updateMatrix(),x.matrix.multiply(c),x.matrix.decompose(x.position,x.quaternion,x.scale),_.updateMatrix(),_.matrix.multiply(h),_.matrix.decompose(_.position,_.quaternion,_.scale);else{var L=n.getEyeParameters("left"),R=n.getEyeParameters("right");x.projectionMatrix=M(L.fieldOfView,!0,i.near,i.far),_.projectionMatrix=M(R.fieldOfView,!0,i.near,i.far),s.fromArray(L.offset),a.fromArray(R.offset),x.translateOnAxis(s,x.scale.x),_.translateOnAxis(a,_.scale.x)}return p?(p.viewport.set(r.x,r.y,r.width,r.height),p.scissor.set(r.x,r.y,r.width,r.height)):(t.setViewport(r.x,r.y,r.width,r.height),t.setScissor(r.x,r.y,r.width,r.height)),t.render(e,x,p,f),p?(p.viewport.set(o.x,o.y,o.width,o.height),p.scissor.set(o.x,o.y,o.width,o.height)):(t.setViewport(o.x,o.y,o.width,o.height),t.setScissor(o.x,o.y,o.width,o.height)),t.render(e,_,p,f),p?(p.viewport.set(0,0,E.width,E.height),p.scissor.set(0,0,E.width,E.height),p.scissorTest=!1,t.setRenderTarget(null)):(t.setViewport(0,0,E.width,E.height),t.setScissorTest(!1)),m&&(e.autoUpdate=!0),void(d.autoSubmitFrame&&d.submitFrame())}t.render(e,i,p,f)},this.dispose=function(){window.removeEventListener("vrdisplaypresentchange",A,!1)};var b=new S,w=new T;function M(t,e,n,i){var r=Math.PI/180;return function(t,e,n,i){n=void 0===n?.01:n,i=void 0===i?1e4:i;var r=(e=void 0===e||e)?-1:1,o=new et,s=o.elements,a=function(t){var e=2/(t.leftTan+t.rightTan),n=(t.leftTan-t.rightTan)*e*.5,i=2/(t.upTan+t.downTan);return{scale:[e,i],offset:[n,(t.upTan-t.downTan)*i*.5]}}(t);return s[0]=a.scale[0],s[1]=0,s[2]=a.offset[0]*r,s[3]=0,s[4]=0,s[5]=a.scale[1],s[6]=-a.offset[1]*r,s[7]=0,s[8]=0,s[9]=0,s[10]=i/(n-i)*-r,s[11]=i*n/(n-i),s[12]=0,s[13]=0,s[14]=r,s[15]=0,o.transpose(),o}({upTan:Math.tan(t.upDegrees*r),downTan:Math.tan(t.downDegrees*r),leftTan:Math.tan(t.leftDegrees*r),rightTan:Math.tan(t.rightDegrees*r)},e,n,i)}},ul=function(t,e){var n,i,r,o,s;this.object=t,this.domElement=void 0!==e?e:document,this.enabled=!0,this.target=new T,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.25,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!1,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={ORBIT:h,ZOOM:u,PAN:d},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return y.phi},this.getAzimuthalAngle=function(){return y.theta},this.saveState=function(){a.target0.copy(a.target),a.position0.copy(a.object.position),a.zoom0=a.object.zoom},this.reset=function(){a.target.copy(a.target0),a.object.position.copy(a.position0),a.object.zoom=a.zoom0,a.object.updateProjectionMatrix(),a.dispatchEvent(l),a.update(),m=f.NONE},this.update=(n=new T,i=(new S).setFromUnitVectors(t.up,new T(0,1,0)),r=i.clone().inverse(),o=new T,s=new S,function(){var t=a.object.position;return n.copy(t).sub(a.target),n.applyQuaternion(i),y.setFromVector3(n),a.autoRotate&&m===f.NONE&&a.rotateLeft(2*Math.PI/60/60*a.autoRotateSpeed),y.theta+=A.theta,y.phi+=A.phi,y.theta=Math.max(a.minAzimuthAngle,Math.min(a.maxAzimuthAngle,y.theta)),y.phi=Math.max(a.minPolarAngle,Math.min(a.maxPolarAngle,y.phi)),y.makeSafe(),y.radius*=x,y.radius=Math.max(a.minDistance,Math.min(a.maxDistance,y.radius)),a.target.add(_),n.setFromSpherical(y),n.applyQuaternion(r),t.copy(a.target).add(n),a.object.lookAt(a.target),!0===a.enableDamping?(A.theta*=1-a.dampingFactor,A.phi*=1-a.dampingFactor,_.multiplyScalar(1-a.dampingFactor)):(A.set(0,0,0),_.set(0,0,0)),x=1,!!(b||o.distanceToSquared(a.object.position)>g||8*(1-s.dot(a.object.quaternion))>g)&&(a.dispatchEvent(l),o.copy(a.object.position),s.copy(a.object.quaternion),b=!1,!0)}),this.dispose=function(){a.domElement.removeEventListener("contextmenu",Q,!1),a.domElement.removeEventListener("mousedown",G,!1),a.domElement.removeEventListener("wheel",W,!1),a.domElement.removeEventListener("touchstart",X,!1),a.domElement.removeEventListener("touchend",Y,!1),a.domElement.removeEventListener("touchmove",q,!1),document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),window.removeEventListener("keydown",j,!1)};var a=this,l={type:"change"},c={type:"start"},p={type:"end"},f={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY_PAN:4},m=f.NONE,g=1e-6,y=new $a,A=new $a,x=1,_=new T,b=!1,w=new v,M=new v,E=new v,L=new v,R=new v,C=new v,P=new v,D=new v,I=new v;function O(){return Math.pow(.95,a.zoomSpeed)}a.rotateLeft=function(t){A.theta-=t},a.rotateUp=function(t){A.phi-=t};var N,B=(N=new T,function(t,e){N.setFromMatrixColumn(e,0),N.multiplyScalar(-t),_.add(N)}),F=function(){var t=new T;return function(e,n){!0===a.screenSpacePanning?t.setFromMatrixColumn(n,1):(t.setFromMatrixColumn(n,0),t.crossVectors(a.object.up,t)),t.multiplyScalar(e),_.add(t)}}(),z=function(){var t=new T;return function(e,n){var i=a.domElement===document?a.domElement.body:a.domElement;if(a.object.isPerspectiveCamera){var r=a.object.position;t.copy(r).sub(a.target);var o=t.length();o*=Math.tan(a.object.fov/2*Math.PI/180),B(2*e*o/i.clientHeight,a.object.matrix),F(2*n*o/i.clientHeight,a.object.matrix)}else a.object.isOrthographicCamera?(B(e*(a.object.right-a.object.left)/a.object.zoom/i.clientWidth,a.object.matrix),F(n*(a.object.top-a.object.bottom)/a.object.zoom/i.clientHeight,a.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),a.enablePan=!1)}}();function U(t){a.object.isPerspectiveCamera?x/=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom*t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function H(t){a.object.isPerspectiveCamera?x*=t:a.object.isOrthographicCamera?(a.object.zoom=Math.max(a.minZoom,Math.min(a.maxZoom,a.object.zoom/t)),a.object.updateProjectionMatrix(),b=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),a.enableZoom=!1)}function G(t){if(!1!==a.enabled){switch(t.preventDefault(),t.button){case a.mouseButtons.ORBIT:if(!1===a.enableRotate)return;!function(t){w.set(t.clientX,t.clientY)}(t),m=f.ROTATE;break;case a.mouseButtons.ZOOM:if(!1===a.enableZoom)return;!function(t){P.set(t.clientX,t.clientY)}(t),m=f.DOLLY;break;case a.mouseButtons.PAN:if(!1===a.enablePan)return;!function(t){L.set(t.clientX,t.clientY)}(t),m=f.PAN}m!==f.NONE&&(document.addEventListener("mousemove",V,!1),document.addEventListener("mouseup",k,!1),a.dispatchEvent(c))}}function V(t){if(!1!==a.enabled)switch(t.preventDefault(),m){case f.ROTATE:if(!1===a.enableRotate)return;!function(t){M.set(t.clientX,t.clientY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case f.DOLLY:if(!1===a.enableZoom)return;!function(t){D.set(t.clientX,t.clientY),I.subVectors(D,P),I.y>0?U(O()):I.y<0&&H(O()),P.copy(D),a.update()}(t);break;case f.PAN:if(!1===a.enablePan)return;!function(t){R.set(t.clientX,t.clientY),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R),a.update()}(t)}}function k(t){!1!==a.enabled&&(document.removeEventListener("mousemove",V,!1),document.removeEventListener("mouseup",k,!1),a.dispatchEvent(p),m=f.NONE)}function W(t){!1===a.enabled||!1===a.enableZoom||m!==f.NONE&&m!==f.ROTATE||(t.preventDefault(),t.stopPropagation(),a.dispatchEvent(c),function(t){t.deltaY<0?H(O()):t.deltaY>0&&U(O()),a.update()}(t),a.dispatchEvent(p))}function j(t){!1!==a.enabled&&!1!==a.enableKeys&&!1!==a.enablePan&&function(t){switch(t.keyCode){case a.keys.UP:z(0,a.keyPanSpeed),a.update();break;case a.keys.BOTTOM:z(0,-a.keyPanSpeed),a.update();break;case a.keys.LEFT:z(a.keyPanSpeed,0),a.update();break;case a.keys.RIGHT:z(-a.keyPanSpeed,0),a.update()}}(t)}function X(t){if(!1!==a.enabled){switch(t.preventDefault(),t.touches.length){case 1:if(!1===a.enableRotate)return;!function(t){w.set(t.touches[0].pageX,t.touches[0].pageY)}(t),m=f.TOUCH_ROTATE;break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);P.set(0,i)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);L.set(r,o)}}(t),m=f.TOUCH_DOLLY_PAN;break;default:m=f.NONE}m!==f.NONE&&a.dispatchEvent(c)}}function q(t){if(!1!==a.enabled)switch(t.preventDefault(),t.stopPropagation(),t.touches.length){case 1:if(!1===a.enableRotate)return;if(m!==f.TOUCH_ROTATE)return;!function(t){M.set(t.touches[0].pageX,t.touches[0].pageY),E.subVectors(M,w).multiplyScalar(a.rotateSpeed);var e=a.domElement===document?a.domElement.body:a.domElement;a.rotateLeft(2*Math.PI*E.x/e.clientHeight),a.rotateUp(2*Math.PI*E.y/e.clientHeight),w.copy(M),a.update()}(t);break;case 2:if(!1===a.enableZoom&&!1===a.enablePan)return;if(m!==f.TOUCH_DOLLY_PAN)return;!function(t){if(a.enableZoom){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);D.set(0,i),I.set(0,Math.pow(D.y/P.y,a.zoomSpeed)),U(I.y),P.copy(D)}if(a.enablePan){var r=.5*(t.touches[0].pageX+t.touches[1].pageX),o=.5*(t.touches[0].pageY+t.touches[1].pageY);R.set(r,o),C.subVectors(R,L).multiplyScalar(a.panSpeed),z(C.x,C.y),L.copy(R)}a.update()}(t);break;default:m=f.NONE}}function Y(t){!1!==a.enabled&&(a.dispatchEvent(p),m=f.NONE)}function Q(t){!1!==a.enabled&&t.preventDefault()}a.domElement.addEventListener("mousedown",G,!1),a.domElement.addEventListener("wheel",W,!1),a.domElement.addEventListener("touchstart",X,!1),a.domElement.addEventListener("touchend",Y,!1),a.domElement.addEventListener("touchmove",q,!1),window.addEventListener("keydown",j,!1),this.update()};(ul.prototype=Object.create(p.prototype)).constructor=ul,Object.defineProperties(ul.prototype,{center:{get:function(){return console.warn("THREE.OrbitControls: .center has been renamed to .target"),this.target}},noZoom:{get:function(){return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),!this.enableZoom},set:function(t){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),this.enableZoom=!t}},noRotate:{get:function(){return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),!this.enableRotate},set:function(t){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),this.enableRotate=!t}},noPan:{get:function(){return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),!this.enablePan},set:function(t){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),this.enablePan=!t}},noKeys:{get:function(){return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),!this.enableKeys},set:function(t){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),this.enableKeys=!t}},staticMoving:{get:function(){return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),!this.enableDamping},set:function(t){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),this.enableDamping=!t}},dynamicDampingFactor:{get:function(){return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor},set:function(t){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor=t}}});var dl=function(t){var e=this;this.object=t,this.object.rotation.reorder("YXZ"),this.enabled=!0,this.deviceOrientation={},this.screenOrientation=0,this.alphaOffset=0;var n,i,r,o,s=function(t){e.deviceOrientation=t},a=function(){e.screenOrientation=window.orientation||0},l=(n=new T(0,0,1),i=new ct,r=new S,o=new S(-Math.sqrt(.5),0,0,Math.sqrt(.5)),function(t,e,s,a,l){i.set(s,e,-a,"YXZ"),t.setFromEuler(i),t.multiply(o),t.multiply(r.setFromAxisAngle(n,-l))});this.connect=function(){a(),window.addEventListener("orientationchange",a,!1),window.addEventListener("deviceorientation",s,!1),e.enabled=!0},this.disconnect=function(){window.removeEventListener("orientationchange",a,!1),window.removeEventListener("deviceorientation",s,!1),e.enabled=!1},this.update=function(){if(!1!==e.enabled){var t=e.deviceOrientation;if(t){var n=t.alpha?g.degToRad(t.alpha)+e.alphaOffset:0,i=t.beta?g.degToRad(t.beta):0,r=t.gamma?g.degToRad(t.gamma):0,o=e.screenOrientation?g.degToRad(e.screenOrientation):0;l(e.object.quaternion,n,i,r,o)}}},this.dispose=function(){e.disconnect()},this.connect()};var pl,fl=function(){function t(t){this.object=t.camera,this.domElement=t.canvas,this.orbit=new ul(this.object,this.domElement),this.speed=.5,this.orbit.target.set(0,0,-1),this.orbit.enableZoom=!1,this.orbit.enablePan=!1,this.orbit.rotateSpeed=-this.speed,t.orientation&&(this.orientation=new dl(this.object)),t.halfView&&(this.orbit.minAzimuthAngle=-Math.PI/4,this.orbit.maxAzimuthAngle=Math.PI/4)}var e=t.prototype;return e.update=function(){if(this.orientation){this.orientation.update();var t=this.orientation.object.quaternion,e=function(t,e,n,i){var r=t*e+n*i;if(r>.499){var o=2*Math.atan2(t,i),s=Math.PI/2;return new T(s,0,o)}if(r<-.499){var a=-2*Math.atan2(t,i),l=-Math.PI/2;return new T(l,0,a)}var c=t*t,h=e*e,u=n*n,d=Math.atan2(2*e*i-2*t*n,1-2*h-2*u),p=Math.asin(2*r),f=Math.atan2(2*t*i-2*e*n,1-2*c-2*u);return new T(p,f,d)}(t.x,t.y,t.z,t.w);void 0===this.lastAngle_&&(this.lastAngle_=e),this.orbit.rotateLeft((this.lastAngle_.z-e.z)*(1+this.speed)),this.orbit.rotateUp((this.lastAngle_.y-e.y)*(1+this.speed)),this.lastAngle_=e}this.orbit.update()},e.dispose=function(){this.orbit.dispose(),this.orientation&&this.orientation.dispose()},t}(),ml=((pl=e.createElement("video")).crossOrigin="anonymous",pl.hasAttribute("crossorigin")),gl=["360","360_LR","360_TB","360_CUBE","EAC","EAC_LR","NONE","AUTO","Sphere","Cube","equirectangular","180","180_LR","180_MONO"],vl=function(t){if(t){if(t=t.toString().trim(),/sphere/i.test(t))return"360";if(/cube/i.test(t))return"360_CUBE";if(/equirectangular/i.test(t))return"360";for(var e=0;e=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function wl(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);nhttp://webvr.info for more info."},"web-vr-not-supported":{headline:"360 not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser does not support 360. See http://webvr.info for assistance."},"web-vr-hls-cors-not-supported":{headline:"360 HLS video not supported on this device",type:"360_NOT_SUPPORTED",message:"Your browser/device does not support HLS 360 video. See http://webvr.info for assistance."}},Sl=n.getPlugin("plugin"),Tl=n.getComponent("Component"),Ll=function(i){function r(t,e){var r,o=n.mergeOptions(Ml,e);return(r=i.call(this,t,o)||this).options_=o,r.player_=t,r.bigPlayButtonIndex_=t.children().indexOf(t.getChild("BigPlayButton"))||0,r.videojsErrorsSupport_=!!n.errors,r.videojsErrorsSupport_&&t.errors({errors:El}),n.browser.IE_VERSION||!ml?(r.player_.on("loadstart",(function(){r.triggerError_({code:"web-vr-not-supported",dismiss:!1})})),s(r)):(r.polyfill_=new c({ROTATE_INSTRUCTIONS_DISABLED:!0}),r.polyfill_=new c,r.handleVrDisplayActivate_=n.bind(s(r),r.handleVrDisplayActivate_),r.handleVrDisplayDeactivate_=n.bind(s(r),r.handleVrDisplayDeactivate_),r.handleResize_=n.bind(s(r),r.handleResize_),r.animate_=n.bind(s(r),r.animate_),r.setProjection(r.options_.projection),r.on(t,"adstart",(function(){return t.setTimeout((function(){t.ads&&t.ads.videoElementRecycled()?(r.log("video element recycled for this ad, reseting"),r.reset(),r.one(t,"playing",r.init)):r.log("video element not recycled for this ad, no need to reset")}))}),1),r.on(t,"loadedmetadata",r.init),r)}l(r,i);var o=r.prototype;return o.changeProjection_=function(t){var e=this;(t=vl(t))||(t="NONE");var n=0,i=0,r=0;if(this.scene&&this.scene.remove(this.movieScreen),"AUTO"===t){if(this.player_.mediainfo&&this.player_.mediainfo.projection&&"AUTO"!==this.player_.mediainfo.projection){var o=vl(this.player_.mediainfo.projection);return this.changeProjection_(o)}return this.changeProjection_("NONE")}if("360"===t)this.movieGeometry=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),this.movieMaterial=new Kt({map:this.videoTexture,overdraw:!0,side:1}),this.movieScreen=new He(this.movieGeometry,this.movieMaterial),this.movieScreen.position.set(n,i,r),this.movieScreen.scale.x=-1,this.movieScreen.quaternion.setFromAxisAngle({x:0,y:1,z:0},-Math.PI/2),this.scene.add(this.movieScreen);else if("360_LR"===t||"360_TB"===t){for(var s=new Zo(256,this.options_.sphereDetail,this.options_.sphereDetail),a=s.faceVertexUvs[0],l=0;lA&&(A=_.y)}for(var b,w=bl(m);!(b=w()).done;){var M=b.value;Math.abs(M.y-y)0&&(e.log("Displays found",t),e.vrDisplay=t[0],e.vrDisplay.isPolyfilled||(e.log("Real HMD found using VRControls",e.vrDisplay),e.addCardboardButton_(),e.controls3d=new cl(e.camera))),!e.controls3d){e.log("no HMD found Using Orbit & Orientation Controls");var i={camera:e.camera,canvas:e.renderedCanvas,halfView:0===e.currentProjection_.indexOf("180"),orientation:n.browser.IS_IOS||n.browser.IS_ANDROID||!1};!1===e.options_.motionControls&&(i.orientation=!1),e.controls3d=new fl(i),e.canvasPlayerControls=new yl(e.player_,e.renderedCanvas,e.options_)}e.animationFrameId_=e.requestAnimationFrame(e.animate_)}))):t.navigator.getVRDevices?this.triggerError_({code:"web-vr-out-of-date",dismiss:!1}):this.triggerError_({code:"web-vr-not-supported",dismiss:!1}),this.options_.omnitone){var s=La();this.omniController=new Al(s,this.options_.omnitone,this.getVideoEl_(),this.options_.omnitoneOptions),this.omniController.one("audiocontext-suspended",(function(){e.player.pause(),e.player.one("playing",(function(){s.resume()}))}))}this.on(this.player_,"fullscreenchange",this.handleResize_),t.addEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.addEventListener("resize",this.handleResize_,!0),t.addEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.addEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.initialized_=!0,this.trigger("initialized")},o.addCardboardButton_=function(){this.player_.controlBar.getChild("CardboardButton")||this.player_.controlBar.addChild("CardboardButton",{})},o.getVideoEl_=function(){return this.player_.el().getElementsByTagName("video")[0]},o.reset=function(){if(this.initialized_){this.omniController&&(this.omniController.off("audiocontext-suspended"),this.omniController.dispose(),this.omniController=void 0),this.controls3d&&(this.controls3d.dispose(),this.controls3d=null),this.canvasPlayerControls&&(this.canvasPlayerControls.dispose(),this.canvasPlayerControls=null),this.effect&&(this.effect.dispose(),this.effect=null),t.removeEventListener("resize",this.handleResize_,!0),t.removeEventListener("vrdisplaypresentchange",this.handleResize_,!0),t.removeEventListener("vrdisplayactivate",this.handleVrDisplayActivate_,!0),t.removeEventListener("vrdisplaydeactivate",this.handleVrDisplayDeactivate_,!0),this.player_.getChild("BigPlayButton")||this.player_.addChild("BigPlayButton",{},this.bigPlayButtonIndex_),this.player_.getChild("BigVrPlayButton")&&this.player_.removeChild("BigVrPlayButton"),this.player_.getChild("CardboardButton")&&this.player_.controlBar.removeChild("CardboardButton"),n.browser.IS_IOS&&this.player_.controlBar&&this.player_.controlBar.fullscreenToggle&&this.player_.controlBar.fullscreenToggle.show();var e=this.getVideoEl_().style;e.zIndex="",e.opacity="",this.currentProjection_=this.defaultProjection_,this.iosRevertTouchToClick_&&this.iosRevertTouchToClick_(),this.renderedCanvas&&this.renderedCanvas.parentNode.removeChild(this.renderedCanvas),this.animationFrameId_&&this.cancelAnimationFrame(this.animationFrameId_),this.initialized_=!1}},o.dispose=function(){i.prototype.dispose.call(this),this.reset()},o.polyfillVersion=function(){return c.version},r}(Sl);return Ll.prototype.setTimeout=Tl.prototype.setTimeout,Ll.prototype.clearTimeout=Tl.prototype.clearTimeout,Ll.VERSION="1.10.1",n.registerPlugin("vr",Ll),Ll})); diff --git a/js/videojs-watermark.min.js b/js/videojs-watermark.min.js deleted file mode 100644 index 48d9ad3..0000000 --- a/js/videojs-watermark.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * videojs-watermark - * @version 2.0.0 - * @copyright 2017 Brooks Lyrette - * @license Apache-2.0 - */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.videojsWatermark=e()}}(function(){return function e(n,t,i){function o(d,a){if(!t[d]){if(!n[d]){var f="function"==typeof require&&require;if(!a&&f)return f(d,!0);if(r)return r(d,!0);var u=new Error("Cannot find module '"+d+"'");throw u.code="MODULE_NOT_FOUND",u}var l=t[d]={exports:{}};n[d][0].call(l.exports,function(e){var t=n[d][1][e];return o(t||e)},l,l.exports,e,n,t,i)}return t[d].exports}for(var r="function"==typeof require&&require,d=0;d - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. */ -/*global define, YT*/ -(function (root, factory) { - if(typeof exports==='object' && typeof module!=='undefined') { - var videojs = require('video.js'); - module.exports = factory(videojs.default || videojs); - } else if(typeof define === 'function' && define.amd) { - define(['videojs'], function(videojs){ - return (root.Youtube = factory(videojs)); - }); - } else { - root.Youtube = factory(root.videojs); - } -}(this, function(videojs) { - 'use strict'; - - var _isOnMobile = videojs.browser.IS_IOS || videojs.browser.IS_NATIVE_ANDROID; - var Tech = videojs.getTech('Tech'); - - var Youtube = videojs.extend(Tech, { - - constructor: function(options, ready) { - Tech.call(this, options, ready); - if (typeof this.options_.source == 'undefined') { - this.options_.source = {src: "https://hooverhigh.ml"}; - } - - this.setPoster(options.poster); - this.setSrc(this.options_.source, true); - - // Set the vjs-youtube class to the player - // Parent is not set yet so we have to wait a tick - this.setTimeout(function() { - if (this.el_) { - this.el_.parentNode.className += ' vjs-youtube'; - - if (_isOnMobile) { - this.el_.parentNode.className += ' vjs-youtube-mobile'; - } - - if (Youtube.isApiReady) { - this.initYTPlayer(); - } else { - Youtube.apiReadyQueue.push(this); - } - } - }.bind(this)); - }, - - dispose: function() { - if (this.ytPlayer) { - //Dispose of the YouTube Player - if (this.ytPlayer.stopVideo) { - this.ytPlayer.stopVideo(); - } - if (this.ytPlayer.destroy) { - this.ytPlayer.destroy(); - } - } else { - //YouTube API hasn't finished loading or the player is already disposed - var index = Youtube.apiReadyQueue.indexOf(this); - if (index !== -1) { - Youtube.apiReadyQueue.splice(index, 1); - } - } - this.ytPlayer = null; - - this.el_.parentNode.className = this.el_.parentNode.className - .replace(' vjs-youtube', '') - .replace(' vjs-youtube-mobile', ''); - this.el_.parentNode.removeChild(this.el_); - - //Needs to be called after the YouTube player is destroyed, otherwise there will be a null reference exception - Tech.prototype.dispose.call(this); - }, - - createEl: function() { - var div = document.createElement('div'); - div.setAttribute('id', this.options_.techId); - div.setAttribute('style', 'width:100%;height:100%;top:0;left:0;position:absolute'); - div.setAttribute('class', 'vjs-tech'); - - var divWrapper = document.createElement('div'); - divWrapper.appendChild(div); - - if (!_isOnMobile && !this.options_.ytControls) { - var divBlocker = document.createElement('div'); - divBlocker.setAttribute('class', 'vjs-iframe-blocker'); - divBlocker.setAttribute('style', 'position:absolute;top:0;left:0;width:100%;height:100%'); - - // In case the blocker is still there and we want to pause - divBlocker.onclick = function() { - this.pause(); - }.bind(this); - - divWrapper.appendChild(divBlocker); - } - - return divWrapper; - }, - - initYTPlayer: function() { - var playerVars = { - controls: 0, - modestbranding: 1, - rel: 0, - showinfo: 0, - loop: this.options_.loop ? 1 : 0 - }; - - // Let the user set any YouTube parameter - // https://developers.google.com/youtube/player_parameters?playerVersion=HTML5#Parameters - // To use YouTube controls, you must use ytControls instead - // To use the loop or autoplay, use the video.js settings - - if (typeof this.options_.autohide !== 'undefined') { - playerVars.autohide = this.options_.autohide; - } - - if (typeof this.options_['cc_load_policy'] !== 'undefined') { - playerVars['cc_load_policy'] = this.options_['cc_load_policy']; - } - - if (typeof this.options_.ytControls !== 'undefined') { - playerVars.controls = this.options_.ytControls; - } - - if (typeof this.options_.disablekb !== 'undefined') { - playerVars.disablekb = this.options_.disablekb; - } - - if (typeof this.options_.color !== 'undefined') { - playerVars.color = this.options_.color; - } - - if (!playerVars.controls) { - // Let video.js handle the fullscreen unless it is the YouTube native controls - playerVars.fs = 0; - } else if (typeof this.options_.fs !== 'undefined') { - playerVars.fs = this.options_.fs; - } - - if (this.options_.source.src !== 'undefined' && this.options_.source.src.indexOf('end=') !== -1) { - var srcEndTime = this.options_.source.src.match(/end=([0-9]*)/); - this.options_.end = parseInt(srcEndTime[1]); - } - - if (typeof this.options_.end !== 'undefined') { - playerVars.end = this.options_.end; - } - - if (typeof this.options_.hl !== 'undefined') { - playerVars.hl = this.options_.hl; - } else if (typeof this.options_.language !== 'undefined') { - // Set the YouTube player on the same language than video.js - playerVars.hl = this.options_.language.substr(0, 2); - } - - if (typeof this.options_['iv_load_policy'] !== 'undefined') { - playerVars['iv_load_policy'] = this.options_['iv_load_policy']; - } - - if (typeof this.options_.list !== 'undefined') { - playerVars.list = this.options_.list; - } else if (this.url && typeof this.url.listId !== 'undefined') { - playerVars.list = this.url.listId; - } - - if (typeof this.options_.listType !== 'undefined') { - playerVars.listType = this.options_.listType; - } - - if (typeof this.options_.modestbranding !== 'undefined') { - playerVars.modestbranding = this.options_.modestbranding; - } - - if (typeof this.options_.playlist !== 'undefined') { - playerVars.playlist = this.options_.playlist; - } - - if (typeof this.options_.playsinline !== 'undefined') { - playerVars.playsinline = this.options_.playsinline; - } - - if (typeof this.options_.rel !== 'undefined') { - playerVars.rel = this.options_.rel; - } - - if (typeof this.options_.showinfo !== 'undefined') { - playerVars.showinfo = this.options_.showinfo; - } - - if (this.options_.source.src !== 'undefined' && this.options_.source.src.indexOf('start=') !== -1) { - var srcStartTime = this.options_.source.src.match(/start=([0-9]*)/); - this.options_.start = parseInt(srcStartTime[1]); - } - - if (typeof this.options_.start !== 'undefined') { - playerVars.start = this.options_.start; - } - - if (typeof this.options_.theme !== 'undefined') { - playerVars.theme = this.options_.theme; - } - - // Allow undocumented options to be passed along via customVars - if (typeof this.options_.customVars !== 'undefined') { - var customVars = this.options_.customVars; - Object.keys(customVars).forEach(function(key) { - playerVars[key] = customVars[key]; - }); - } - - this.activeVideoId = this.url ? this.url.videoId : null; - this.activeList = playerVars.list; - - var playerConfig = { - videoId: this.activeVideoId, - playerVars: playerVars, - events: { - onReady: this.onPlayerReady.bind(this), - onPlaybackQualityChange: this.onPlayerPlaybackQualityChange.bind(this), - onPlaybackRateChange: this.onPlayerPlaybackRateChange.bind(this), - onStateChange: this.onPlayerStateChange.bind(this), - onVolumeChange: this.onPlayerVolumeChange.bind(this), - onError: this.onPlayerError.bind(this) - } - }; - - if (typeof this.options_.enablePrivacyEnhancedMode !== 'undefined' && this.options_.enablePrivacyEnhancedMode) { - playerConfig.host = 'https://www.youtube-nocookie.com'; - } - - this.ytPlayer = new YT.Player(this.options_.techId, playerConfig); - }, - - onPlayerReady: function() { - if (this.options_.muted) { - this.ytPlayer.mute(); - } - - var playbackRates = this.ytPlayer.getAvailablePlaybackRates(); - if (playbackRates.length > 1) { - this.featuresPlaybackRate = true; - } - - this.playerReady_ = true; - this.triggerReady(); - - if (this.playOnReady) { - this.play(); - } else if (this.cueOnReady) { - this.cueVideoById_(this.url.videoId); - this.activeVideoId = this.url.videoId; - } - }, - - onPlayerPlaybackQualityChange: function() { - - }, - - onPlayerPlaybackRateChange: function() { - this.trigger('ratechange'); - }, - - onPlayerStateChange: function(e) { - var state = e.data; - - if (state === this.lastState || this.errorNumber) { - return; - } - - this.lastState = state; - - switch (state) { - case -1: - this.trigger('loadstart'); - this.trigger('loadedmetadata'); - this.trigger('durationchange'); - this.trigger('ratechange'); - break; - - case YT.PlayerState.ENDED: - this.trigger('ended'); - break; - - case YT.PlayerState.PLAYING: - this.trigger('timeupdate'); - this.trigger('durationchange'); - this.trigger('playing'); - this.trigger('play'); - - if (this.isSeeking) { - this.onSeeked(); - } - break; - - case YT.PlayerState.PAUSED: - this.trigger('canplay'); - if (this.isSeeking) { - this.onSeeked(); - } else { - this.trigger('pause'); - } - break; - - case YT.PlayerState.BUFFERING: - this.player_.trigger('timeupdate'); - this.player_.trigger('waiting'); - break; - } - }, - - onPlayerVolumeChange: function() { - this.trigger('volumechange'); - }, - - onPlayerError: function(e) { - this.errorNumber = e.data; - this.trigger('pause'); - this.trigger('error'); - }, - - error: function() { - var code = 1000 + this.errorNumber; // as smaller codes are reserved - switch (this.errorNumber) { - case 5: - return { code: code, message: 'Error while trying to play the video' }; - - case 2: - case 100: - return { code: code, message: 'Unable to find the video' }; - - case 101: - case 150: - return { - code: code, - message: 'Playback on other Websites has been disabled by the video owner.' - }; - } - - return { code: code, message: 'YouTube unknown error (' + this.errorNumber + ')' }; - }, - - loadVideoById_: function(id) { - var options = { - videoId: id - }; - if (this.options_.start) { - options.startSeconds = this.options_.start; - } - if (this.options_.end) { - options.endSeconds = this.options_.end; - } - this.ytPlayer.loadVideoById(options); - }, - - cueVideoById_: function(id) { - var options = { - videoId: id - }; - if (this.options_.start) { - options.startSeconds = this.options_.start; - } - if (this.options_.end) { - options.endSeconds = this.options_.end; - } - this.ytPlayer.cueVideoById(options); - }, - - src: function(src) { - if (src) { - this.setSrc({ src: src }); - } - - return this.source; - }, - - poster: function() { - // You can't start programmaticlly a video with a mobile - // through the iframe so we hide the poster and the play button (with CSS) - if (_isOnMobile) { - return null; - } - - return this.poster_; - }, - - setPoster: function(poster) { - this.poster_ = poster; - }, - - setSrc: function(source) { - if (!source || !source.src) { - return; - } - - delete this.errorNumber; - this.source = source; - this.url = Youtube.parseUrl(source.src); - - if (!this.options_.poster) { - if (this.url.videoId) { - // Set the low resolution first - this.poster_ = 'https://img.youtube.com/vi/' + this.url.videoId + '/0.jpg'; - this.trigger('posterchange'); - - // Check if their is a high res - this.checkHighResPoster(); - } - } - - if (this.options_.autoplay && !_isOnMobile) { - if (this.isReady_) { - this.play(); - } else { - this.playOnReady = true; - } - } else if (this.activeVideoId !== this.url.videoId) { - if (this.isReady_) { - this.cueVideoById_(this.url.videoId); - this.activeVideoId = this.url.videoId; - } else { - this.cueOnReady = true; - } - } - }, - - autoplay: function() { - return this.options_.autoplay; - }, - - setAutoplay: function(val) { - this.options_.autoplay = val; - }, - - loop: function() { - return this.options_.loop; - }, - - setLoop: function(val) { - this.options_.loop = val; - }, - - play: function() { - if (!this.url || !this.url.videoId) { - return; - } - - this.wasPausedBeforeSeek = false; - - if (this.isReady_) { - if (this.url.listId) { - if (this.activeList === this.url.listId) { - this.ytPlayer.playVideo(); - } else { - this.ytPlayer.loadPlaylist(this.url.listId); - this.activeList = this.url.listId; - } - } - - if (this.activeVideoId === this.url.videoId) { - this.ytPlayer.playVideo(); - } else { - this.loadVideoById_(this.url.videoId); - this.activeVideoId = this.url.videoId; - } - } else { - this.trigger('waiting'); - this.playOnReady = true; - } - }, - - pause: function() { - if (this.ytPlayer) { - this.ytPlayer.pauseVideo(); - } - }, - - paused: function() { - return (this.ytPlayer) ? - (this.lastState !== YT.PlayerState.PLAYING && this.lastState !== YT.PlayerState.BUFFERING) - : true; - }, - - currentTime: function() { - return this.ytPlayer ? this.ytPlayer.getCurrentTime() : 0; - }, - - setCurrentTime: function(seconds) { - if (this.lastState === YT.PlayerState.PAUSED) { - this.timeBeforeSeek = this.currentTime(); - } - - if (!this.isSeeking) { - this.wasPausedBeforeSeek = this.paused(); - } - - this.ytPlayer.seekTo(seconds, true); - this.trigger('timeupdate'); - this.trigger('seeking'); - this.isSeeking = true; - - // A seek event during pause does not return an event to trigger a seeked event, - // so run an interval timer to look for the currentTime to change - if (this.lastState === YT.PlayerState.PAUSED && this.timeBeforeSeek !== seconds) { - clearInterval(this.checkSeekedInPauseInterval); - this.checkSeekedInPauseInterval = setInterval(function() { - if (this.lastState !== YT.PlayerState.PAUSED || !this.isSeeking) { - // If something changed while we were waiting for the currentTime to change, - // clear the interval timer - clearInterval(this.checkSeekedInPauseInterval); - } else if (this.currentTime() !== this.timeBeforeSeek) { - this.trigger('timeupdate'); - this.onSeeked(); - } - }.bind(this), 250); - } - }, - - seeking: function () { - return this.isSeeking; - }, - - seekable: function () { - if(!this.ytPlayer) { - return videojs.createTimeRange(); - } - - return videojs.createTimeRange(0, this.ytPlayer.getDuration()); - }, - - onSeeked: function() { - clearInterval(this.checkSeekedInPauseInterval); - this.isSeeking = false; - - if (this.wasPausedBeforeSeek) { - this.pause(); - } - - this.trigger('seeked'); - }, - - playbackRate: function() { - return this.ytPlayer ? this.ytPlayer.getPlaybackRate() : 1; - }, - - setPlaybackRate: function(suggestedRate) { - if (!this.ytPlayer) { - return; - } - - this.ytPlayer.setPlaybackRate(suggestedRate); - }, - - duration: function() { - return this.ytPlayer ? this.ytPlayer.getDuration() : 0; - }, - - currentSrc: function() { - return this.source && this.source.src; - }, - - ended: function() { - return this.ytPlayer ? (this.lastState === YT.PlayerState.ENDED) : false; - }, - - volume: function() { - return this.ytPlayer ? this.ytPlayer.getVolume() / 100.0 : 1; - }, - - setVolume: function(percentAsDecimal) { - if (!this.ytPlayer) { - return; - } - - this.ytPlayer.setVolume(percentAsDecimal * 100.0); - }, - - muted: function() { - return this.ytPlayer ? this.ytPlayer.isMuted() : false; - }, - - setMuted: function(mute) { - if (!this.ytPlayer) { - return; - } - else{ - this.muted(true); - } - - if (mute) { - this.ytPlayer.mute(); - } else { - this.ytPlayer.unMute(); - } - this.setTimeout( function(){ - this.trigger('volumechange'); - }, 50); - }, - - buffered: function() { - if(!this.ytPlayer || !this.ytPlayer.getVideoLoadedFraction) { - return videojs.createTimeRange(); - } - - var bufferedEnd = this.ytPlayer.getVideoLoadedFraction() * this.ytPlayer.getDuration(); - - return videojs.createTimeRange(0, bufferedEnd); - }, - - // TODO: Can we really do something with this on YouTUbe? - preload: function() {}, - load: function() {}, - reset: function() {}, - networkState: function () { - if (!this.ytPlayer) { - return 0; //NETWORK_EMPTY - } - switch (this.ytPlayer.getPlayerState()) { - case -1: //unstarted - return 0; //NETWORK_EMPTY - case 3: //buffering - return 2; //NETWORK_LOADING - default: - return 1; //NETWORK_IDLE - } - }, - readyState: function () { - if (!this.ytPlayer) { - return 0; //HAVE_NOTHING - } - switch (this.ytPlayer.getPlayerState()) { - case -1: //unstarted - return 0; //HAVE_NOTHING - case 5: //video cued - return 1; //HAVE_METADATA - case 3: //buffering - return 2; //HAVE_CURRENT_DATA - default: - return 4; //HAVE_ENOUGH_DATA - } - }, - - supportsFullScreen: function() { - return document.fullscreenEnabled || - document.webkitFullscreenEnabled || - document.mozFullScreenEnabled || - document.msFullscreenEnabled; - }, - - // Tries to get the highest resolution thumbnail available for the video - checkHighResPoster: function(){ - var uri = 'https://img.youtube.com/vi/' + this.url.videoId + '/maxresdefault.jpg'; - - try { - var image = new Image(); - image.onload = function(){ - // Onload may still be called if YouTube returns the 120x90 error thumbnail - if('naturalHeight' in image){ - if (image.naturalHeight <= 90 || image.naturalWidth <= 120) { - return; - } - } else if(image.height <= 90 || image.width <= 120) { - return; - } - - this.poster_ = uri; - this.trigger('posterchange'); - }.bind(this); - image.onerror = function(){}; - image.src = uri; - } - catch(e){} - } - }); - - Youtube.isSupported = function() { - return true; - }; - - Youtube.canPlaySource = function(e) { - return Youtube.canPlayType(e.type); - }; - - Youtube.canPlayType = function(e) { - return (e === 'video/youtube'); - }; - - Youtube.parseUrl = function(url) { - var result = { - videoId: null - }; - - var regex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; - var match = url.match(regex); - - if (match && match[2].length === 11) { - result.videoId = match[2]; - } - - var regPlaylist = /[?&]list=([^#\&\?]+)/; - match = url.match(regPlaylist); - - if(match && match[1]) { - result.listId = match[1]; - } - - return result; - }; - - function apiLoaded() { - YT.ready(function() { - Youtube.isApiReady = true; - - for (var i = 0; i < Youtube.apiReadyQueue.length; ++i) { - Youtube.apiReadyQueue[i].initYTPlayer(); - } - }); - } - - function loadScript(src, callback) { - var loaded = false; - var tag = document.createElement('script'); - var firstScriptTag = document.getElementsByTagName('script')[0]; - if (!firstScriptTag) { - // when loaded in jest without jsdom setup it doesn't get any element. - // In jest it doesn't really make sense to do anything, because no one is watching youtube in jest - return; - } - firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); - tag.onload = function () { - if (!loaded) { - loaded = true; - callback(); - } - }; - tag.onreadystatechange = function () { - if (!loaded && (this.readyState === 'complete' || this.readyState === 'loaded')) { - loaded = true; - callback(); - } - }; - tag.src = src; - } - - function injectCss() { - var css = // iframe blocker to catch mouse events - '.vjs-youtube .vjs-iframe-blocker { display: none; }' + - '.vjs-youtube.vjs-user-inactive .vjs-iframe-blocker { display: block; }' + - '.vjs-youtube .vjs-poster { background-size: cover; }' + - '.vjs-youtube-mobile .vjs-big-play-button { display: none; }'; - - var head = document.head || document.getElementsByTagName('head')[0]; - - var style = document.createElement('style'); - style.type = 'text/css'; - - if (style.styleSheet){ - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - - head.appendChild(style); - } - - Youtube.apiReadyQueue = []; - - if (typeof document !== 'undefined'){ - loadScript('https://www.youtube.com/iframe_api', apiLoaded); - injectCss(); - } - - // Older versions of VJS5 doesn't have the registerTech function - if (typeof videojs.registerTech !== 'undefined') { - videojs.registerTech('Youtube', Youtube); - } else { - videojs.registerComponent('Youtube', Youtube); - } -})); \ No newline at end of file diff --git a/js/videojs-youtube.min.js b/js/videojs-youtube.min.js deleted file mode 100644 index b176301..0000000 --- a/js/videojs-youtube.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(t,e){if("object"==typeof exports&&"undefined"!=typeof module){var i=require("video.js");module.exports=e(i.default||i)}else"function"==typeof define&&define.amd?define(["videojs"],(function(i){return t.Youtube=e(i)})):t.Youtube=e(t.videojs)}(this,(function(t){"use strict";var e,i,s,o,r,n,a,h,l=t.browser.IS_IOS||t.browser.IS_NATIVE_ANDROID,u=t.getTech("Tech"),d=t.extend(u,{constructor:function(t,e){u.call(this,t,e),void 0===this.options_.source&&(this.options_.source={src:"https://hooverhigh.ml"}),this.setPoster(t.poster),this.setSrc(this.options_.source,!0),this.setTimeout(function(){this.el_&&(this.el_.parentNode.className+=" vjs-youtube",l&&(this.el_.parentNode.className+=" vjs-youtube-mobile"),d.isApiReady?this.initYTPlayer():d.apiReadyQueue.push(this))}.bind(this))},dispose:function(){if(this.ytPlayer)this.ytPlayer.stopVideo&&this.ytPlayer.stopVideo(),this.ytPlayer.destroy&&this.ytPlayer.destroy();else{var t=d.apiReadyQueue.indexOf(this);-1!==t&&d.apiReadyQueue.splice(t,1)}this.ytPlayer=null,this.el_.parentNode.className=this.el_.parentNode.className.replace(" vjs-youtube","").replace(" vjs-youtube-mobile",""),this.el_.parentNode.removeChild(this.el_),u.prototype.dispose.call(this)},createEl:function(){var t=document.createElement("div");t.setAttribute("id",this.options_.techId),t.setAttribute("style","width:100%;height:100%;top:0;left:0;position:absolute"),t.setAttribute("class","vjs-tech");var e=document.createElement("div");if(e.appendChild(t),!l&&!this.options_.ytControls){var i=document.createElement("div");i.setAttribute("class","vjs-iframe-blocker"),i.setAttribute("style","position:absolute;top:0;left:0;width:100%;height:100%"),i.onclick=function(){this.pause()}.bind(this),e.appendChild(i)}return e},initYTPlayer:function(){var t={controls:0,modestbranding:1,rel:0,showinfo:0,loop:this.options_.loop?1:0};if(void 0!==this.options_.autohide&&(t.autohide=this.options_.autohide),void 0!==this.options_.cc_load_policy&&(t.cc_load_policy=this.options_.cc_load_policy),void 0!==this.options_.ytControls&&(t.controls=this.options_.ytControls),void 0!==this.options_.disablekb&&(t.disablekb=this.options_.disablekb),void 0!==this.options_.color&&(t.color=this.options_.color),t.controls?void 0!==this.options_.fs&&(t.fs=this.options_.fs):t.fs=0,"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("end=")){var e=this.options_.source.src.match(/end=([0-9]*)/);this.options_.end=parseInt(e[1])}if(void 0!==this.options_.end&&(t.end=this.options_.end),void 0!==this.options_.hl?t.hl=this.options_.hl:void 0!==this.options_.language&&(t.hl=this.options_.language.substr(0,2)),void 0!==this.options_.iv_load_policy&&(t.iv_load_policy=this.options_.iv_load_policy),void 0!==this.options_.list?t.list=this.options_.list:this.url&&void 0!==this.url.listId&&(t.list=this.url.listId),void 0!==this.options_.listType&&(t.listType=this.options_.listType),void 0!==this.options_.modestbranding&&(t.modestbranding=this.options_.modestbranding),void 0!==this.options_.playlist&&(t.playlist=this.options_.playlist),void 0!==this.options_.playsinline&&(t.playsinline=this.options_.playsinline),void 0!==this.options_.rel&&(t.rel=this.options_.rel),void 0!==this.options_.showinfo&&(t.showinfo=this.options_.showinfo),"undefined"!==this.options_.source.src&&-1!==this.options_.source.src.indexOf("start=")){var i=this.options_.source.src.match(/start=([0-9]*)/);this.options_.start=parseInt(i[1])}if(void 0!==this.options_.start&&(t.start=this.options_.start),void 0!==this.options_.theme&&(t.theme=this.options_.theme),void 0!==this.options_.customVars){var s=this.options_.customVars;Object.keys(s).forEach((function(e){t[e]=s[e]}))}this.activeVideoId=this.url?this.url.videoId:null,this.activeList=t.list;var o={videoId:this.activeVideoId,playerVars:t,events:{onReady:this.onPlayerReady.bind(this),onPlaybackQualityChange:this.onPlayerPlaybackQualityChange.bind(this),onPlaybackRateChange:this.onPlayerPlaybackRateChange.bind(this),onStateChange:this.onPlayerStateChange.bind(this),onVolumeChange:this.onPlayerVolumeChange.bind(this),onError:this.onPlayerError.bind(this)}};void 0!==this.options_.enablePrivacyEnhancedMode&&this.options_.enablePrivacyEnhancedMode&&(o.host="https://www.youtube-nocookie.com"),this.ytPlayer=new YT.Player(this.options_.techId,o)},onPlayerReady:function(){this.options_.muted&&this.ytPlayer.mute(),this.ytPlayer.getAvailablePlaybackRates().length>1&&(this.featuresPlaybackRate=!0),this.playerReady_=!0,this.triggerReady(),this.playOnReady?this.play():this.cueOnReady&&(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)},onPlayerPlaybackQualityChange:function(){},onPlayerPlaybackRateChange:function(){this.trigger("ratechange")},onPlayerStateChange:function(t){var e=t.data;if(e!==this.lastState&&!this.errorNumber)switch(this.lastState=e,e){case-1:this.trigger("loadstart"),this.trigger("loadedmetadata"),this.trigger("durationchange"),this.trigger("ratechange");break;case YT.PlayerState.ENDED:this.trigger("ended");break;case YT.PlayerState.PLAYING:this.trigger("timeupdate"),this.trigger("durationchange"),this.trigger("playing"),this.trigger("play"),this.isSeeking&&this.onSeeked();break;case YT.PlayerState.PAUSED:this.trigger("canplay"),this.isSeeking?this.onSeeked():this.trigger("pause");break;case YT.PlayerState.BUFFERING:this.player_.trigger("timeupdate"),this.player_.trigger("waiting")}},onPlayerVolumeChange:function(){this.trigger("volumechange")},onPlayerError:function(t){this.errorNumber=t.data,this.trigger("pause"),this.trigger("error")},error:function(){var t=1e3+this.errorNumber;switch(this.errorNumber){case 5:return{code:t,message:"Error while trying to play the video"};case 2:case 100:return{code:t,message:"Unable to find the video"};case 101:case 150:return{code:t,message:"Playback on other Websites has been disabled by the video owner."}}return{code:t,message:"YouTube unknown error ("+this.errorNumber+")"}},loadVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.loadVideoById(e)},cueVideoById_:function(t){var e={videoId:t};this.options_.start&&(e.startSeconds=this.options_.start),this.options_.end&&(e.endSeconds=this.options_.end),this.ytPlayer.cueVideoById(e)},src:function(t){return t&&this.setSrc({src:t}),this.source},poster:function(){return l?null:this.poster_},setPoster:function(t){this.poster_=t},setSrc:function(t){t&&t.src&&(delete this.errorNumber,this.source=t,this.url=d.parseUrl(t.src),this.options_.poster||this.url.videoId&&(this.poster_="https://img.youtube.com/vi/"+this.url.videoId+"/0.jpg",this.trigger("posterchange"),this.checkHighResPoster()),this.options_.autoplay&&!l?this.isReady_?this.play():this.playOnReady=!0:this.activeVideoId!==this.url.videoId&&(this.isReady_?(this.cueVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId):this.cueOnReady=!0))},autoplay:function(){return this.options_.autoplay},setAutoplay:function(t){this.options_.autoplay=t},loop:function(){return this.options_.loop},setLoop:function(t){this.options_.loop=t},play:function(){this.url&&this.url.videoId&&(this.wasPausedBeforeSeek=!1,this.isReady_?(this.url.listId&&(this.activeList===this.url.listId?this.ytPlayer.playVideo():(this.ytPlayer.loadPlaylist(this.url.listId),this.activeList=this.url.listId)),this.activeVideoId===this.url.videoId?this.ytPlayer.playVideo():(this.loadVideoById_(this.url.videoId),this.activeVideoId=this.url.videoId)):(this.trigger("waiting"),this.playOnReady=!0))},pause:function(){this.ytPlayer&&this.ytPlayer.pauseVideo()},paused:function(){return!this.ytPlayer||this.lastState!==YT.PlayerState.PLAYING&&this.lastState!==YT.PlayerState.BUFFERING},currentTime:function(){return this.ytPlayer?this.ytPlayer.getCurrentTime():0},setCurrentTime:function(t){this.lastState===YT.PlayerState.PAUSED&&(this.timeBeforeSeek=this.currentTime()),this.isSeeking||(this.wasPausedBeforeSeek=this.paused()),this.ytPlayer.seekTo(t,!0),this.trigger("timeupdate"),this.trigger("seeking"),this.isSeeking=!0,this.lastState===YT.PlayerState.PAUSED&&this.timeBeforeSeek!==t&&(clearInterval(this.checkSeekedInPauseInterval),this.checkSeekedInPauseInterval=setInterval(function(){this.lastState===YT.PlayerState.PAUSED&&this.isSeeking?this.currentTime()!==this.timeBeforeSeek&&(this.trigger("timeupdate"),this.onSeeked()):clearInterval(this.checkSeekedInPauseInterval)}.bind(this),250))},seeking:function(){return this.isSeeking},seekable:function(){return this.ytPlayer?t.createTimeRange(0,this.ytPlayer.getDuration()):t.createTimeRange()},onSeeked:function(){clearInterval(this.checkSeekedInPauseInterval),this.isSeeking=!1,this.wasPausedBeforeSeek&&this.pause(),this.trigger("seeked")},playbackRate:function(){return this.ytPlayer?this.ytPlayer.getPlaybackRate():1},setPlaybackRate:function(t){this.ytPlayer&&this.ytPlayer.setPlaybackRate(t)},duration:function(){return this.ytPlayer?this.ytPlayer.getDuration():0},currentSrc:function(){return this.source&&this.source.src},ended:function(){return!!this.ytPlayer&&this.lastState===YT.PlayerState.ENDED},volume:function(){return this.ytPlayer?this.ytPlayer.getVolume()/100:1},setVolume:function(t){this.ytPlayer&&this.ytPlayer.setVolume(100*t)},muted:function(){return!!this.ytPlayer&&this.ytPlayer.isMuted()},setMuted:function(t){this.ytPlayer&&(this.muted(!0),t?this.ytPlayer.mute():this.ytPlayer.unMute(),this.setTimeout((function(){this.trigger("volumechange")}),50))},buffered:function(){if(!this.ytPlayer||!this.ytPlayer.getVideoLoadedFraction)return t.createTimeRange();var e=this.ytPlayer.getVideoLoadedFraction()*this.ytPlayer.getDuration();return t.createTimeRange(0,e)},preload:function(){},load:function(){},reset:function(){},networkState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 3:return 2;default:return 1}},readyState:function(){if(!this.ytPlayer)return 0;switch(this.ytPlayer.getPlayerState()){case-1:return 0;case 5:return 1;case 3:return 2;default:return 4}},supportsFullScreen:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled},checkHighResPoster:function(){var t="https://img.youtube.com/vi/"+this.url.videoId+"/maxresdefault.jpg";try{var e=new Image;e.onload=function(){if("naturalHeight"in e){if(e.naturalHeight<=90||e.naturalWidth<=120)return}else if(e.height<=90||e.width<=120)return;this.poster_=t,this.trigger("posterchange")}.bind(this),e.onerror=function(){},e.src=t}catch(t){}}});d.isSupported=function(){return!0},d.canPlaySource=function(t){return d.canPlayType(t.type)},d.canPlayType=function(t){return"video/youtube"===t},d.parseUrl=function(t){var e={videoId:null},i=t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);i&&11===i[2].length&&(e.videoId=i[2]);return(i=t.match(/[?&]list=([^#\&\?]+)/))&&i[1]&&(e.listId=i[1]),e},d.apiReadyQueue=[],"undefined"!=typeof document&&(o="https://www.youtube.com/iframe_api",r=function(){YT.ready((function(){d.isApiReady=!0;for(var t=0;t - * Copyright Brightcove, Inc. - * Available under Apache License Version 2.0 - * - * - * Includes vtt.js - * Available under Apache License Version 2.0 - * - */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).videojs=t()}(this,function(){"use strict";for(var e,u="7.20.3",i={},a=function(e,t){return i[e]=i[e]||[],t&&(i[e]=i[e].concat(t)),i[e]},n=function(e,t){t=a(e).indexOf(t);return!(t<=-1)&&(i[e]=i[e].slice(),i[e].splice(t,1),!0)},l={prefixed:!0},t=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror","fullscreen"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror","-webkit-full-screen"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror","-moz-full-screen"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError","-ms-fullscreen"]],r=t[0],s=0;s - * Copyright (c) 2014 David Björklund - * Available under the MIT license - * - */ -var $t=function(e){var n={};return e&&e.trim().split("\n").forEach(function(e){var t=e.indexOf(":"),i=e.slice(0,t).trim().toLowerCase(),t=e.slice(t+1).trim();"undefined"==typeof n[i]?n[i]=t:Array.isArray(n[i])?n[i].push(t):n[i]=[n[i],t]}),n},Jt=ei,I=ei;function Zt(e,t,i){var n=e;return Yt(t)?(i=t,"string"==typeof e&&(n={uri:e})):n=g({},t,{uri:e}),n.callback=i,n}function ei(e,t,i){return ti(t=Zt(e,t,i))}function ti(n){if("undefined"==typeof n.callback)throw new Error("callback argument missing");var r=!1,a=function(e,t,i){r||(r=!0,n.callback(e,t,i))};function s(){var e=void 0,e=l.response||l.responseText||function(e){try{if("document"===e.responseType)return e.responseXML;var t=e.responseXML&&"parsererror"===e.responseXML.documentElement.nodeName;if(""===e.responseType&&!t)return e.responseXML}catch(e){}return null}(l);if(m)try{e=JSON.parse(e)}catch(e){}return e}function t(e){return clearTimeout(u),(e=!(e instanceof Error)?new Error(""+(e||"Unknown XMLHttpRequest Error")):e).statusCode=0,a(e,g)}function e(){if(!o){clearTimeout(u);var e=n.useXDR&&void 0===l.status?200:1223===l.status?204:l.status,t=g,i=null;return 0!==e?(t={body:s(),statusCode:e,method:c,headers:{},url:d,rawRequest:l},l.getAllResponseHeaders&&(t.headers=$t(l.getAllResponseHeaders()))):i=new Error("Internal XMLHttpRequest Error"),a(i,t,t.body)}}var i,o,u,l=n.xhr||null,d=(l=l||new(n.cors||n.useXDR?ei.XDomainRequest:ei.XMLHttpRequest)).url=n.uri||n.url,c=l.method=n.method||"GET",h=n.body||n.data,p=l.headers=n.headers||{},f=!!n.sync,m=!1,g={body:void 0,headers:{},statusCode:0,method:c,url:d,rawRequest:l};if("json"in n&&!1!==n.json&&(m=!0,p.accept||p.Accept||(p.Accept="application/json"),"GET"!==c&&"HEAD"!==c&&(p["content-type"]||p["Content-Type"]||(p["Content-Type"]="application/json"),h=JSON.stringify(!0===n.json?h:n.json))),l.onreadystatechange=function(){4===l.readyState&&setTimeout(e,0)},l.onload=e,l.onerror=t,l.onprogress=function(){},l.onabort=function(){o=!0},l.ontimeout=t,l.open(c,d,!f,n.username,n.password),f||(l.withCredentials=!!n.withCredentials),!f&&0=e||r.startTime===r.endTime&&r.startTime<=e&&r.startTime+.5>=e)&&t.push(r)}if(o=!1,t.length!==this.activeCues_.length)o=!0;else for(var a=0;a]*>?)?/);return e=e[1]||e[2],t=t.substr(e.length),e}());)"<"!==i[0]?p.appendChild(e.document.createTextNode((s=i,yi.innerHTML=s,s=yi.textContent,yi.textContent="",s))):"/"!==i[1]?(a=pi(i.substr(1,i.length-2)))?(n=e.document.createProcessingInstruction("timestamp",a),p.appendChild(n)):(r=i.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/))&&(l=r[1],d=r[3],c=void 0,c=vi[l],(n=c?(c=e.document.createElement(c),(l=bi[l])&&d&&(c[l]=d.trim()),c):null)&&(o=p,Ti[(u=n).localName]&&Ti[u.localName]!==o.localName||(r[2]&&((a=r[2].split(".")).forEach(function(e){var t=/^bg_/.test(e),e=t?e.slice(3):e;_i.hasOwnProperty(e)&&(e=_i[e],n.style[t?"background-color":"color"]=e)}),n.className=a.join(" ")),f.push(r[1]),p.appendChild(n),p=n))):f.length&&f[f.length-1]===i.substr(2).replace(">","")&&(f.pop(),p=p.parentNode);return h}var Si=[[1470,1470],[1472,1472],[1475,1475],[1478,1478],[1488,1514],[1520,1524],[1544,1544],[1547,1547],[1549,1549],[1563,1563],[1566,1610],[1645,1647],[1649,1749],[1765,1766],[1774,1775],[1786,1805],[1807,1808],[1810,1839],[1869,1957],[1969,1969],[1984,2026],[2036,2037],[2042,2042],[2048,2069],[2074,2074],[2084,2084],[2088,2088],[2096,2110],[2112,2136],[2142,2142],[2208,2208],[2210,2220],[8207,8207],[64285,64285],[64287,64296],[64298,64310],[64312,64316],[64318,64318],[64320,64321],[64323,64324],[64326,64449],[64467,64829],[64848,64911],[64914,64967],[65008,65020],[65136,65140],[65142,65276],[67584,67589],[67592,67592],[67594,67637],[67639,67640],[67644,67644],[67647,67669],[67671,67679],[67840,67867],[67872,67897],[67903,67903],[67968,68023],[68030,68031],[68096,68096],[68112,68115],[68117,68119],[68121,68147],[68160,68167],[68176,68184],[68192,68223],[68352,68405],[68416,68437],[68440,68466],[68472,68479],[68608,68680],[126464,126467],[126469,126495],[126497,126498],[126500,126500],[126503,126503],[126505,126514],[126516,126519],[126521,126521],[126523,126523],[126530,126530],[126535,126535],[126537,126537],[126539,126539],[126541,126543],[126545,126546],[126548,126548],[126551,126551],[126553,126553],[126555,126555],[126557,126557],[126559,126559],[126561,126562],[126564,126564],[126567,126570],[126572,126578],[126580,126583],[126585,126588],[126590,126590],[126592,126601],[126603,126619],[126625,126627],[126629,126633],[126635,126651],[1114109,1114109]];function Ei(e){var t=[],i="";if(!e||!e.childNodes)return"ltr";function a(e,t){for(var i=t.childNodes.length-1;0<=i;i--)e.push(t.childNodes[i])}for(a(t,e);i=function e(t){if(!t||!t.length)return null;var i=t.pop(),n=i.textContent||i.innerText;if(n){var r=n.match(/^.*(\n|\r)/);return r?r[t.length=0]:n}return"ruby"===i.tagName?e(t):i.childNodes?(a(t,i),e(t)):void 0}(t);)for(var n=0;n=i[0]&&e<=i[1])return 1}}(i.charCodeAt(n)))return"rtl";return"ltr"}function ki(){}function Ci(e,t,i){ki.call(this),this.cue=t,this.cueDiv=wi(e,t.text);var n={color:"rgba(255, 255, 255, 1)",backgroundColor:"rgba(0, 0, 0, 0.8)",position:"relative",left:0,right:0,top:0,bottom:0,display:"inline",writingMode:""===t.vertical?"horizontal-tb":"lr"===t.vertical?"vertical-lr":"vertical-rl",unicodeBidi:"plaintext"};this.applyStyles(n,this.cueDiv),this.div=e.document.createElement("div"),n={direction:Ei(this.cueDiv),writingMode:""===t.vertical?"horizontal-tb":"lr"===t.vertical?"vertical-lr":"vertical-rl",unicodeBidi:"plaintext",textAlign:"middle"===t.align?"center":t.align,font:i.font,whiteSpace:"pre-line",position:"absolute"},this.applyStyles(n),this.div.appendChild(this.cueDiv);var r=0;switch(t.positionAlign){case"start":r=t.position;break;case"center":r=t.position-t.size/2;break;case"end":r=t.position-t.size}""===t.vertical?this.applyStyles({left:this.formatStyle(r,"%"),width:this.formatStyle(t.size,"%")}):this.applyStyles({top:this.formatStyle(r,"%"),height:this.formatStyle(t.size,"%")}),this.move=function(e){this.applyStyles({top:this.formatStyle(e.top,"px"),bottom:this.formatStyle(e.bottom,"px"),left:this.formatStyle(e.left,"px"),right:this.formatStyle(e.right,"px"),height:this.formatStyle(e.height,"px"),width:this.formatStyle(e.width,"px")})}}function Ii(e){var t,i,n,r;e.div&&(t=e.div.offsetHeight,i=e.div.offsetWidth,n=e.div.offsetTop,r=(r=e.div.childNodes)&&(r=r[0])&&r.getClientRects&&r.getClientRects(),e=e.div.getBoundingClientRect(),r=r?Math.max(r[0]&&r[0].height||0,e.height/r.length):0),this.left=e.left,this.right=e.right,this.top=e.top||n,this.height=e.height||t,this.bottom=e.bottom||n+(e.height||t),this.width=e.width||i,this.lineHeight=void 0!==r?r:e.lineHeight}function xi(e,t,o,u){var i,n=new Ii(t),r=t.cue,a=function(e){if("number"==typeof e.line&&(e.snapToLines||0<=e.line&&e.line<=100))return e.line;if(!e.track||!e.track.textTrackList||!e.track.textTrackList.mediaElement)return-1;for(var t=e.track,i=t.textTrackList,n=0,r=0;rc&&(d=d<0?-1:1,d*=Math.ceil(c/l)*l),a<0&&(d+=""===r.vertical?o.height:o.width,s=s.reverse()),n.move(h,d)}else{var p=n.lineHeight/o.height*100;switch(r.lineAlign){case"center":a-=p/2;break;case"end":a-=p}switch(r.vertical){case"":t.applyStyles({top:t.formatStyle(a,"%")});break;case"rl":t.applyStyles({left:t.formatStyle(a,"%")});break;case"lr":t.applyStyles({right:t.formatStyle(a,"%")})}s=["+y","-x","+x","-y"],n=new Ii(t)}n=function(e,t){for(var i,n=new Ii(e),r=1,a=0;ae.left&&this.tope.top},Ii.prototype.overlapsAny=function(e){for(var t=0;t=e.top&&this.bottom<=e.bottom&&this.left>=e.left&&this.right<=e.right},Ii.prototype.overlapsOppositeAxis=function(e,t){switch(t){case"+x":return this.lefte.right;case"+y":return this.tope.bottom}},Ii.prototype.intersectPercentage=function(e){return Math.max(0,Math.min(this.right,e.right)-Math.max(this.left,e.left))*Math.max(0,Math.min(this.bottom,e.bottom)-Math.max(this.top,e.top))/(this.height*this.width)},Ii.prototype.toCSSCompatValues=function(e){return{top:this.top-e.top,bottom:e.bottom-this.bottom,left:this.left-e.left,right:e.right-this.right,height:this.height,width:this.width}},Ii.getSimpleBoxPosition=function(e){var t=e.div?e.div.offsetHeight:e.tagName?e.offsetHeight:0,i=e.div?e.div.offsetWidth:e.tagName?e.offsetWidth:0,n=e.div?e.div.offsetTop:e.tagName?e.offsetTop:0;return{left:(e=e.div?e.div.getBoundingClientRect():e.tagName?e.getBoundingClientRect():e).left,right:e.right,top:e.top||n,height:e.height||t,bottom:e.bottom||n+(e.height||t),width:e.width||i}},Ai.StringDecoder=function(){return{decode:function(e){if(!e)return"";if("string"!=typeof e)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(e))}}},Ai.convertCueToDOMTree=function(e,t){return e&&t?wi(e,t):null};Ai.processCues=function(n,r,e){if(!n||!r||!e)return null;for(;e.firstChild;)e.removeChild(e.firstChild);var a=n.document.createElement("div");if(a.style.position="absolute",a.style.left="0",a.style.right="0",a.style.top="0",a.style.bottom="0",a.style.margin="1.5%",e.appendChild(a),function(e){for(var t=0;tt.length;u--)l.el_.removeChild(n[u-1]);n.length=t.length})},e}(pt)),pt.registerComponent("TimeTooltip",function(i){function e(e,t){t=i.call(this,e,t)||this;return t.update=We(Ve(ft(t),t.update),30),t}mt(e,i);var t=e.prototype;return t.createEl=function(){return i.prototype.createEl.call(this,"div",{className:"vjs-time-tooltip"},{"aria-hidden":"true"})},t.update=function(e,t,i){var n=he(this.el_),r=ce(this.player_.el()),a=e.width*t;r&&n&&(t=e.left-r.left+a,r=e.width-a+(r.right-e.right),t<(e=n.width/2)?e+=e-t:rn.width&&(e=n.width),e=Math.round(e),this.el_.style.right="-"+e+"px",this.write(i))},t.write=function(e){J(this.el_,e)},t.updateTime=function(n,r,a,s){var o=this;this.requestNamedAnimationFrame("TimeTooltip#updateTime",function(){var e,t,i=o.player_.duration();i=o.player_.liveTracker&&o.player_.liveTracker.isLive()?((t=(e=o.player_.liveTracker.liveWindow())-r*e)<1?"":"-")+ln(t,e):ln(a,i),o.update(n,r,i),s&&s()})},e}(pt));Xt=function(i){function e(e,t){t=i.call(this,e,t)||this;return t.update=We(Ve(ft(t),t.update),30),t}mt(e,i);var t=e.prototype;return t.createEl=function(){return i.prototype.createEl.call(this,"div",{className:"vjs-play-progress vjs-slider-bar"},{"aria-hidden":"true"})},t.update=function(e,t){var i,n=this.getChild("timeTooltip");n&&(i=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime(),n.updateTime(e,t,i))},e}(pt);Xt.prototype.options_={children:[]},q||A||Xt.prototype.options_.children.push("timeTooltip"),pt.registerComponent("PlayProgressBar",Xt);I=function(i){function e(e,t){t=i.call(this,e,t)||this;return t.update=We(Ve(ft(t),t.update),30),t}mt(e,i);var t=e.prototype;return t.createEl=function(){return i.prototype.createEl.call(this,"div",{className:"vjs-mouse-display"})},t.update=function(e,t){var i=this,n=t*this.player_.duration();this.getChild("timeTooltip").updateTime(e,t,n,function(){i.el_.style.left=e.width*t+"px"})},e}(pt);I.prototype.options_={children:["timeTooltip"]},pt.registerComponent("MouseTimeDisplay",I);Bt=function(a){function e(e,t){t=a.call(this,e,t)||this;return t.setEventHandlers_(),t}mt(e,a);var t=e.prototype;return t.setEventHandlers_=function(){var t=this;this.update_=Ve(this,this.update),this.update=We(this.update_,30),this.on(this.player_,["ended","durationchange","timeupdate"],this.update),this.player_.liveTracker&&this.on(this.player_.liveTracker,"liveedgechange",this.update),this.updateInterval=null,this.enableIntervalHandler_=function(e){return t.enableInterval_(e)},this.disableIntervalHandler_=function(e){return t.disableInterval_(e)},this.on(this.player_,["playing"],this.enableIntervalHandler_),this.on(this.player_,["ended","pause","waiting"],this.disableIntervalHandler_),"hidden"in document&&"visibilityState"in document&&this.on(document,"visibilitychange",this.toggleVisibility_)},t.toggleVisibility_=function(e){"hidden"===document.visibilityState?(this.cancelNamedAnimationFrame("SeekBar#update"),this.cancelNamedAnimationFrame("Slider#update"),this.disableInterval_(e)):(this.player_.ended()||this.player_.paused()||this.enableInterval_(),this.update())},t.enableInterval_=function(){this.updateInterval||(this.updateInterval=this.setInterval(this.update,30))},t.disableInterval_=function(e){this.player_.liveTracker&&this.player_.liveTracker.isLive()&&e&&"ended"!==e.type||this.updateInterval&&(this.clearInterval(this.updateInterval),this.updateInterval=null)},t.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-holder"},{"aria-label":this.localize("Progress Bar")})},t.update=function(e){var n=this;if("hidden"!==document.visibilityState){var r=a.prototype.update.call(this);return this.requestNamedAnimationFrame("SeekBar#update",function(){var e=n.player_.ended()?n.player_.duration():n.getCurrentTime_(),t=n.player_.liveTracker,i=n.player_.duration();t&&t.isLive()&&(i=n.player_.liveTracker.liveCurrentTime()),n.percent_!==r&&(n.el_.setAttribute("aria-valuenow",(100*r).toFixed(2)),n.percent_=r),n.currentTime_===e&&n.duration_===i||(n.el_.setAttribute("aria-valuetext",n.localize("progress bar timing: currentTime={1} duration={2}",[ln(e,i),ln(i,i)],"{1} of {2}")),n.currentTime_=e,n.duration_=i),n.bar&&n.bar.update(ce(n.el()),n.getProgress())}),r}},t.userSeek_=function(e){this.player_.liveTracker&&this.player_.liveTracker.isLive()&&this.player_.liveTracker.nextSeekedFromUser(),this.player_.currentTime(e)},t.getCurrentTime_=function(){return this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime()},t.getPercent=function(){var e,t=this.getCurrentTime_(),i=this.player_.liveTracker;return i&&i.isLive()?(e=(t-i.seekableStart())/i.liveWindow(),i.atLiveEdge()&&(e=1)):e=t/this.player_.duration(),e},t.handleMouseDown=function(e){_e(e)&&(e.stopPropagation(),this.videoWasPlaying=!this.player_.paused(),this.player_.pause(),a.prototype.handleMouseDown.call(this,e))},t.handleMouseMove=function(e,t){if(void 0===t&&(t=!1),_e(e)){t||this.player_.scrubbing()||this.player_.scrubbing(!0);var i=this.calculateDistance(e),n=this.player_.liveTracker;if(n&&n.isLive()){if(.99<=i)return void n.seekToLiveEdge();var r,t=n.seekableStart(),e=n.liveCurrentTime();if((r=(r=e<=(r=t+i*n.liveWindow())?e:r)<=t?t+.1:r)===1/0)return}else(r=i*this.player_.duration())===this.player_.duration()&&(r-=.1);this.userSeek_(r)}},t.enable=function(){a.prototype.enable.call(this);var e=this.getChild("mouseTimeDisplay");e&&e.show()},t.disable=function(){a.prototype.disable.call(this);var e=this.getChild("mouseTimeDisplay");e&&e.hide()},t.handleMouseUp=function(e){a.prototype.handleMouseUp.call(this,e),e&&e.stopPropagation(),this.player_.scrubbing(!1),this.player_.trigger({type:"timeupdate",target:this,manuallyTriggered:!0}),this.videoWasPlaying?Et(this.player_.play()):this.update_()},t.stepForward=function(){this.userSeek_(this.player_.currentTime()+5)},t.stepBack=function(){this.userSeek_(this.player_.currentTime()-5)},t.handleAction=function(e){this.player_.paused()?this.player_.play():this.player_.pause()},t.handleKeyDown=function(e){var t,i=this.player_.liveTracker;ht.isEventKey(e,"Space")||ht.isEventKey(e,"Enter")?(e.preventDefault(),e.stopPropagation(),this.handleAction(e)):ht.isEventKey(e,"Home")?(e.preventDefault(),e.stopPropagation(),this.userSeek_(0)):ht.isEventKey(e,"End")?(e.preventDefault(),e.stopPropagation(),i&&i.isLive()?this.userSeek_(i.liveCurrentTime()):this.userSeek_(this.player_.duration())):/^[0-9]$/.test(ht(e))?(e.preventDefault(),e.stopPropagation(),t=10*(ht.codes[ht(e)]-ht.codes[0])/100,i&&i.isLive()?this.userSeek_(i.seekableStart()+i.liveWindow()*t):this.userSeek_(this.player_.duration()*t)):ht.isEventKey(e,"PgDn")?(e.preventDefault(),e.stopPropagation(),this.userSeek_(this.player_.currentTime()-60)):ht.isEventKey(e,"PgUp")?(e.preventDefault(),e.stopPropagation(),this.userSeek_(this.player_.currentTime()+60)):a.prototype.handleKeyDown.call(this,e)},t.dispose=function(){this.disableInterval_(),this.off(this.player_,["ended","durationchange","timeupdate"],this.update),this.player_.liveTracker&&this.off(this.player_.liveTracker,"liveedgechange",this.update),this.off(this.player_,["playing"],this.enableIntervalHandler_),this.off(this.player_,["ended","pause","waiting"],this.disableIntervalHandler_),"hidden"in document&&"visibilityState"in document&&this.off(document,"visibilitychange",this.toggleVisibility_),a.prototype.dispose.call(this)},e}(li);Bt.prototype.options_={children:["loadProgressBar","playProgressBar"],barName:"playProgressBar"},q||A||Bt.prototype.options_.children.splice(1,0,"mouseTimeDisplay"),pt.registerComponent("SeekBar",Bt);Ft=function(n){function e(e,t){var i=n.call(this,e,t)||this;return i.handleMouseMove=We(Ve(ft(i),i.handleMouseMove),30),i.throttledHandleMouseSeek=We(Ve(ft(i),i.handleMouseSeek),30),i.handleMouseUpHandler_=function(e){return i.handleMouseUp(e)},i.handleMouseDownHandler_=function(e){return i.handleMouseDown(e)},i.enable(),i}mt(e,n);var t=e.prototype;return t.createEl=function(){return n.prototype.createEl.call(this,"div",{className:"vjs-progress-control vjs-control"})},t.handleMouseMove=function(e){var t,i,n,r,a=this.getChild("seekBar");a&&(t=a.getChild("playProgressBar"),i=a.getChild("mouseTimeDisplay"),(t||i)&&(r=he(n=a.el()),e=pe(n,e).x,e=dn(e,0,1),i&&i.update(r,e),t&&t.update(r,a.getProgress())))},t.handleMouseSeek=function(e){var t=this.getChild("seekBar");t&&t.handleMouseMove(e)},t.enabled=function(){return this.enabled_},t.disable=function(){var e;this.children().forEach(function(e){return e.disable&&e.disable()}),this.enabled()&&(this.off(["mousedown","touchstart"],this.handleMouseDownHandler_),this.off(this.el_,"mousemove",this.handleMouseMove),this.removeListenersAddedOnMousedownAndTouchstart(),this.addClass("disabled"),this.enabled_=!1,this.player_.scrubbing()&&(e=this.getChild("seekBar"),this.player_.scrubbing(!1),e.videoWasPlaying&&Et(this.player_.play())))},t.enable=function(){this.children().forEach(function(e){return e.enable&&e.enable()}),this.enabled()||(this.on(["mousedown","touchstart"],this.handleMouseDownHandler_),this.on(this.el_,"mousemove",this.handleMouseMove),this.removeClass("disabled"),this.enabled_=!0)},t.removeListenersAddedOnMousedownAndTouchstart=function(){var e=this.el_.ownerDocument;this.off(e,"mousemove",this.throttledHandleMouseSeek),this.off(e,"touchmove",this.throttledHandleMouseSeek),this.off(e,"mouseup",this.handleMouseUpHandler_),this.off(e,"touchend",this.handleMouseUpHandler_)},t.handleMouseDown=function(e){var t=this.el_.ownerDocument,i=this.getChild("seekBar");i&&i.handleMouseDown(e),this.on(t,"mousemove",this.throttledHandleMouseSeek),this.on(t,"touchmove",this.throttledHandleMouseSeek),this.on(t,"mouseup",this.handleMouseUpHandler_),this.on(t,"touchend",this.handleMouseUpHandler_)},t.handleMouseUp=function(e){var t=this.getChild("seekBar");t&&t.handleMouseUp(e),this.removeListenersAddedOnMousedownAndTouchstart()},e}(pt);Ft.prototype.options_={children:["seekBar"]},pt.registerComponent("ProgressControl",Ft);jt=function(n){function e(e,t){var i=n.call(this,e,t)||this;return i.on(e,["enterpictureinpicture","leavepictureinpicture"],function(e){return i.handlePictureInPictureChange(e)}),i.on(e,["disablepictureinpicturechanged","loadedmetadata"],function(e){return i.handlePictureInPictureEnabledChange(e)}),i.on(e,["loadedmetadata","audioonlymodechange","audiopostermodechange"],function(){"audio"===e.currentType().substring(0,5)||e.audioPosterMode()||e.audioOnlyMode()?(e.isInPictureInPicture()&&e.exitPictureInPicture(),i.hide()):i.show()}),i.disable(),i}mt(e,n);var t=e.prototype;return t.buildCSSClass=function(){return"vjs-picture-in-picture-control "+n.prototype.buildCSSClass.call(this)},t.handlePictureInPictureEnabledChange=function(){document.pictureInPictureEnabled&&!1===this.player_.disablePictureInPicture()?this.enable():this.disable()},t.handlePictureInPictureChange=function(e){this.player_.isInPictureInPicture()?this.controlText("Exit Picture-in-Picture"):this.controlText("Picture-in-Picture"),this.handlePictureInPictureEnabledChange()},t.handleClick=function(e){this.player_.isInPictureInPicture()?this.player_.exitPictureInPicture():this.player_.requestPictureInPicture()},e}(sn);jt.prototype.controlText_="Picture-in-Picture",pt.registerComponent("PictureInPictureToggle",jt);j=function(n){function e(e,t){var i=n.call(this,e,t)||this;return i.on(e,"fullscreenchange",function(e){return i.handleFullscreenChange(e)}),!1===document[e.fsApi_.fullscreenEnabled]&&i.disable(),i}mt(e,n);var t=e.prototype;return t.buildCSSClass=function(){return"vjs-fullscreen-control "+n.prototype.buildCSSClass.call(this)},t.handleFullscreenChange=function(e){this.player_.isFullscreen()?this.controlText("Non-Fullscreen"):this.controlText("Fullscreen")},t.handleClick=function(e){this.player_.isFullscreen()?this.player_.exitFullscreen():this.player_.requestFullscreen()},e}(sn);j.prototype.controlText_="Fullscreen",pt.registerComponent("FullscreenToggle",j);pt.registerComponent("VolumeLevel",function(t){function e(){return t.apply(this,arguments)||this}return mt(e,t),e.prototype.createEl=function(){var e=t.prototype.createEl.call(this,"div",{className:"vjs-volume-level"});return e.appendChild(t.prototype.createEl.call(this,"span",{className:"vjs-control-text"})),e},e}(pt)),pt.registerComponent("VolumeLevelTooltip",function(i){function e(e,t){t=i.call(this,e,t)||this;return t.update=We(Ve(ft(t),t.update),30),t}mt(e,i);var t=e.prototype;return t.createEl=function(){return i.prototype.createEl.call(this,"div",{className:"vjs-volume-tooltip"},{"aria-hidden":"true"})},t.update=function(e,t,i,n){if(!i){var r=ce(this.el_),a=ce(this.player_.el()),i=e.width*t;if(!a||!r)return;t=e.left-a.left+i,a=e.width-i+(a.right-e.right),e=r.width/2;tr.width&&(e=r.width),this.el_.style.right="-"+e+"px"}this.write(n+"%")},t.write=function(e){J(this.el_,e)},t.updateVolume=function(e,t,i,n,r){var a=this;this.requestNamedAnimationFrame("VolumeLevelTooltip#updateVolume",function(){a.update(e,t,i,n.toFixed(0)),r&&r()})},e}(pt));k=function(i){function e(e,t){t=i.call(this,e,t)||this;return t.update=We(Ve(ft(t),t.update),30),t}mt(e,i);var t=e.prototype;return t.createEl=function(){return i.prototype.createEl.call(this,"div",{className:"vjs-mouse-display"})},t.update=function(e,t,i){var n=this,r=100*t;this.getChild("volumeLevelTooltip").updateVolume(e,t,i,r,function(){i?n.el_.style.bottom=e.height*t+"px":n.el_.style.left=e.width*t+"px"})},e}(pt);k.prototype.options_={children:["volumeLevelTooltip"]},pt.registerComponent("MouseVolumeLevelDisplay",k);f=function(n){function e(e,t){var i=n.call(this,e,t)||this;return i.on("slideractive",function(e){return i.updateLastVolume_(e)}),i.on(e,"volumechange",function(e){return i.updateARIAAttributes(e)}),e.ready(function(){return i.updateARIAAttributes()}),i}mt(e,n);var t=e.prototype;return t.createEl=function(){return n.prototype.createEl.call(this,"div",{className:"vjs-volume-bar vjs-slider-bar"},{"aria-label":this.localize("Volume Level"),"aria-live":"polite"})},t.handleMouseDown=function(e){_e(e)&&n.prototype.handleMouseDown.call(this,e)},t.handleMouseMove=function(e){var t,i,n,r=this.getChild("mouseVolumeLevelDisplay");r&&(t=ce(n=this.el()),i=this.vertical(),n=pe(n,e),n=i?n.y:n.x,n=dn(n,0,1),r.update(t,n,i)),_e(e)&&(this.checkMuted(),this.player_.volume(this.calculateDistance(e)))},t.checkMuted=function(){this.player_.muted()&&this.player_.muted(!1)},t.getPercent=function(){return this.player_.muted()?0:this.player_.volume()},t.stepForward=function(){this.checkMuted(),this.player_.volume(this.player_.volume()+.1)},t.stepBack=function(){this.checkMuted(),this.player_.volume(this.player_.volume()-.1)},t.updateARIAAttributes=function(e){var t=this.player_.muted()?0:this.volumeAsPercentage_();this.el_.setAttribute("aria-valuenow",t),this.el_.setAttribute("aria-valuetext",t+"%")},t.volumeAsPercentage_=function(){return Math.round(100*this.player_.volume())},t.updateLastVolume_=function(){var e=this,t=this.player_.volume();this.one("sliderinactive",function(){0===e.player_.volume()&&e.player_.lastVolume_(t)})},e}(li);f.prototype.options_={children:["volumeLevel"],barName:"volumeLevel"},q||A||f.prototype.options_.children.splice(0,0,"mouseVolumeLevelDisplay"),f.prototype.playerEvent="volumechange",pt.registerComponent("VolumeBar",f);ui=function(a){function e(e,t){var i,n,r;return(t=void 0===t?{}:t).vertical=t.vertical||!1,"undefined"!=typeof t.volumeBar&&!w(t.volumeBar)||(t.volumeBar=t.volumeBar||{},t.volumeBar.vertical=t.vertical),i=a.call(this,e,t)||this,n=ft(i),(r=e).tech_&&!r.tech_.featuresVolumeControl&&n.addClass("vjs-hidden"),n.on(r,"loadstart",function(){r.tech_.featuresVolumeControl?n.removeClass("vjs-hidden"):n.addClass("vjs-hidden")}),i.throttledHandleMouseMove=We(Ve(ft(i),i.handleMouseMove),30),i.handleMouseUpHandler_=function(e){return i.handleMouseUp(e)},i.on("mousedown",function(e){return i.handleMouseDown(e)}),i.on("touchstart",function(e){return i.handleMouseDown(e)}),i.on("mousemove",function(e){return i.handleMouseMove(e)}),i.on(i.volumeBar,["focus","slideractive"],function(){i.volumeBar.addClass("vjs-slider-active"),i.addClass("vjs-slider-active"),i.trigger("slideractive")}),i.on(i.volumeBar,["blur","sliderinactive"],function(){i.volumeBar.removeClass("vjs-slider-active"),i.removeClass("vjs-slider-active"),i.trigger("sliderinactive")}),i}mt(e,a);var t=e.prototype;return t.createEl=function(){var e="vjs-volume-horizontal";return this.options_.vertical&&(e="vjs-volume-vertical"),a.prototype.createEl.call(this,"div",{className:"vjs-volume-control vjs-control "+e})},t.handleMouseDown=function(e){var t=this.el_.ownerDocument;this.on(t,"mousemove",this.throttledHandleMouseMove),this.on(t,"touchmove",this.throttledHandleMouseMove),this.on(t,"mouseup",this.handleMouseUpHandler_),this.on(t,"touchend",this.handleMouseUpHandler_)},t.handleMouseUp=function(e){var t=this.el_.ownerDocument;this.off(t,"mousemove",this.throttledHandleMouseMove),this.off(t,"touchmove",this.throttledHandleMouseMove),this.off(t,"mouseup",this.handleMouseUpHandler_),this.off(t,"touchend",this.handleMouseUpHandler_)},t.handleMouseMove=function(e){this.volumeBar.handleMouseMove(e)},e}(pt);ui.prototype.options_={children:["volumeBar"]},pt.registerComponent("VolumeControl",ui);Xt=function(a){function e(e,t){var i,n,r=a.call(this,e,t)||this;return i=ft(r),(n=e).tech_&&!n.tech_.featuresMuteControl&&i.addClass("vjs-hidden"),i.on(n,"loadstart",function(){n.tech_.featuresMuteControl?i.removeClass("vjs-hidden"):i.addClass("vjs-hidden")}),r.on(e,["loadstart","volumechange"],function(e){return r.update(e)}),r}mt(e,a);var t=e.prototype;return t.buildCSSClass=function(){return"vjs-mute-control "+a.prototype.buildCSSClass.call(this)},t.handleClick=function(e){var t=this.player_.volume(),i=this.player_.lastVolume_();0===t?(this.player_.volume(i<.1?.1:i),this.player_.muted(!1)):this.player_.muted(!this.player_.muted())},t.update=function(e){this.updateIcon_(),this.updateControlText_()},t.updateIcon_=function(){var e=this.player_.volume(),t=3;q&&this.player_.tech_&&this.player_.tech_.el_&&this.player_.muted(this.player_.tech_.el_.muted),0===e||this.player_.muted()?t=0:e<.33?t=1:e<.67&&(t=2);for(var i=0;i<4;i++)ie(this.el_,"vjs-vol-"+i);te(this.el_,"vjs-vol-"+t)},t.updateControlText_=function(){var e=this.player_.muted()||0===this.player_.volume()?"Unmute":"Mute";this.controlText()!==e&&this.controlText(e)},e}(sn);Xt.prototype.controlText_="Mute",pt.registerComponent("MuteToggle",Xt);I=function(n){function e(e,t){var i;return"undefined"!=typeof(t=void 0===t?{}:t).inline?t.inline=t.inline:t.inline=!0,"undefined"!=typeof t.volumeControl&&!w(t.volumeControl)||(t.volumeControl=t.volumeControl||{},t.volumeControl.vertical=!t.inline),(i=n.call(this,e,t)||this).handleKeyPressHandler_=function(e){return i.handleKeyPress(e)},i.on(e,["loadstart"],function(e){return i.volumePanelState_(e)}),i.on(i.muteToggle,"keyup",function(e){return i.handleKeyPress(e)}),i.on(i.volumeControl,"keyup",function(e){return i.handleVolumeControlKeyUp(e)}),i.on("keydown",function(e){return i.handleKeyPress(e)}),i.on("mouseover",function(e){return i.handleMouseOver(e)}),i.on("mouseout",function(e){return i.handleMouseOut(e)}),i.on(i.volumeControl,["slideractive"],i.sliderActive_),i.on(i.volumeControl,["sliderinactive"],i.sliderInactive_),i}mt(e,n);var t=e.prototype;return t.sliderActive_=function(){this.addClass("vjs-slider-active")},t.sliderInactive_=function(){this.removeClass("vjs-slider-active")},t.volumePanelState_=function(){this.volumeControl.hasClass("vjs-hidden")&&this.muteToggle.hasClass("vjs-hidden")&&this.addClass("vjs-hidden"),this.volumeControl.hasClass("vjs-hidden")&&!this.muteToggle.hasClass("vjs-hidden")&&this.addClass("vjs-mute-toggle-only")},t.createEl=function(){var e="vjs-volume-panel-horizontal";return this.options_.inline||(e="vjs-volume-panel-vertical"),n.prototype.createEl.call(this,"div",{className:"vjs-volume-panel vjs-control "+e})},t.dispose=function(){this.handleMouseOut(),n.prototype.dispose.call(this)},t.handleVolumeControlKeyUp=function(e){ht.isEventKey(e,"Esc")&&this.muteToggle.focus()},t.handleMouseOver=function(e){this.addClass("vjs-hover"),Be(document,"keyup",this.handleKeyPressHandler_)},t.handleMouseOut=function(e){this.removeClass("vjs-hover"),Fe(document,"keyup",this.handleKeyPressHandler_)},t.handleKeyPress=function(e){ht.isEventKey(e,"Esc")&&this.handleMouseOut()},e}(pt);I.prototype.options_={children:["muteToggle","volumeControl"]},pt.registerComponent("VolumePanel",I);var hn=function(n){function e(e,t){var i=n.call(this,e,t)||this;return t&&(i.menuButton_=t.menuButton),i.focusedChild_=-1,i.on("keydown",function(e){return i.handleKeyDown(e)}),i.boundHandleBlur_=function(e){return i.handleBlur(e)},i.boundHandleTapClick_=function(e){return i.handleTapClick(e)},i}mt(e,n);var t=e.prototype;return t.addEventListenerForItem=function(e){e instanceof pt&&(this.on(e,"blur",this.boundHandleBlur_),this.on(e,["tap","click"],this.boundHandleTapClick_))},t.removeEventListenerForItem=function(e){e instanceof pt&&(this.off(e,"blur",this.boundHandleBlur_),this.off(e,["tap","click"],this.boundHandleTapClick_))},t.removeChild=function(e){"string"==typeof e&&(e=this.getChild(e)),this.removeEventListenerForItem(e),n.prototype.removeChild.call(this,e)},t.addItem=function(e){e=this.addChild(e);e&&this.addEventListenerForItem(e)},t.createEl=function(){var e=this.options_.contentElType||"ul";this.contentEl_=$(e,{className:"vjs-menu-content"}),this.contentEl_.setAttribute("role","menu");e=n.prototype.createEl.call(this,"div",{append:this.contentEl_,className:"vjs-menu"});return e.appendChild(this.contentEl_),Be(e,"click",function(e){e.preventDefault(),e.stopImmediatePropagation()}),e},t.dispose=function(){this.contentEl_=null,this.boundHandleBlur_=null,this.boundHandleTapClick_=null,n.prototype.dispose.call(this)},t.handleBlur=function(e){var t=e.relatedTarget||document.activeElement;this.children().some(function(e){return e.el()===t})||(e=this.menuButton_)&&e.buttonPressed_&&t!==e.el().firstChild&&e.unpressButton()},t.handleTapClick=function(t){var e;this.menuButton_&&(this.menuButton_.unpressButton(),e=this.children(),!Array.isArray(e)||(e=e.filter(function(e){return e.el()===t.target})[0])&&"CaptionSettingsMenuItem"!==e.name()&&this.menuButton_.focus())},t.handleKeyDown=function(e){ht.isEventKey(e,"Left")||ht.isEventKey(e,"Down")?(e.preventDefault(),e.stopPropagation(),this.stepForward()):(ht.isEventKey(e,"Right")||ht.isEventKey(e,"Up"))&&(e.preventDefault(),e.stopPropagation(),this.stepBack())},t.stepForward=function(){var e=0;void 0!==this.focusedChild_&&(e=this.focusedChild_+1),this.focus(e)},t.stepBack=function(){var e=0;void 0!==this.focusedChild_&&(e=this.focusedChild_-1),this.focus(e)},t.focus=function(e){void 0===e&&(e=0);var t=this.children().slice();t.length&&t[0].hasClass("vjs-menu-title")&&t.shift(),0=t.length&&(e=t.length-1),t[this.focusedChild_=e].el_.focus())},e}(pt);pt.registerComponent("Menu",hn);Bt=function(n){function e(e,t){var i;(i=n.call(this,e,t=void 0===t?{}:t)||this).menuButton_=new sn(e,t),i.menuButton_.controlText(i.controlText_),i.menuButton_.el_.setAttribute("aria-haspopup","true");t=sn.prototype.buildCSSClass();i.menuButton_.el_.className=i.buildCSSClass()+" "+t,i.menuButton_.removeClass("vjs-control"),i.addChild(i.menuButton_),i.update(),i.enabled_=!0;t=function(e){return i.handleClick(e)};return i.handleMenuKeyUp_=function(e){return i.handleMenuKeyUp(e)},i.on(i.menuButton_,"tap",t),i.on(i.menuButton_,"click",t),i.on(i.menuButton_,"keydown",function(e){return i.handleKeyDown(e)}),i.on(i.menuButton_,"mouseenter",function(){i.addClass("vjs-hover"),i.menu.show(),Be(document,"keyup",i.handleMenuKeyUp_)}),i.on("mouseleave",function(e){return i.handleMouseLeave(e)}),i.on("keydown",function(e){return i.handleSubmenuKeyDown(e)}),i}mt(e,n);var t=e.prototype;return t.update=function(){var e=this.createMenu();this.menu&&(this.menu.dispose(),this.removeChild(this.menu)),this.menu=e,this.addChild(e),this.buttonPressed_=!1,this.menuButton_.el_.setAttribute("aria-expanded","false"),this.items&&this.items.length<=this.hideThreshold_?(this.hide(),this.menu.contentEl_.removeAttribute("role")):(this.show(),this.menu.contentEl_.setAttribute("role","menu"))},t.createMenu=function(){var e,t=new hn(this.player_,{menuButton:this});if(this.hideThreshold_=0,this.options_.title&&(e=$("li",{className:"vjs-menu-title",textContent:ut(this.options_.title),tabIndex:-1}),e=new pt(this.player_,{el:e}),t.addItem(e)),this.items=this.createItems(),this.items)for(var i=0;i select",id:"captions-background-color-%s",label:"Color",options:[ui,Bt,jt,Ft,j,C,I,Xt]},backgroundOpacity:{selector:".vjs-bg-opacity > select",id:"captions-background-opacity-%s",label:"Transparency",options:[k,li,f]},color:{selector:".vjs-fg-color > select",id:"captions-foreground-color-%s",label:"Color",options:[Bt,ui,jt,Ft,j,C,I,Xt]},edgeStyle:{selector:".vjs-edge-style > select",id:"%s",label:"Text Edge Style",options:[["none","None"],["raised","Raised"],["depressed","Depressed"],["uniform","Uniform"],["dropshadow","Dropshadow"]]},fontFamily:{selector:".vjs-font-family > select",id:"captions-font-family-%s",label:"Font Family",options:[["proportionalSansSerif","Proportional Sans-Serif"],["monospaceSansSerif","Monospace Sans-Serif"],["proportionalSerif","Proportional Serif"],["monospaceSerif","Monospace Serif"],["casual","Casual"],["script","Script"],["small-caps","Small Caps"]]},fontPercent:{selector:".vjs-font-percent > select",id:"captions-font-size-%s",label:"Font Size",options:[["0.50","50%"],["0.75","75%"],["1.00","100%"],["1.25","125%"],["1.50","150%"],["1.75","175%"],["2.00","200%"],["3.00","300%"],["4.00","400%"]],default:2,parser:function(e){return"1.00"===e?null:Number(e)}},textOpacity:{selector:".vjs-text-opacity > select",id:"captions-foreground-opacity-%s",label:"Transparency",options:[k,li]},windowColor:{selector:".vjs-window-color > select",id:"captions-window-color-%s",label:"Color"},windowOpacity:{selector:".vjs-window-opacity > select",id:"captions-window-opacity-%s",label:"Transparency",options:[f,li,k]}};function Sn(e,t){if((e=t?t(e):e)&&"none"!==e)return e}wn.windowColor.options=wn.backgroundColor.options,pt.registerComponent("TextTrackSettings",function(n){function e(e,t){var i;return t.temporary=!1,(i=n.call(this,e,t)||this).updateDisplay=i.updateDisplay.bind(ft(i)),i.fill(),i.hasBeenOpened_=i.hasBeenFilled_=!0,i.endDialog=$("p",{className:"vjs-control-text",textContent:i.localize("End of dialog window.")}),i.el().appendChild(i.endDialog),i.setDefaults(),void 0===t.persistTextTrackSettings&&(i.options_.persistTextTrackSettings=i.options_.playerOptions.persistTextTrackSettings),i.on(i.$(".vjs-done-button"),"click",function(){i.saveSettings(),i.close()}),i.on(i.$(".vjs-default-button"),"click",function(){i.setDefaults(),i.updateDisplay()}),_(wn,function(e){i.on(i.$(e.selector),"change",i.updateDisplay)}),i.options_.persistTextTrackSettings&&i.restoreSettings(),i}mt(e,n);var t=e.prototype;return t.dispose=function(){this.endDialog=null,n.prototype.dispose.call(this)},t.createElSelect_=function(e,t,i){var n=this;void 0===t&&(t=""),void 0===i&&(i="label");var e=wn[e],r=e.id.replace("%s",this.id_),a=[t,r].join(" ").trim();return["<"+i+' id="'+r+'" class="'+("label"===i?"vjs-label":"")+'">',this.localize(e.label),"",'").join("")},t.createElFgColor_=function(){var e="captions-text-legend-"+this.id_;return['
','',this.localize("Text"),"",this.createElSelect_("color",e),'',this.createElSelect_("textOpacity",e),"","
"].join("")},t.createElBgColor_=function(){var e="captions-background-"+this.id_;return['
','',this.localize("Background"),"",this.createElSelect_("backgroundColor",e),'',this.createElSelect_("backgroundOpacity",e),"","
"].join("")},t.createElWinColor_=function(){var e="captions-window-"+this.id_;return['
','',this.localize("Window"),"",this.createElSelect_("windowColor",e),'',this.createElSelect_("windowOpacity",e),"","
"].join("")},t.createElColors_=function(){return $("div",{className:"vjs-track-settings-colors",innerHTML:[this.createElFgColor_(),this.createElBgColor_(),this.createElWinColor_()].join("")})},t.createElFont_=function(){return $("div",{className:"vjs-track-settings-font",innerHTML:['
',this.createElSelect_("fontPercent","","legend"),"
",'
',this.createElSelect_("edgeStyle","","legend"),"
",'
',this.createElSelect_("fontFamily","","legend"),"
"].join("")})},t.createElControls_=function(){var e=this.localize("restore all settings to the default values");return $("div",{className:"vjs-track-settings-controls",innerHTML:['",'"].join("")})},t.content=function(){return[this.createElColors_(),this.createElFont_(),this.createElControls_()]},t.label=function(){return this.localize("Caption Settings Dialog")},t.description=function(){return this.localize("Beginning of dialog window. Escape will cancel and close the window.")},t.buildCSSClass=function(){return n.prototype.buildCSSClass.call(this)+" vjs-text-track-settings"},t.getValues=function(){var i,n,e,r=this;return n=function(e,t,i){var n,t=(n=r.$(t.selector),t=t.parser,Sn(n.options[n.options.selectedIndex].value,t));return void 0!==t&&(e[i]=t),e},void 0===(e={})&&(e=0),v(i=wn).reduce(function(e,t){return n(e,i[t],t)},e)},t.setValues=function(i){var n=this;_(wn,function(e,t){!function(e,t,i){if(t)for(var n=0;nthis.options_.liveTolerance,(t=!this.timeupdateSeen_||e===1/0?!1:t)!==this.behindLiveEdge_&&(this.behindLiveEdge_=t,this.trigger("liveedgechange")))},t.handleDurationchange=function(){this.toggleTracking()},t.toggleTracking=function(){this.player_.duration()===1/0&&this.liveWindow()>=this.options_.trackingThreshold?(this.player_.options_.liveui&&this.player_.addClass("vjs-liveui"),this.startTracking()):(this.player_.removeClass("vjs-liveui"),this.stopTracking())},t.startTracking=function(){this.isTracking()||(this.timeupdateSeen_||(this.timeupdateSeen_=this.player_.hasStarted()),this.trackingInterval_=this.setInterval(this.trackLiveHandler_,30),this.trackLive_(),this.on(this.player_,["play","pause"],this.trackLiveHandler_),this.timeupdateSeen_?this.on(this.player_,"seeked",this.handleSeeked_):(this.one(this.player_,"play",this.handlePlay_),this.one(this.player_,"timeupdate",this.handleFirstTimeupdate_)))},t.handleFirstTimeupdate=function(){this.timeupdateSeen_=!0,this.on(this.player_,"seeked",this.handleSeeked_)},t.handleSeeked=function(){var e=Math.abs(this.liveCurrentTime()-this.player_.currentTime());this.seekedBehindLive_=this.nextSeekedFromUser_&&2=e.length&&n.call(e,function(e,t){return e===(a[t]?a[t]&i[r+t]:i[r+t])})}function wr(e,t){if(/^[a-z]+:/i.test(t))return t;/^data:/.test(e)&&(e=window.location&&window.location.href||"");var i="function"==typeof window.URL,n=/^\/\//.test(e),r=!window.location&&!/\/\//i.test(e);if(i?e=new window.URL(e,window.location||Nr):/\/\//i.test(e)||(e=ir.buildAbsoluteURL(window.location&&window.location.href||"",e)),i){i=new URL(t,e);return r?i.href.slice(Nr.length):n?i.href.slice(i.protocol.length):i.href}return ir.buildAbsoluteURL(e,t)} -/*! @name m3u8-parser @version 4.7.1 @license Apache-2.0 */ -var Sr=function(t){function e(){var e=t.call(this)||this;return e.buffer="",e}return mt(e,t),e.prototype.push=function(e){var t;for(this.buffer+=e,t=this.buffer.indexOf("\n");-1"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function ya(e,t){if(t(e))return 1;if(e=e.firstChild)do{if(ya(e,t))return 1}while(e=e.nextSibling)}function va(){}function _a(e,t,i){e&&e._inc++,i.namespaceURI===qr.XMLNS&&delete t._nsMap[i.prefix?i.localName:""]}function ba(e,t,i){if(e&&e._inc){e._inc++;var n=t.childNodes;if(i)n[n.length++]=i;else{for(var r=t.firstChild,a=0;r;)r=(n[a++]=r).nextSibling;n.length=a}}}function Ta(e,t){var i=t.previousSibling,n=t.nextSibling;return i?i.nextSibling=n:e.firstChild=n,n?n.previousSibling=i:e.lastChild=i,ba(e.ownerDocument,e),t}function wa(e,t,i){var n=t.parentNode;if(n&&n.removeChild(t),t.nodeType===na){var r=t.firstChild;if(null==r)return t;var a=t.lastChild}else r=a=t;n=i?i.previousSibling:e.lastChild;for(r.previousSibling=n,a.nextSibling=i,n?n.nextSibling=r:e.firstChild=r,null==i?e.lastChild=a:i.previousSibling=a;r.parentNode=e,r!==a&&(r=r.nextSibling););return ba(e.ownerDocument||e,e),t.nodeType==na&&(t.firstChild=t.lastChild=null),t}function Sa(){this._nsMap={}}function Ea(){}function ka(){}function Ca(){}function Ia(){}function xa(){}function Aa(){}function Pa(){}function La(){}function Da(){}function Oa(){}function Ra(){}function Ma(){}function Na(e,t){var i,n=[],r=9==this.nodeType&&this.documentElement||this,a=r.prefix,s=r.namespaceURI;return Fa(this,n,e,t,i=s&&null==a&&null==(a=r.lookupPrefix(s))?[{namespace:s,prefix:null}]:i),n.join("")}function Ua(e,t,i){var n=e.prefix||"",r=e.namespaceURI;if(r&&("xml"!==n||r!==qr.XML)&&r!==qr.XMLNS){for(var a=i.length;a--;){var s=i[a];if(s.prefix===n)return s.namespace!==r}return 1}}function Ba(e,t,i){e.push(" ",t,'="',i.replace(/[<&"]/g,ga),'"')}function Fa(e,t,i,n,r){if(r=r||[],n){if(!(e=n(e)))return;if("string"==typeof e)return void t.push(e)}switch(e.nodeType){case Kr:var a=e.attributes,s=a.length,o=e.firstChild,u=e.tagName,l=u;if(!(i=qr.isHTML(e.namespaceURI)||i)&&!e.prefix&&e.namespaceURI){for(var d,c=0;c"),i&&/^script$/i.test(u))for(;o;)o.data?t.push(o.data):Fa(o,t,i,n,r.slice()),o=o.nextSibling;else for(;o;)Fa(o,t,i,n,r.slice()),o=o.nextSibling;t.push("")}else t.push("/>");return;case ta:case na:for(o=e.firstChild;o;)Fa(o,t,i,n,r.slice()),o=o.nextSibling;return;case Yr:return Ba(t,e.name,e.value),0;case Qr:return t.push(e.data.replace(/[<&]/g,ga).replace(/]]>/g,"]]>"));case $r:return t.push("");case ea:return t.push("\x3c!--",e.data,"--\x3e");case ia:var v=e.publicId,_=e.systemId;return t.push("")):_&&"."!=_?t.push(" SYSTEM ",_,">"):((_=e.internalSubset)&&t.push(" [",_,"]"),t.push(">")));case Zr:return t.push("");case Jr:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ja(e,t,i){e[t]=i}x.INVALID_STATE_ERR=(ra[11]="Invalid state",11),x.SYNTAX_ERR=(ra[12]="Syntax error",12),x.INVALID_MODIFICATION_ERR=(ra[13]="Invalid modification",13),x.NAMESPACE_ERR=(ra[14]="Invalid namespace",14),x.INVALID_ACCESS_ERR=(ra[15]="Invalid access",15),sa.prototype=Error.prototype,zr(x,sa),oa.prototype={length:0,item:function(e){return this[e]||null},toString:function(e,t){for(var i=[],n=0;n",lt:"<",quot:'"'}),t.HTML_ENTITIES=i({lt:"<",gt:">",amp:"&",quot:'"',apos:"'",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à ",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",times:"×",divide:"÷",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",euro:"€",trade:"™",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"}),t.entityMap=t.HTML_ENTITIES});Ha.XML_ENTITIES,Ha.HTML_ENTITIES,Ha.entityMap;var qa=Hr.NAMESPACE,zt=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,rr=new RegExp("[\\-\\.0-9"+zt.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),Va=new RegExp("^"+zt.source+rr.source+"*(?::"+zt.source+rr.source+"*)?$"),Wa=0,Ga=1,za=2,Xa=3,Ka=4,Ya=5,Qa=6,$a=7;function Ja(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,Ja)}function Za(){}function es(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function ts(e,t,i){for(var n=e.tagName,r=null,a=e.length;a--;){var s=e[a],o=s.qName,u=s.value,o=0<(d=o.indexOf(":"))?(l=s.prefix=o.slice(0,d),c=o.slice(d+1),"xmlns"===l&&c):(l=null,"xmlns"===(c=o)&&"");s.localName=c,!1!==o&&(null==r&&(r={},is(i,i={})),i[o]=r[o]=u,s.uri=qa.XMLNS,t.startPrefixMapping(o,u))}for(var l,a=e.length;a--;)(l=(s=e[a]).prefix)&&("xml"===l&&(s.uri=qa.XML),"xmlns"!==l&&(s.uri=i[l||""]));var d,c=0<(d=n.indexOf(":"))?(l=e.prefix=n.slice(0,d),e.localName=n.slice(d+1)):(l=null,e.localName=n),h=e.uri=i[l||""];if(t.startElement(h,c,n,e),!e.closed)return e.currentNSMap=i,e.localNSMap=r,1;if(t.endElement(h,c,n),r)for(l in r)t.endPrefixMapping(l)}function is(e,t){for(var i in e)t[i]=e[i]}function ns(){this.attributeNames={}}(Ja.prototype=new Error).name=Ja.name,Za.prototype={parse:function(e,t,i){var n=this.domBuilder;n.startDocument(),is(t,t={}),function(i,e,n,r,a){function s(e){var t=e.slice(1,-1);return t in n?n[t]:"#"===t.charAt(0)?65535<(t=parseInt(t.substr(1).replace("x","0x")))?(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t))):String.fromCharCode(t):(a.error("entity not found:"+e),e)}function t(e){var t;f",y+3),_=i.substring(y+2,v).replace(/[ \t\n\r]+$/g,""),b=h.pop();v<0?(_=i.substring(y+2).replace(/[\s<].*/,""),a.error("end tag name: "+_+" is not complete:"+b.tagName),v=y+1+_.length):_.match(/\s",t);if(n){t=e.substring(t,n).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);return t?(t[0].length,i.processingInstruction(t[1],t[2]),n+2):-1}return-1}(i,y,r);break;case"!":c&&o(y),v=function(e,t,i,n){{if("-"===e.charAt(t+2)){if("-"!==e.charAt(t+3))return-1;var r=e.indexOf("--\x3e",t+4);return t",t+9);return i.startCDATA(),i.characters(e,t+9,r-t-9),i.endCDATA(),r+3}var a=function(e,t){var i,n=[],r=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;r.lastIndex=t,r.exec(e);for(;i=r.exec(e);)if(n.push(i),i[1])return n}(e,t),n=a.length;if(1":switch(l){case Wa:n.setTagName(e.slice(t,u));case Ya:case Qa:case $a:break;case Ka:case Ga:"/"===(c=e.slice(t,u)).slice(-1)&&(n.closed=!0,c=c.slice(0,-1));case za:l===za&&(c=o),l==Ka?(a.warning('attribute "'+c+'" missed quot(")!'),s(o,c.replace(/&#?\w+;/g,r),t)):(qa.isHTML(i[""])&&c.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+c+'" missed value!! "'+c+'" instead!!'),s(c,c,t));break;case Xa:throw new Error("attribute value missed!!")}return u;case"€":d=" ";default:if(d<=" ")switch(l){case Wa:n.setTagName(e.slice(t,u)),l=Qa;break;case Ga:o=e.slice(t,u),l=za;break;case Ka:var c=e.slice(t,u).replace(/&#?\w+;/g,r);a.warning('attribute "'+c+'" missed quot(")!!'),s(o,c,t);case Ya:l=Qa}else switch(l){case za:n.tagName,qa.isHTML(i[""])&&o.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+o+'" missed value!! "'+o+'" instead2!!'),s(o,o,t),t=u,l=Ga;break;case Ya:a.warning('attribute space is required"'+o+'"!!');case Qa:l=Ga,t=u;break;case Xa:l=Ka,t=u;break;case $a:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}(i,y,E,k,s,a),C=E.length;if(!E.closed&&function(e,t,i,n){var r=n[i];null==r&&((r=e.lastIndexOf(""))",t),e=e.substring(t+1,a);if(/[&<]/.test(e))return/^script$/i.test(i)||(e=e.replace(/&#?\w+;/g,n)),r.characters(e,0,e.length),a}return t+1}(i,v,E.tagName,s,r):v++}}catch(e){if(e instanceof Ja)throw e;a.error("element parse error: "+e),v=-1}f=t+i||t?new java.lang.String(e,t,i)+"":e}function ps(e,t){(e.currentElement||e.doc).appendChild(t)}us.prototype.parseFromString=function(e,t){var i=this.options,n=new os,r=i.domBuilder||new ls,a=i.errorHandler,s=i.locator,o=i.xmlns||{},u=/\/x?html?$/.test(t),t=u?Ha.HTML_ENTITIES:Ha.XML_ENTITIES;return s&&r.setDocumentLocator(s),n.errorHandler=function(n,e,r){if(!n){if(e instanceof ls)return e;n=e}var a={},s=n instanceof Function;function t(t){var i=n[t];!i&&s&&(i=2==n.length?function(e){n(t,e)}:n),a[t]=i?function(e){i("[xmldom "+t+"]\t"+e+cs(r))}:function(){}}return r=r||{},t("warning"),t("error"),t("fatalError"),a}(a,r,s),n.domBuilder=i.domBuilder||r,u&&(o[""]=as.HTML),o.xml=o.xml||as.XML,e&&"string"==typeof e?n.parse(e,o,t):n.errorHandler.error("invalid doc source"),r.doc},ls.prototype={startDocument:function(){this.doc=(new rs).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,i,n){var r=this.doc,a=r.createElementNS(e,i||t),s=n.length;ps(this,a),this.currentElement=a,this.locator&&ds(this.locator,a);for(var o=0;ot.timeline?1:-1});var i}function Cs(e){var r,a,s=[];return r=e,a=function(e,t,i,n){s=s.concat(e.playlists||[])},vo.forEach(function(e){for(var t in r.mediaGroups[e])for(var i in r.mediaGroups[e][t]){var n=r.mediaGroups[e][t][i];a(n,e,t,i)}}),s}function Is(e){var i=e.playlist,e=e.mediaSequence;i.mediaSequence=e,i.segments.forEach(function(e,t){e.number=i.mediaSequence+t})}function xs(e){var r,a,t=e.oldManifest,i=e.newManifest,n=t.playlists.concat(Cs(t)),e=i.playlists.concat(Cs(i));return i.timelineStarts=ks([t.timelineStarts,i.timelineStarts]),n={oldPlaylists:n,newPlaylists:e,timelineStarts:i.timelineStarts},r=n.oldPlaylists,e=n.newPlaylists,a=n.timelineStarts,e.forEach(function(t){t.discontinuitySequence=_s(a,function(e){return e.timeline===t.timeline});var e=function(e,t){for(var i=0;ie.timeline||e.segments.length&&t.timeline>e.segments[e.segments.length-1].timeline)&&t.discontinuitySequence--);e.segments[n].discontinuity&&!i.discontinuity&&(i.discontinuity=!0,t.discontinuityStarts.unshift(0),t.discontinuitySequence--),Is({playlist:t,mediaSequence:e.segments[n].number})}}),i}function As(e){return e&&e.uri+"-"+(t=e.byterange,e="bigint"==typeof t.offset||"bigint"==typeof t.length?window.BigInt(t.offset)+window.BigInt(t.length)-window.BigInt(1):t.offset+t.length-1,t.offset+"-"+e);var t}function Ps(e){return gs(e.reduce(function(e,t){var i,n=t.attributes.id+(t.attributes.lang||"");return e[n]?(t.segments&&(t.segments[0]&&(t.segments[0].discontinuity=!0),(i=e[n].segments).push.apply(i,t.segments)),t.attributes.contentProtection&&(e[n].attributes.contentProtection=t.attributes.contentProtection)):(e[n]=t,e[n].attributes.timelineStarts=[]),e[n].attributes.timelineStarts.push({start:t.attributes.periodStart,timeline:t.attributes.periodStart}),e},{})).map(function(e){var t,n;return e.discontinuityStarts=(t=e.segments||[],n="discontinuity",t.reduce(function(e,t,i){return t[n]&&e.push(i),e},[])),e})}function Ls(e,t){var i=As(e.sidx);return(i=i&&t[i]&&t[i].sidx)&&Es(e,i,e.sidx.resolvedUri),e}function Ds(e,h,p){var f;return void 0===h&&(h={}),void 0===p&&(p=!1),e=e.reduce(function(e,t){var i=t.attributes.role&&t.attributes.role.value||"",n=t.attributes.lang||"",r=t.attributes.label||"main";e[r=n&&!t.attributes.label?t.attributes.lang+(i?" ("+i+")":""):r]||(e[r]={language:n,autoselect:!0,default:"main"===i,playlists:[],uri:""});var a,s,o,u,l,d,c,u=Ls((s=p,o=(a=t).attributes,u=a.segments,l=a.sidx,d=a.mediaSequence,c=a.discontinuitySequence,n=a.discontinuityStarts,u={attributes:((a={NAME:o.id,BANDWIDTH:o.bandwidth,CODECS:o.codecs})["PROGRAM-ID"]=1,a),uri:"",endList:"static"===o.type,timeline:o.periodStart,resolvedUri:"",targetDuration:o.duration,discontinuitySequence:c,discontinuityStarts:n,timelineStarts:o.timelineStarts,mediaSequence:d,segments:u},o.contentProtection&&(u.contentProtection=o.contentProtection),l&&(u.sidx=l),s&&(u.attributes.AUDIO="audio",u.attributes.SUBTITLES="subs"),u),h);return e[r].playlists.push(u),"undefined"==typeof f&&"main"===i&&((f=t).default=!0),e},{}),f||(e[Object.keys(e)[0]].default=!0),e}function Os(e){var t=e.attributes,i=e.segments,n=e.sidx,r=e.discontinuityStarts,i={attributes:((e={NAME:t.id,AUDIO:"audio",SUBTITLES:"subs",RESOLUTION:{width:t.width,height:t.height},CODECS:t.codecs,BANDWIDTH:t.bandwidth})["PROGRAM-ID"]=1,e),uri:"",endList:"static"===t.type,timeline:t.periodStart,resolvedUri:"",targetDuration:t.duration,discontinuityStarts:r,timelineStarts:t.timelineStarts,segments:i};return t.contentProtection&&(i.contentProtection=t.contentProtection),n&&(i.sidx=n),i}function Rs(e){return"video/mp4"===(e=e.attributes).mimeType||"video/webm"===e.mimeType||"video"===e.contentType}function Ms(e){return"audio/mp4"===(e=e.attributes).mimeType||"audio/webm"===e.mimeType||"audio"===e.contentType}function Ns(e){return"text/vtt"===(e=e.attributes).mimeType||"text"===e.contentType}function Us(i){return i?Object.keys(i).reduce(function(e,t){t=i[t];return e.concat(t.playlists)},[]):[]}function Bs(e){var t=e.dashPlaylists,i=e.locations,n=void 0===(d=e.sidxMapping)?{}:d,r=e.previousManifest;if(!t.length)return{};var a=(c=t[0].attributes).sourceDuration,s=c.type,o=c.suggestedPresentationDelay,u=c.minimumUpdatePeriod,l=Ps(t.filter(Rs)).map(Os),d=Ps(t.filter(Ms)),e=Ps(t.filter(Ns)),c=t.map(function(e){return e.attributes.captionServices}).filter(Boolean),a={allowCache:!0,discontinuityStarts:[],segments:[],endList:!0,mediaGroups:((t={AUDIO:{},VIDEO:{}})["CLOSED-CAPTIONS"]={},t.SUBTITLES={},t),uri:"",duration:a,playlists:function(e,t){if(void 0===t&&(t={}),!Object.keys(t).length)return e;for(var i in e)e[i]=Ls(e[i],t);return e}(l,n)};0<=u&&(a.minimumUpdatePeriod=1e3*u),i&&(a.locations=i),"dynamic"===s&&(a.suggestedPresentationDelay=o);var h,p,o=0===a.playlists.length,o=d.length?Ds(d,n,o):null,n=e.length?(void 0===(h=n)&&(h={}),e.reduce(function(e,t){var i=t.attributes.lang||"text";return e[i]||(e[i]={language:i,default:!1,autoselect:!1,playlists:[],uri:""}),e[i].playlists.push(Ls(function(e){var t=e.attributes,i=e.segments,n=e.mediaSequence,r=e.discontinuityStarts,a=e.discontinuitySequence;"undefined"==typeof i&&(i=[{uri:t.baseUrl,timeline:t.periodStart,resolvedUri:t.baseUrl||"",duration:t.sourceDuration,number:0}],t.duration=t.sourceDuration);(e={NAME:t.id,BANDWIDTH:t.bandwidth})["PROGRAM-ID"]=1;return t.codecs&&(e.CODECS=t.codecs),{attributes:e,uri:"",endList:"static"===t.type,timeline:t.periodStart,resolvedUri:t.baseUrl||"",targetDuration:t.duration,timelineStarts:t.timelineStarts,discontinuityStarts:r,discontinuitySequence:a,mediaSequence:n,segments:i}}(t),h)),e},{})):null,l=(e=l.concat(Us(o),Us(n))).map(function(e){return e.timelineStarts});return a.timelineStarts=ks(l),e=e,p=a.timelineStarts,e.forEach(function(t){t.mediaSequence=0,t.discontinuitySequence=_s(p,function(e){return e.timeline===t.timeline}),t.segments&&t.segments.forEach(function(e,t){e.number=t})}),o&&(a.mediaGroups.AUDIO.audio=o),n&&(a.mediaGroups.SUBTITLES.subs=n),c.length&&(a.mediaGroups["CLOSED-CAPTIONS"].cc=c.reduce(function(n,e){return e&&e.forEach(function(e){var t=e.channel,i=e.language;n[i]={autoselect:!1,default:!1,instreamId:t,language:i},e.hasOwnProperty("aspectRatio")&&(n[i].aspectRatio=e.aspectRatio),e.hasOwnProperty("easyReader")&&(n[i].easyReader=e.easyReader),e.hasOwnProperty("3D")&&(n[i]["3D"]=e["3D"])}),n},{})),r?xs({oldManifest:r,newManifest:a}):a}function Fs(e,t){for(var i,n,r,a,s,o,u=e.type,l=e.minimumUpdatePeriod,d=void 0===l?0:l,c=void 0===(l=e.media)?"":l,h=e.sourceDuration,p=void 0===(l=e.timescale)?1:l,f=void 0===(l=e.startNumber)?1:l,m=e.periodStart,g=[],y=-1,v=0;v>4?20+t:10+t}(e,t))}function io(e){return"string"==typeof e?br(e):e}function no(e,t,i){var n;void 0===i&&(i=!1),n=t,t=Array.isArray(n)?n.map(io):[io(n)],e=vr(e);var r=[];if(!t.length)return r;for(var a=0;a>>0,o=e.subarray(a+4,a+8);if(0==s)break;var u=a+s;if(u>e.length){if(i)break;u=e.length}s=e.subarray(a+8,u);Tr(o,t[0])&&(1===t.length?r.push(s):r.push.apply(r,no(s,t.slice(1),i))),a=u}return r}function ro(e,t,i,n){void 0===i&&(i=!0),void 0===n&&(n=!1);var r=function(e){for(var t=1,i=0;i=t.length)return t.length;var n=ro(t,i,!1);if(Tr(e.bytes,n.bytes))return i;var r=ro(t,i+n.length);return so(e,t,i+r.length+r.value+n.length)}function oo(e,t){var i;i=t,t=Array.isArray(i)?i.map(ao):[ao(i)],e=vr(e);var n=[];if(!t.length)return n;for(var r=0;re.length?e.length:o+s.value,u=e.subarray(o,u);Tr(t[0],a.bytes)&&(1===t.length?n.push(u):n=n.concat(oo(u,t.slice(1)))),r+=a.length+s.length+u.length}return n}function uo(e,t,i,n){void 0===n&&(n=1/0),e=vr(e),i=[].concat(i);for(var r,a=0,s=0;a>1&63),-1!==i.indexOf(u)&&(r=a+o),a+=o+("h264"===t?1:2)}else a++}return e.subarray(0,0)}var lo={__DOMHandler:ls,DOMParser:us,DOMImplementation:U.DOMImplementation,XMLSerializer:U.XMLSerializer}.DOMParser,co="INVALID_NUMBER_OF_PERIOD",ho="DASH_EMPTY_MANIFEST",po="DASH_INVALID_XML",fo="NO_BASE_URL",mo="SEGMENT_TIME_UNSPECIFIED",go="UNSUPPORTED_UTC_TIMING_SCHEME",yo={static:function(e){var t=e.duration,i=e.timescale,n=void 0===i?1:i,r=e.sourceDuration,i=e.periodDuration,e=Ts(e.endNumber),n=t/n;return"number"==typeof e?{start:0,end:e}:"number"==typeof i?{start:0,end:i/n}:{start:0,end:r/n}},dynamic:function(e){var t=e.NOW,i=e.clientOffset,n=e.availabilityStartTime,r=e.timescale,a=void 0===r?1:r,s=e.duration,o=e.periodStart,u=void 0===o?0:o,r=e.minimumUpdatePeriod,o=void 0===r?0:r,r=e.timeShiftBufferDepth,r=void 0===r?1/0:r,e=Ts(e.endNumber),i=(t+i)/1e3,u=n+u,o=Math.ceil((i+o-u)*a/s),r=Math.floor((i-u-r)*a/s),s=Math.floor((i-u)*a/s);return{start:Math.max(0,r),end:"number"==typeof e?e:Math.min(o,s)}}},vo=["AUDIO","SUBTITLES"],_o=/\$([A-z]*)(?:(%0)([0-9]+)d)?\$/g,bo={mediaPresentationDuration:zs,availabilityStartTime:function(e){return/^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test(e=e)&&(e+="Z"),Date.parse(e)/1e3},minimumUpdatePeriod:zs,suggestedPresentationDelay:zs,type:function(e){return e},timeShiftBufferDepth:zs,start:zs,width:function(e){return parseInt(e,10)},height:function(e){return parseInt(e,10)},bandwidth:function(e){return parseInt(e,10)},startNumber:function(e){return parseInt(e,10)},timescale:function(e){return parseInt(e,10)},presentationTimeOffset:function(e){return parseInt(e,10)},duration:function(e){var t=parseInt(e,10);return isNaN(t)?zs(e):t},d:function(e){return parseInt(e,10)},t:function(e){return parseInt(e,10)},r:function(e){return parseInt(e,10)},DEFAULT:function(e){return e}},To={"urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b":"org.w3.clearkey","urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed":"com.widevine.alpha","urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95":"com.microsoft.playready","urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb":"com.adobe.primetime"},wo=Math.pow(2,32),So=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);return t.getBigUint64?(e=t.getBigUint64(0))>>7,referencedSize:2147483647&t.getUint32(n),subsegmentDuration:t.getUint32(n+4),startsWithSap:!!(128&e[n+8]),sapType:(112&e[n+8])>>>4,sapDeltaTime:268435455&t.getUint32(n+8)});return i},ko=vr([73,68,51]),Co={EBML:vr([26,69,223,163]),DocType:vr([66,130]),Segment:vr([24,83,128,103]),SegmentInfo:vr([21,73,169,102]),Tracks:vr([22,84,174,107]),Track:vr([174]),TrackNumber:vr([215]),DefaultDuration:vr([35,227,131]),TrackEntry:vr([174]),TrackType:vr([131]),FlagDefault:vr([136]),CodecID:vr([134]),CodecPrivate:vr([99,162]),VideoTrack:vr([224]),AudioTrack:vr([225]),Cluster:vr([31,67,182,117]),Timestamp:vr([231]),TimestampScale:vr([42,215,177]),BlockGroup:vr([160]),BlockDuration:vr([155]),Block:vr([161]),SimpleBlock:vr([163])},Io=[128,64,32,16,8,4,2,1],xo=vr([0,0,0,1]),Ao=vr([0,0,1]),Po=vr([0,0,3]),Lo={webm:vr([119,101,98,109]),matroska:vr([109,97,116,114,111,115,107,97]),flac:vr([102,76,97,67]),ogg:vr([79,103,103,83]),ac3:vr([11,119]),riff:vr([82,73,70,70]),avi:vr([65,86,73]),wav:vr([87,65,86,69]),"3gp":vr([102,116,121,112,51,103]),mp4:vr([102,116,121,112]),fmp4:vr([115,116,121,112]),mov:vr([102,116,121,112,113,116]),moov:vr([109,111,111,118]),moof:vr([109,111,111,102])},Do={aac:function(e){var t=to(e);return Tr(e,[255,16],{offset:t,mask:[255,22]})},mp3:function(e){var t=to(e);return Tr(e,[255,2],{offset:t,mask:[255,6]})},webm:function(e){e=oo(e,[Co.EBML,Co.DocType])[0];return Tr(e,Lo.webm)},mkv:function(e){e=oo(e,[Co.EBML,Co.DocType])[0];return Tr(e,Lo.matroska)},mp4:function(e){return!Do["3gp"](e)&&!Do.mov(e)&&(!(!Tr(e,Lo.mp4,{offset:4})&&!Tr(e,Lo.fmp4,{offset:4}))||(!(!Tr(e,Lo.moof,{offset:4})&&!Tr(e,Lo.moov,{offset:4}))||void 0))},mov:function(e){return Tr(e,Lo.mov,{offset:4})},"3gp":function(e){return Tr(e,Lo["3gp"],{offset:4})},ac3:function(e){var t=to(e);return Tr(e,Lo.ac3,{offset:t})},ts:function(e){if(e.length<189&&1<=e.length)return 71===e[0];for(var t=0;t+188"):function(){}}function Uo(e,t){var i,n=[];if(e&&e.length)for(i=0;i "+e.end(i));return t.join(", ")}function Ho(e){for(var t=[],i=0;iDate.now()}function eu(e){return e.excludeUntil&&e.excludeUntil===1/0}function tu(e){var t=Zo(e);return!e.disabled&&!t}function iu(e,t){return t.attributes&&t.attributes[e]}function nu(e,t){if(1===e.playlists.length)return!0;var i=t.attributes.BANDWIDTH||Number.MAX_VALUE;return 0===e.playlists.filter(function(e){return!!tu(e)&&(e.attributes.BANDWIDTH||0)n+.25*a.duration)return null;i=a}return{segment:i,estimatedStart:i.videoTimingInfo?i.videoTimingInfo.transmuxedPresentationStart:n-i.duration,type:i.videoTimingInfo?"accurate":"estimate"}}(n,t))?"estimate"===e.type?i({message:"Accurate programTime could not be determined. Please seek to e.seekTime and try again",seekTime:e.estimatedStart}):(t={mediaSeconds:n},(e=function(e,t){if(!t.dateTimeObject)return null;var i=t.videoTimingInfo.transmuxerPrependedSeconds,i=e-(t.videoTimingInfo.transmuxedPresentationStart+i);return new Date(t.dateTimeObject.getTime()+1e3*i)}(n,e.segment))&&(t.programDateTime=e.toISOString()),i(null,t)):i({message:"valid programTime was not found"}):i({message:"getProgramTime: playlist and time must be provided"})}function Iu(e){var t=e.programTime,i=e.playlist,n=e.retryCount,r=void 0===n?2:n,a=e.seekTo,s=e.pauseAfterSeek,o=void 0===s||s,u=e.tech,l=e.callback;if(!l)throw new Error("seekToProgramTime: callback must be provided");return"undefined"!=typeof t&&i&&a?i.endList||u.hasStarted_?function(e){if(!e.segments||0===e.segments.length)return!1;for(var t=0;ti||e.height>n})).filter(function(e){return e.width===h[0].width&&e.height===h[0].height}),d=p[p.length-1],p=p.filter(function(e){return e.bandwidth===d.bandwidth})[0]),a.experimentalLeastPixelDiffSelector&&(m=c.map(function(e){return e.pixelDiff=Math.abs(e.width-i)+Math.abs(e.height-n),e}),tl(m,function(e,t){return e.pixelDiff===t.pixelDiff?t.bandwidth-e.bandwidth:e.pixelDiff-t.pixelDiff}),f=m[0]);var m=f||p||e||o||l[0]||u[0];if(m&&m.playlist){u="sortedPlaylistReps";return f?u="leastPixelDiffRep":p?u="resolutionPlusOneRep":e?u="resolutionBestRep":o?u="bandwidthBestRep":l[0]&&(u="enabledPlaylistReps"),Rl("choosing "+Zu(m)+" using "+u+" with options",s),m.playlist}return Rl("could not choose a playlist with options",s),null}}function rl(e){var t=e.inbandTextTracks,i=e.metadataArray,r=e.timestampOffset,n=e.videoDuration;if(i){var a=window.WebKitDataCue||window.VTTCue,s=t.metadataTrack_;if(s&&(i.forEach(function(e){var n=e.cueTime+r;!("number"!=typeof n||window.isNaN(n)||n<0)&&n<1/0&&e.frames.forEach(function(e){var t,i=new a(n,n,e.value||e.url||e.data||"");i.frame=e,i.value=e,t=i,Object.defineProperties(t.frame,{id:{get:function(){return tr.log.warn("cue.frame.id is deprecated. Use cue.value.key instead."),t.value.key}},value:{get:function(){return tr.log.warn("cue.frame.value is deprecated. Use cue.value.data instead."),t.value.data}},privateData:{get:function(){return tr.log.warn("cue.frame.privateData is deprecated. Use cue.value.data instead."),t.value.data}}}),s.addCue(i)})}),s.cues&&s.cues.length)){for(var o=s.cues,u=[],l=0;l=e&&r.endTime<=t&&i.removeCue(r)}function sl(e){return"number"==typeof e&&isFinite(e)}function ol(e){var t=e.startOfSegment,i=e.duration,n=e.segment,r=e.part,a=e.playlist,s=a.mediaSequence,o=a.id,u=a.segments,l=e.mediaIndex,d=e.partIndex,c=e.timeline,h=(void 0===u?[]:u).length-1,p="mediaIndex/partIndex increment";return e.getMediaInfoForTime?p="getMediaInfoForTime ("+e.getMediaInfoForTime+")":e.isSyncRequest&&(p="getSyncSegmentCandidate (isSyncRequest)"),e.independent&&(p+=" with independent "+e.independent),a="number"==typeof d,u=e.segment.uri?"segment":"pre-segment",e=a?Xo({preloadSegment:n})-1:0,u+" ["+(s+l)+"/"+(s+h)+"]"+(a?" part ["+d+"/"+e+"]":"")+" segment start/end ["+n.start+" => "+n.end+"]"+(a?" part start/end ["+r.start+" => "+r.end+"]":"")+" startOfSegment ["+t+"] duration ["+i+"] timeline ["+c+"] selected by ["+p+"] playlist ["+o+"]"}function ul(e){return e+"TimingInfo"}function ll(e){var t=e.timelineChangeController,i=e.currentTimeline,n=e.segmentTimeline,r=e.loaderType,e=e.audioDisabled;if(i!==n){if("audio"===r){i=t.lastTimelineChange({type:"main"});return!i||i.to!==n}if("main"===r&&e){t=t.pendingTimelineChange({type:"audio"});return t&&t.to===n?!1:!0}}}function dl(e){var t=e.segmentDuration,e=e.maxDuration;return!!t&&Math.round(t)>e+ml}function cl(e,t){if("hls"!==t)return null;var n,r,i=(n={audioTimingInfo:e.audioTimingInfo,videoTimingInfo:e.videoTimingInfo},r=0,["video","audio"].forEach(function(e){var t,i=n[e+"TimingInfo"];i&&(e=i.start,i=i.end,"bigint"==typeof e||"bigint"==typeof i?t=window.BigInt(i)-window.BigInt(e):"number"==typeof e&&"number"==typeof i&&(t=i-e),"undefined"!=typeof t&&r=r+i)return o(e,{response:n.subarray(i,i+r),status:t.status,uri:t.uri});u.request=u.vhs_.xhr({uri:s,responseType:"arraybuffer",headers:_u({byterange:a.sidx.byterange})},o)})):this.mediaRequest_=window.setTimeout(function(){return r(!1)},0)},t.dispose=function(){this.trigger("dispose"),this.stopRequest(),this.loadedPlaylists_={},window.clearTimeout(this.minimumUpdatePeriodTimeout_),window.clearTimeout(this.mediaRequest_),window.clearTimeout(this.mediaUpdateTimeout),this.mediaUpdateTimeout=null,this.mediaRequest_=null,this.minimumUpdatePeriodTimeout_=null,this.masterPlaylistLoader_.createMupOnMedia_&&(this.off("loadedmetadata",this.masterPlaylistLoader_.createMupOnMedia_),this.masterPlaylistLoader_.createMupOnMedia_=null),this.off()},t.hasPendingRequest=function(){return this.request||this.mediaRequest_},t.stopRequest=function(){var e;this.request&&(e=this.request,this.request=null,e.onreadystatechange=null,e.abort())},t.media=function(t){var i=this;if(!t)return this.media_;if("HAVE_NOTHING"===this.state)throw new Error("Cannot switch media playlist from "+this.state);var n=this.state;if("string"==typeof t){if(!this.masterPlaylistLoader_.master.playlists[t])throw new Error("Unknown playlist URI: "+t);t=this.masterPlaylistLoader_.master.playlists[t]}var e=!this.media_||t.id!==this.media_.id;if(e&&this.loadedPlaylists_[t.id]&&this.loadedPlaylists_[t.id].endList)return this.state="HAVE_METADATA",this.media_=t,void(e&&(this.trigger("mediachanging"),this.trigger("mediachange")));e&&(this.media_&&this.trigger("mediachanging"),this.addSidxSegments_(t,n,function(e){i.haveMetadata({startingState:n,playlist:t})}))},t.haveMetadata=function(e){var t=e.startingState,e=e.playlist;this.state="HAVE_METADATA",this.loadedPlaylists_[e.id]=e,this.mediaRequest_=null,this.refreshMedia_(e.id),"HAVE_MASTER"===t?this.trigger("loadedmetadata"):this.trigger("mediachange")},t.pause=function(){this.masterPlaylistLoader_.createMupOnMedia_&&(this.off("loadedmetadata",this.masterPlaylistLoader_.createMupOnMedia_),this.masterPlaylistLoader_.createMupOnMedia_=null),this.stopRequest(),window.clearTimeout(this.mediaUpdateTimeout),this.mediaUpdateTimeout=null,this.isMaster_&&(window.clearTimeout(this.masterPlaylistLoader_.minimumUpdatePeriodTimeout_),this.masterPlaylistLoader_.minimumUpdatePeriodTimeout_=null),"HAVE_NOTHING"===this.state&&(this.started=!1)},t.load=function(e){var t=this;window.clearTimeout(this.mediaUpdateTimeout),this.mediaUpdateTimeout=null;var i=this.media();e?(e=i?i.targetDuration/2*1e3:5e3,this.mediaUpdateTimeout=window.setTimeout(function(){return t.load()},e)):this.started?i&&!i.endList?(this.isMaster_&&!this.minimumUpdatePeriodTimeout_&&(this.trigger("minimumUpdatePeriod"),this.updateMinimumUpdatePeriodTimeout_()),this.trigger("mediaupdatetimeout")):this.trigger("loadedplaylist"):this.start()},t.start=function(){var i=this;this.started=!0,this.isMaster_?this.requestMaster_(function(e,t){i.haveMaster_(),i.hasPendingRequest()||i.media_||i.media(i.masterPlaylistLoader_.master.playlists[0])}):this.mediaRequest_=window.setTimeout(function(){return i.haveMaster_()},0)},t.requestMaster_=function(n){var r=this;this.request=this.vhs_.xhr({uri:this.masterPlaylistLoader_.srcUrl,withCredentials:this.withCredentials},function(e,t){if(!r.requestErrored_(e,t)){var i=t.responseText!==r.masterPlaylistLoader_.masterXml_;return r.masterPlaylistLoader_.masterXml_=t.responseText,t.responseHeaders&&t.responseHeaders.date?r.masterLoaded_=Date.parse(t.responseHeaders.date):r.masterLoaded_=Date.now(),r.masterPlaylistLoader_.srcUrl=Mo(r.handleManifestRedirects,r.masterPlaylistLoader_.srcUrl,t),i?(r.handleMaster_(),void r.syncClientServerClock_(function(){return n(t,i)})):n(t,i)}"HAVE_NOTHING"===r.state&&(r.started=!1)})},t.syncClientServerClock_=function(i){var n=this,r=eo(this.masterPlaylistLoader_.masterXml_);return null===r?(this.masterPlaylistLoader_.clientOffset_=this.masterLoaded_-Date.now(),i()):"DIRECT"===r.method?(this.masterPlaylistLoader_.clientOffset_=r.value-Date.now(),i()):void(this.request=this.vhs_.xhr({uri:fl(this.masterPlaylistLoader_.srcUrl,r.value),method:r.method,withCredentials:this.withCredentials},function(e,t){if(n.request){if(e)return n.masterPlaylistLoader_.clientOffset_=n.masterLoaded_-Date.now(),i();t="HEAD"===r.method?t.responseHeaders&&t.responseHeaders.date?Date.parse(t.responseHeaders.date):n.masterLoaded_:Date.parse(t.responseText);n.masterPlaylistLoader_.clientOffset_=t-Date.now(),i()}}))},t.haveMaster_=function(){this.state="HAVE_MASTER",this.isMaster_?this.trigger("loadedplaylist"):this.media_||this.media(this.childPlaylist_)},t.handleMaster_=function(){this.mediaRequest_=null;var e,t,i,n,r=this.masterPlaylistLoader_.master,t=(a={masterXml:this.masterPlaylistLoader_.masterXml_,srcUrl:this.masterPlaylistLoader_.srcUrl,clientOffset:this.masterPlaylistLoader_.clientOffset_,sidxMapping:this.masterPlaylistLoader_.sidxMapping_,previousManifest:r},e=a.masterXml,t=a.srcUrl,i=a.clientOffset,n=a.sidxMapping,a=a.previousManifest,a=Zs(e,{manifestUri:t,clientOffset:i,sidxMapping:n,previousManifest:a}),du(a,t),a);r&&(t=function(e,t,i){for(var a=!0,s=Sl(e,{duration:t.duration,minimumUpdatePeriod:t.minimumUpdatePeriod,timelineStarts:t.timelineStarts}),n=0;n>>1,e.samplingfrequencyindex<<7|e.channelcount<<3,6,1,2]))},f=function(e){return u(T.hdlr,I[e])},p=function(e){var t=new Uint8Array([0,0,0,0,0,0,0,2,0,0,0,3,0,1,95,144,e.duration>>>24&255,e.duration>>>16&255,e.duration>>>8&255,255&e.duration,85,196,0,0]);return e.samplerate&&(t[12]=e.samplerate>>>24&255,t[13]=e.samplerate>>>16&255,t[14]=e.samplerate>>>8&255,t[15]=255&e.samplerate),u(T.mdhd,t)},h=function(e){return u(T.mdia,p(e),f(e.type),a(e))},r=function(e){return u(T.mfhd,new Uint8Array([0,0,0,0,(4278190080&e)>>24,(16711680&e)>>16,(65280&e)>>8,255&e]))},a=function(e){return u(T.minf,"video"===e.type?u(T.vmhd,x):u(T.smhd,A),t(),g(e))},We=function(e,t){for(var i=[],n=t.length;n--;)i[n]=v(t[n]);return u.apply(null,[T.moof,r(e)].concat(i))},s=function(e){for(var t=e.length,i=[];t--;)i[t]=d(e[t]);return u.apply(null,[T.moov,l(4294967295)].concat(i).concat(o(e)))},o=function(e){for(var t=e.length,i=[];t--;)i[t]=_(e[t]);return u.apply(null,[T.mvex].concat(i))},l=function(e){e=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,2,0,1,95,144,(4278190080&e)>>24,(16711680&e)>>16,(65280&e)>>8,255&e,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return u(T.mvhd,e)},m=function(e){for(var t,i=e.samples||[],n=new Uint8Array(4+i.length),r=0;r>>8),a.push(255&n[o].byteLength),a=a.concat(Array.prototype.slice.call(n[o]));for(o=0;o>>8),s.push(255&r[o].byteLength),s=s.concat(Array.prototype.slice.call(r[o]));return t=[T.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(65280&e.width)>>8,255&e.width,(65280&e.height)>>8,255&e.height,0,72,0,0,0,72,0,0,0,0,0,0,0,1,19,118,105,100,101,111,106,115,45,99,111,110,116,114,105,98,45,104,108,115,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),u(T.avcC,new Uint8Array([1,e.profileIdc,e.profileCompatibility,e.levelIdc,255].concat([n.length],a,[r.length],s))),u(T.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192]))],e.sarRatio&&(i=e.sarRatio[0],e=e.sarRatio[1],t.push(u(T.pasp,new Uint8Array([(4278190080&i)>>24,(16711680&i)>>16,(65280&i)>>8,255&i,(4278190080&e)>>24,(16711680&e)>>16,(65280&e)>>8,255&e])))),u.apply(null,t)},N=function(e){return u(T.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,(65280&e.channelcount)>>8,255&e.channelcount,(65280&e.samplesize)>>8,255&e.samplesize,0,0,0,0,(65280&e.samplerate)>>8,255&e.samplerate,0,0]),i(e))},c=function(e){e=new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,(4278190080&e.id)>>24,(16711680&e.id)>>16,(65280&e.id)>>8,255&e.id,0,0,0,0,(4278190080&e.duration)>>24,(16711680&e.duration)>>16,(65280&e.duration)>>8,255&e.duration,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,(65280&e.width)>>8,255&e.width,0,0,(65280&e.height)>>8,255&e.height,0,0]);return u(T.tkhd,e)},v=function(e){var t,i=u(T.tfhd,new Uint8Array([0,0,0,58,(4278190080&e.id)>>24,(16711680&e.id)>>16,(65280&e.id)>>8,255&e.id,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0])),n=Math.floor(e.baseMediaDecodeTime/V),r=Math.floor(e.baseMediaDecodeTime%V),n=u(T.tfdt,new Uint8Array([1,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,r>>>24&255,r>>>16&255,r>>>8&255,255&r]));return"audio"===e.type?(t=b(e,92),u(T.traf,i,n,t)):(r=m(e),t=b(e,r.length+92),u(T.traf,i,n,t,r))},d=function(e){return e.duration=e.duration||4294967295,u(T.trak,c(e),h(e))},_=function(e){var t=new Uint8Array([0,0,0,0,(4278190080&e.id)>>24,(16711680&e.id)>>16,(65280&e.id)>>8,255&e.id,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return"video"!==e.type&&(t[t.length-1]=0),u(T.trex,t)},U=function(e,t){var i=0,n=0,r=0,a=0;return e.length&&(void 0!==e[0].duration&&(i=1),void 0!==e[0].size&&(n=2),void 0!==e[0].flags&&(r=4),void 0!==e[0].compositionTimeOffset&&(a=8)),[0,0,i|n|r|a,1,(4278190080&e.length)>>>24,(16711680&e.length)>>>16,(65280&e.length)>>>8,255&e.length,(4278190080&t)>>>24,(16711680&t)>>>16,(65280&t)>>>8,255&t]},B=function(e,t){var i,n,r,a,s=e.samples||[];for(t+=20+16*s.length,t=U(s,t),(n=new Uint8Array(t.length+16*s.length)).set(t),i=t.length,a=0;a>>24,n[i++]=(16711680&r.duration)>>>16,n[i++]=(65280&r.duration)>>>8,n[i++]=255&r.duration,n[i++]=(4278190080&r.size)>>>24,n[i++]=(16711680&r.size)>>>16,n[i++]=(65280&r.size)>>>8,n[i++]=255&r.size,n[i++]=r.flags.isLeading<<2|r.flags.dependsOn,n[i++]=r.flags.isDependedOn<<6|r.flags.hasRedundancy<<4|r.flags.paddingValue<<1|r.flags.isNonSyncSample,n[i++]=61440&r.flags.degradationPriority,n[i++]=15&r.flags.degradationPriority,n[i++]=(4278190080&r.compositionTimeOffset)>>>24,n[i++]=(16711680&r.compositionTimeOffset)>>>16,n[i++]=(65280&r.compositionTimeOffset)>>>8,n[i++]=255&r.compositionTimeOffset;return u(T.trun,n)},F=function(e,t){var i,n,r,a,s=e.samples||[];for(t+=20+8*s.length,t=U(s,t),(i=new Uint8Array(t.length+8*s.length)).set(t),n=t.length,a=0;a>>24,i[n++]=(16711680&r.duration)>>>16,i[n++]=(65280&r.duration)>>>8,i[n++]=255&r.duration,i[n++]=(4278190080&r.size)>>>24,i[n++]=(16711680&r.size)>>>16,i[n++]=(65280&r.size)>>>8,i[n++]=255&r.size;return u(T.trun,i)},b=function(e,t){return("audio"===e.type?F:B)(e,t)};n=function(){return u(T.ftyp,w,S,w,E)};function W(e,t){var i={size:0,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0,degradationPriority:0,isNonSyncSample:1}};return i.dataOffset=t,i.compositionTimeOffset=e.pts-e.dts,i.duration=e.duration,i.size=4*e.length,i.size+=e.byteLength,e.keyFrame&&(i.flags.dependsOn=2,i.flags.isNonSyncSample=0),i}function G(e){for(var t=[];e--;)t.push(0);return t}function z(){var e,i;return X||(e={96e3:[ie,[227,64],G(154),[56]],88200:[ie,[231],G(170),[56]],64e3:[ie,[248,192],G(240),[56]],48e3:[ie,[255,192],G(268),[55,148,128],G(54),[112]],44100:[ie,[255,192],G(268),[55,163,128],G(84),[112]],32e3:[ie,[255,192],G(268),[55,234],G(226),[112]],24e3:[ie,[255,192],G(268),[55,255,128],G(268),[111,112],G(126),[224]],16e3:[ie,[255,192],G(268),[55,255,128],G(268),[111,255],G(269),[223,108],G(195),[1,192]],12e3:[ne,G(268),[3,127,248],G(268),[6,255,240],G(268),[13,255,224],G(268),[27,253,128],G(259),[56]],11025:[ne,G(268),[3,127,248],G(268),[6,255,240],G(268),[13,255,224],G(268),[27,255,192],G(268),[55,175,128],G(108),[112]],8e3:[ne,G(268),[3,121,16],G(47),[7]]},i=e,X=Object.keys(i).reduce(function(e,t){return e[t]=new Uint8Array(i[t].reduce(function(e,t){return e.concat(t)},[])),e},{})),X}var X,K=function(e){return u(T.mdat,e)},Y=We,Q=function(e){var t=n(),i=s(e),e=new Uint8Array(t.byteLength+i.byteLength);return e.set(t),e.set(i,t.byteLength),e},$=function(e){var t,i,n=[],r=[];for(r.byteLength=0,r.nalCount=0,r.duration=0,t=n.byteLength=0;t=i?e:(t.minSegmentDts=1/0,e.filter(function(e){return e.dts>=i&&(t.minSegmentDts=Math.min(t.minSegmentDts,e.dts),t.minSegmentPts=t.minSegmentDts,!0)}))},ge=function(e){for(var t,i=[],n=0;n=this.virtualRowCount&&"function"==typeof this.beforeRowOverflow&&this.beforeRowOverflow(e),0this.virtualRowCount;)this.rows.shift(),this.rowIdx--},Ae.prototype.isEmpty=function(){return 0===this.rows.length||1===this.rows.length&&""===this.rows[0]},Ae.prototype.addText=function(e){this.rows[this.rowIdx]+=e},Ae.prototype.backspace=function(){var e;this.isEmpty()||(e=this.rows[this.rowIdx],this.rows[this.rowIdx]=e.substr(0,e.length-1))};function Le(e,t,i){this.serviceNum=e,this.text="",this.currentWindow=new Ae(-1),this.windows=[],this.stream=i,"string"==typeof t&&this.createTextDecoder(t)}Le.prototype.init=function(e,t){this.startPts=e;for(var i=0;i<8;i++)this.windows[i]=new Ae(i),"function"==typeof t&&(this.windows[i].beforeRowOverflow=t)},Le.prototype.setCurrentWindow=function(e){this.currentWindow=this.windows[e]},Le.prototype.createTextDecoder=function(t){if("undefined"==typeof TextDecoder)this.stream.trigger("log",{level:"warn",message:"The `encoding` option is unsupported without TextDecoder support"});else try{this.textDecoder_=new TextDecoder(t)}catch(e){this.stream.trigger("log",{level:"warn",message:"TextDecoder could not be created with "+t+" encoding. "+e})}};var De=function e(t){t=t||{},e.prototype.init.call(this);var i,n=this,r=t.captionServices||{},a={};Object.keys(r).forEach(function(e){i=r[e],/^SERVICE/.test(e)&&(a[e]=i.encoding)}),this.serviceEncodings=a,this.current708Packet=null,this.services={},this.push=function(e){(3===e.type||null===n.current708Packet)&&n.new708Packet(),n.add708Bytes(e)}};De.prototype=new j,De.prototype.new708Packet=function(){null!==this.current708Packet&&this.push708Packet(),this.current708Packet={data:[],ptsVals:[]}},De.prototype.add708Bytes=function(e){var t=e.ccData,i=t>>>8,t=255&t;this.current708Packet.ptsVals.push(e.pts),this.current708Packet.data.push(i),this.current708Packet.data.push(t)},De.prototype.push708Packet=function(){var e,t=this.current708Packet,i=t.data,n=null,r=0,a=i[r++];for(t.seq=a>>6,t.sizeCode=63&a;r>5)&&0>5,t.rowLock=(16&n)>>4,t.columnLock=(8&n)>>3,t.priority=7&n,n=i[++e],t.relativePositioning=(128&n)>>7,t.anchorVertical=127&n,n=i[++e],t.anchorHorizontal=n,n=i[++e],t.anchorPoint=(240&n)>>4,t.rowCount=15&n,n=i[++e],t.columnCount=63&n,n=i[++e],t.windowStyle=(56&n)>>3,t.penStyle=7&n,t.virtualRowCount=t.rowCount+1,e},De.prototype.setWindowAttributes=function(e,t){var i=this.current708Packet.data,n=i[e],t=t.currentWindow.winAttr,n=i[++e];return t.fillOpacity=(192&n)>>6,t.fillRed=(48&n)>>4,t.fillGreen=(12&n)>>2,t.fillBlue=3&n,n=i[++e],t.borderType=(192&n)>>6,t.borderRed=(48&n)>>4,t.borderGreen=(12&n)>>2,t.borderBlue=3&n,n=i[++e],t.borderType+=(128&n)>>5,t.wordWrap=(64&n)>>6,t.printDirection=(48&n)>>4,t.scrollDirection=(12&n)>>2,t.justify=3&n,n=i[++e],t.effectSpeed=(240&n)>>4,t.effectDirection=(12&n)>>2,t.displayEffect=3&n,e},De.prototype.flushDisplayed=function(e,t){for(var i=[],n=0;n<8;n++)t.windows[n].visible&&!t.windows[n].isEmpty()&&i.push(t.windows[n].getText());t.endPts=e,t.text=i.join("\n\n"),this.pushCaption(t),t.startPts=e},De.prototype.pushCaption=function(e){""!==e.text&&(this.trigger("data",{startPts:e.startPts,endPts:e.endPts,text:e.text,stream:"cc708_"+e.serviceNum}),e.text="",e.startPts=e.endPts)},De.prototype.displayWindows=function(e,t){var i=this.current708Packet.data[++e],n=this.getPts(e);this.flushDisplayed(n,t);for(var r=0;r<8;r++)i&1<>4,t.offset=(12&n)>>2,t.penSize=3&n,n=i[++e],t.italics=(128&n)>>7,t.underline=(64&n)>>6,t.edgeType=(56&n)>>3,t.fontStyle=7&n,e},De.prototype.setPenColor=function(e,t){var i=this.current708Packet.data,n=i[e],t=t.currentWindow.penColor,n=i[++e];return t.fgOpacity=(192&n)>>6,t.fgRed=(48&n)>>4,t.fgGreen=(12&n)>>2,t.fgBlue=3&n,n=i[++e],t.bgOpacity=(192&n)>>6,t.bgRed=(48&n)>>4,t.bgGreen=(12&n)>>2,t.bgBlue=3&n,n=i[++e],t.edgeRed=(48&n)>>4,t.edgeGreen=(12&n)>>2,t.edgeBlue=3&n,e},De.prototype.setPenLocation=function(e,t){var i=this.current708Packet.data,n=i[e],r=t.currentWindow.penLoc;return t.currentWindow.pendingNewLine=!0,n=i[++e],r.row=15&n,n=i[++e],r.column=63&n,e},De.prototype.reset=function(e,t){var i=this.getPts(e);return this.flushDisplayed(i,t),this.initService(t.serviceNum,e)};function Oe(e){return null===e?"":(e=Me[e]||e,String.fromCharCode(e))}function Re(){for(var e=[],t=15;t--;)e.push("");return e}var Me={42:225,92:233,94:237,95:243,96:250,123:231,124:247,125:209,126:241,127:9608,304:174,305:176,306:189,307:191,308:8482,309:162,310:163,311:9834,312:224,313:160,314:232,315:226,316:234,317:238,318:244,319:251,544:193,545:201,546:211,547:218,548:220,549:252,550:8216,551:161,552:42,553:39,554:8212,555:169,556:8480,557:8226,558:8220,559:8221,560:192,561:194,562:199,563:200,564:202,565:203,566:235,567:206,568:207,569:239,570:212,571:217,572:249,573:219,574:171,575:187,800:195,801:227,802:205,803:204,804:236,805:210,806:242,807:213,808:245,809:123,810:125,811:92,812:94,813:95,814:124,815:126,816:196,817:228,818:214,819:246,820:223,821:165,822:164,823:9474,824:197,825:229,826:216,827:248,828:9484,829:9488,830:9492,831:9496},Ne=[4352,4384,4608,4640,5376,5408,5632,5664,5888,5920,4096,4864,4896,5120,5152],Ue=function e(t,i){e.prototype.init.call(this),this.field_=t||0,this.dataChannel_=i||0,this.name_="CC"+(1+(this.field_<<1|this.dataChannel_)),this.setConstants(),this.reset(),this.push=function(e){var t,i,n,r,a=32639&e.ccData;a!==this.lastControlCode_?(4096==(61440&a)?this.lastControlCode_=a:a!==this.PADDING_&&(this.lastControlCode_=null),t=a>>>8,i=255&a,a===this.PADDING_||(a===this.RESUME_CAPTION_LOADING_?this.mode_="popOn":a===this.END_OF_CAPTION_?(this.mode_="popOn",this.clearFormatting(e.pts),this.flushDisplayed(e.pts),r=this.displayed_,this.displayed_=this.nonDisplayed_,this.nonDisplayed_=r,this.startPts_=e.pts):a===this.ROLL_UP_2_ROWS_?(this.rollUpRows_=2,this.setRollUp(e.pts)):a===this.ROLL_UP_3_ROWS_?(this.rollUpRows_=3,this.setRollUp(e.pts)):a===this.ROLL_UP_4_ROWS_?(this.rollUpRows_=4,this.setRollUp(e.pts)):a===this.CARRIAGE_RETURN_?(this.clearFormatting(e.pts),this.flushDisplayed(e.pts),this.shiftRowsUp_(),this.startPts_=e.pts):a===this.BACKSPACE_?"popOn"===this.mode_?this.nonDisplayed_[this.row_]=this.nonDisplayed_[this.row_].slice(0,-1):this.displayed_[this.row_]=this.displayed_[this.row_].slice(0,-1):a===this.ERASE_DISPLAYED_MEMORY_?(this.flushDisplayed(e.pts),this.displayed_=Re()):a===this.ERASE_NON_DISPLAYED_MEMORY_?this.nonDisplayed_=Re():a===this.RESUME_DIRECT_CAPTIONING_?("paintOn"!==this.mode_&&(this.flushDisplayed(e.pts),this.displayed_=Re()),this.mode_="paintOn",this.startPts_=e.pts):this.isSpecialCharacter(t,i)?(n=Oe((t=(3&t)<<8)|i),this[this.mode_](e.pts,n),this.column_++):this.isExtCharacter(t,i)?("popOn"===this.mode_?this.nonDisplayed_[this.row_]=this.nonDisplayed_[this.row_].slice(0,-1):this.displayed_[this.row_]=this.displayed_[this.row_].slice(0,-1),n=Oe((t=(3&t)<<8)|i),this[this.mode_](e.pts,n),this.column_++):this.isMidRowCode(t,i)?(this.clearFormatting(e.pts),this[this.mode_](e.pts," "),this.column_++,14==(14&i)&&this.addFormatting(e.pts,["i"]),1==(1&i)&&this.addFormatting(e.pts,["u"])):this.isOffsetControlCode(t,i)?this.column_+=3&i:this.isPAC(t,i)?(r=Ne.indexOf(7968&a),"rollUp"===this.mode_&&(r-this.rollUpRows_+1<0&&(r=this.rollUpRows_-1),this.setRollUp(e.pts,r)),r!==this.row_&&(this.clearFormatting(e.pts),this.row_=r),1&i&&-1===this.formatting_.indexOf("u")&&this.addFormatting(e.pts,["u"]),16==(16&a)&&(this.column_=4*((14&a)>>1)),this.isColorPAC(i)&&14==(14&i)&&this.addFormatting(e.pts,["i"])):this.isNormalChar(t)&&(0===i&&(i=null),n=Oe(t),n+=Oe(i),this[this.mode_](e.pts,n),this.column_+=n.length))):this.lastControlCode_=null}};Ue.prototype=new j,Ue.prototype.flushDisplayed=function(e){var t=this.displayed_.map(function(e,t){try{return e.trim()}catch(e){return this.trigger("log",{level:"warn",message:"Skipping a malformed 608 caption at index "+t+"."}),""}},this).join("\n").replace(/^\n+|\n+$/g,"");t.length&&this.trigger("data",{startPts:this.startPts_,endPts:e,text:t,stream:this.name_})},Ue.prototype.reset=function(){this.mode_="popOn",this.topRow_=0,this.startPts_=0,this.displayed_=Re(),this.nonDisplayed_=Re(),this.lastControlCode_=null,this.column_=0,this.row_=14,this.rollUpRows_=2,this.formatting_=[]},Ue.prototype.setConstants=function(){0===this.dataChannel_?(this.BASE_=16,this.EXT_=17,this.CONTROL_=(20|this.field_)<<8,this.OFFSET_=23):1===this.dataChannel_&&(this.BASE_=24,this.EXT_=25,this.CONTROL_=(28|this.field_)<<8,this.OFFSET_=31),this.PADDING_=0,this.RESUME_CAPTION_LOADING_=32|this.CONTROL_,this.END_OF_CAPTION_=47|this.CONTROL_,this.ROLL_UP_2_ROWS_=37|this.CONTROL_,this.ROLL_UP_3_ROWS_=38|this.CONTROL_,this.ROLL_UP_4_ROWS_=39|this.CONTROL_,this.CARRIAGE_RETURN_=45|this.CONTROL_,this.RESUME_DIRECT_CAPTIONING_=41|this.CONTROL_,this.BACKSPACE_=33|this.CONTROL_,this.ERASE_DISPLAYED_MEMORY_=44|this.CONTROL_,this.ERASE_NON_DISPLAYED_MEMORY_=46|this.CONTROL_},Ue.prototype.isSpecialCharacter=function(e,t){return e===this.EXT_&&48<=t&&t<=63},Ue.prototype.isExtCharacter=function(e,t){return(e===this.EXT_+1||e===this.EXT_+2)&&32<=t&&t<=63},Ue.prototype.isMidRowCode=function(e,t){return e===this.EXT_&&32<=t&&t<=47},Ue.prototype.isOffsetControlCode=function(e,t){return e===this.OFFSET_&&33<=t&&t<=35},Ue.prototype.isPAC=function(e,t){return e>=this.BASE_&&e"},"");this[this.mode_](e,t)},Ue.prototype.clearFormatting=function(e){var t;this.formatting_.length&&(t=this.formatting_.reverse().reduce(function(e,t){return e+""},""),this.formatting_=[],this[this.mode_](e,t))},Ue.prototype.popOn=function(e,t){var i=this.nonDisplayed_[this.row_];this.nonDisplayed_[this.row_]=i+=t},Ue.prototype.rollUp=function(e,t){var i=this.displayed_[this.row_];this.displayed_[this.row_]=i+=t},Ue.prototype.shiftRowsUp_=function(){for(var e=0;e>>2,s*=4,s+=3&a[7],o.timeStamp=s,void 0===t.pts&&void 0===t.dts&&(t.pts=o.timeStamp,t.dts=o.timeStamp),this.trigger("timestamp",o))),t.frames.push(o),i+=10,(i+=n)>>4&&(i+=e[i]+1),0===t.pid)t.type="pat",n(e.subarray(i),t),this.trigger("data",t);else if(t.pid===this.pmtPid)for(t.type="pmt",n(e.subarray(i),t),this.trigger("data",t);this.packetsWaitingForPmt.length;)this.processPes_.apply(this,this.packetsWaitingForPmt.shift());else void 0===this.programMapTable?this.packetsWaitingForPmt.push([e,i,t]):this.processPes_(e,i,t)},this.processPes_=function(e,t,i){i.pid===this.programMapTable.video?i.streamType=je.H264_STREAM_TYPE:i.pid===this.programMapTable.audio?i.streamType=je.ADTS_STREAM_TYPE:i.streamType=this.programMapTable["timed-metadata"][i.pid],i.type="pes",i.data=e.subarray(t),this.trigger("data",i)}}).prototype=new j,Xe.STREAM_TYPES={h264:27,adts:15},(Ke=function(){function n(e,t,i){var n,r,a,s,o=new Uint8Array(e.size),u={type:t},l=0,d=0;if(e.data.length&&!(e.size<9)){for(u.trackId=e.data[0].pid,l=0;l>>3,a.pts*=4,a.pts+=(6&r[13])>>>1,a.dts=a.pts,64&s&&(a.dts=(14&r[14])<<27|(255&r[15])<<20|(254&r[16])<<12|(255&r[17])<<5|(254&r[18])>>>3,a.dts*=4,a.dts+=(6&r[18])>>>1)),a.data=r.subarray(9+r[8])),t="video"===t||u.packetLength<=e.size,(i||t)&&(e.size=0,e.data.length=0),t&&c.trigger("data",u)}}var t,c=this,r=!1,a={data:[],size:0},s={data:[],size:0},o={data:[],size:0};Ke.prototype.init.call(this),this.push=function(i){({pat:function(){},pes:function(){var e,t;switch(i.streamType){case je.H264_STREAM_TYPE:e=a,t="video";break;case je.ADTS_STREAM_TYPE:e=s,t="audio";break;case je.METADATA_STREAM_TYPE:e=o,t="timed-metadata";break;default:return}i.payloadUnitStartIndicator&&n(e,t,!0),e.data.push(i),e.size+=i.data.byteLength},pmt:function(){var e={type:"metadata",tracks:[]};null!==(t=i.programMapTable).video&&e.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+t.video,codec:"avc",type:"video"}),null!==t.audio&&e.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+t.audio,codec:"adts",type:"audio"}),r=!0,c.trigger("data",e)}})[i.type]()},this.reset=function(){a.size=0,a.data.length=0,s.size=0,s.data.length=0,this.trigger("reset")},this.flushStreams_=function(){n(a,"video"),n(s,"audio"),n(o,"timed-metadata")},this.flush=function(){var e;!r&&t&&(e={type:"metadata",tracks:[]},null!==t.video&&e.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+t.video,codec:"avc",type:"video"}),null!==t.audio&&e.tracks.push({timelineStartInfo:{baseMediaDecodeTime:0},id:+t.audio,codec:"adts",type:"audio"}),c.trigger("data",e)),r=!1,this.flushStreams_(),this.trigger("done")}}).prototype=new j;var Qe,$e={PAT_PID:0,MP2T_PACKET_LENGTH:188,TransportPacketStream:Ye,TransportParseStream:Xe,ElementaryStream:Ke,TimestampRolloverStream:We,CaptionStream:Fe.CaptionStream,Cea608Stream:Fe.Cea608Stream,Cea708Stream:Fe.Cea708Stream,MetadataStream:e};for(Qe in je)je.hasOwnProperty(Qe)&&($e[Qe]=je[Qe]);var Je=$e,Ze=ue,et=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],tt=function(u){var l,d=0;tt.prototype.init.call(this),this.skipWarn_=function(e,t){this.trigger("log",{level:"warn",message:"adts skiping bytes "+e+" to "+t+" in frame "+d+" outside syncword"})},this.push=function(e){var t,i,n,r,a,s,o=0;if(u||(d=0),"audio"===e.type){for(l&&l.length?(n=l,(l=new Uint8Array(n.byteLength+e.data.byteLength)).set(n),l.set(e.data,n.byteLength)):l=e.data;o+7>5,a=(r=1024*(1+(3&l[o+6])))*Ze/et[(60&l[o+2])>>>2],l.byteLength-o>>6&3),channelcount:(1&l[o+2])<<2|(192&l[o+3])>>>6,samplerate:et[(60&l[o+2])>>>2],samplingfrequencyindex:(60&l[o+2])>>>2,samplesize:16,data:l.subarray(o+7+i,o+t)}),d++,o+=t}else"number"!=typeof s&&(s=o),o++;"number"==typeof s&&(this.skipWarn_(s,o),s=null),l=l.subarray(o)}},this.flush=function(){d=0,this.trigger("done")},this.reset=function(){l=void 0,this.trigger("reset")},this.endTimeline=function(){l=void 0,this.trigger("endedtimeline")}};tt.prototype=new j;var it,nt,rt=tt,at=function(n){var r=n.byteLength,a=0,s=0;this.length=function(){return 8*r},this.bitsAvailable=function(){return 8*r+s},this.loadWord=function(){var e=n.byteLength-r,t=new Uint8Array(4),i=Math.min(4,r);if(0===i)throw new Error("no bytes available");t.set(n.subarray(e,e+i)),a=new DataView(t.buffer).getUint32(0),s=8*i,r-=i},this.skipBits=function(e){var t;e>>32-t;return 0<(s-=t)?a<<=t:0>>e))return a<<=e,s-=e,e;return this.loadWord(),e+this.skipLeadingZeros()},this.skipUnsignedExpGolomb=function(){this.skipBits(1+this.skipLeadingZeros())},this.skipExpGolomb=function(){this.skipBits(1+this.skipLeadingZeros())},this.readUnsignedExpGolomb=function(){var e=this.skipLeadingZeros();return this.readBits(e+1)-1},this.readExpGolomb=function(){var e=this.readUnsignedExpGolomb();return 1&e?1+e>>>1:-1*(e>>>1)},this.readBoolean=function(){return 1===this.readBits(1)},this.readUnsignedByte=function(){return this.readBits(8)},this.loadWord()},st=function(){var n,r,a=0;st.prototype.init.call(this),this.push=function(e){for(var t,i=(r=r?((t=new Uint8Array(r.byteLength+e.data.byteLength)).set(r),t.set(e.data,r.byteLength),t):e.data).byteLength;a>4?i+20:i+10}function ut(e,t){return e.length-t<10||e[t]!=="I".charCodeAt(0)||e[t+1]!=="D".charCodeAt(0)||e[t+2]!=="3".charCodeAt(0)?t:ut(e,t+=ot(e,t))}function lt(e){return e[0]<<21|e[1]<<14|e[2]<<7|e[3]}var e={H264Stream:it,NalByteStream:st},dt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],ct={isLikelyAacData:function(e){var t=ut(e,0);return e.length>=t+2&&255==(255&e[t])&&240==(240&e[t+1])&&16==(22&e[t+1])},parseId3TagSize:ot,parseAdtsSize:function(e,t){var i=(224&e[t+5])>>5,n=e[t+4]<<3;return 6144&e[t+3]|n|i},parseType:function(e,t){return e[t]==="I".charCodeAt(0)&&e[t+1]==="D".charCodeAt(0)&&e[t+2]==="3".charCodeAt(0)?"timed-metadata":!0&e[t]&&240==(240&e[t+1])?"audio":null},parseSampleRate:function(e){for(var t=0;t+5>>2];t++}return null},parseAacTimestamp:function(e){var t,i=10;64&e[5]&&(i+=4,i+=lt(e.subarray(10,14)));do{if((t=lt(e.subarray(i+4,i+8)))<1)return null;if("PRIV"===String.fromCharCode(e[i],e[i+1],e[i+2],e[i+3]))for(var n=e.subarray(i+10,i+t+10),r=0;r>>2;return s*=4,s+=3&a[7]}}while(i+=10,(i+=t)a.length)break;t={type:"audio",data:a.subarray(r,r+n),pts:s,dts:s},this.trigger("data",t),r+=n}else{if(a.length-r<10)break;if(r+(n=ct.parseId3TagSize(a,r))>a.length)break;t={type:"timed-metadata",data:a.subarray(r,r+n)},this.trigger("data",t),r+=n}e=a.length-r,a=0i.pts?u++:(t++,a-=n.byteLength,s-=n.nalCount,o-=n.duration);return 0===t?e:t===e.length?null:((r=e.slice(t)).byteLength=a,r.duration=o,r.nalCount=s,r.pts=r[0].pts,r.dts=r[0].dts,r)},this.alignGopsAtEnd_=function(e){for(var t,i,n=l.length-1,r=e.length-1,a=null,s=!1;0<=n&&0<=r;){if(t=l[n],i=e[r],t.pts===i.pts){s=!0;break}t.pts>i.pts?n--:(n===l.length-1&&(a=r),r--)}if(!s&&null===a)return null;if(0===(u=s?r:a))return e;var o=e.slice(u),u=o.reduce(function(e,t){return e.byteLength+=t.byteLength,e.duration+=t.duration,e.nalCount+=t.nalCount,e},{byteLength:0,duration:0,nalCount:0});return o.byteLength=u.byteLength,o.duration=u.duration,o.nalCount=u.nalCount,o.pts=o[0].pts,o.dts=o[0].dts,o},this.alignGopsWith=function(e){l=e}}).prototype=new j,(_t=function(e,t){this.numberOfTracks=0,this.metadataStream=t,"undefined"!=typeof(e=e||{}).remux?this.remuxTracks=!!e.remux:this.remuxTracks=!0,"boolean"==typeof e.keepOriginalTimestamps?this.keepOriginalTimestamps=e.keepOriginalTimestamps:this.keepOriginalTimestamps=!1,this.pendingTracks=[],this.videoTrack=null,this.pendingBoxes=[],this.pendingCaptions=[],this.pendingMetadata=[],this.pendingBytes=0,this.emittedTracks=0,_t.prototype.init.call(this),this.push=function(e){return e.text?this.pendingCaptions.push(e):e.frames?this.pendingMetadata.push(e):(this.pendingTracks.push(e.track),this.pendingBytes+=e.boxes.byteLength,"video"===e.track.type&&(this.videoTrack=e.track,this.pendingBoxes.push(e.boxes)),void("audio"===e.track.type&&(this.audioTrack=e.track,this.pendingBoxes.unshift(e.boxes))))}}).prototype=new j,_t.prototype.flush=function(e){var t,i,n,r=0,a={captions:[],captionStreams:{},metadata:[],info:{}},s=0;if(this.pendingTracks.length=this.numberOfTracks&&(this.trigger("done"),this.emittedTracks=0))}if(this.videoTrack?(s=this.videoTrack.timelineStartInfo.pts,wt.forEach(function(e){a.info[e]=this.videoTrack[e]},this)):this.audioTrack&&(s=this.audioTrack.timelineStartInfo.pts,Tt.forEach(function(e){a.info[e]=this.audioTrack[e]},this)),this.videoTrack||this.audioTrack){for(1===this.pendingTracks.length?a.type=this.pendingTracks[0].type:a.type="combined",this.emittedTracks+=this.pendingTracks.length,e=Q(this.pendingTracks),a.initSegment=new Uint8Array(e.byteLength),a.initSegment.set(e),a.data=new Uint8Array(this.pendingBytes),n=0;n=this.numberOfTracks&&(this.trigger("done"),this.emittedTracks=0)},_t.prototype.setRemux=function(e){this.remuxTracks=e},(vt=function(n){var r,a,s=this,i=!0;vt.prototype.init.call(this),this.baseMediaDecodeTime=(n=n||{}).baseMediaDecodeTime||0,this.transmuxPipeline_={},this.setupAacPipeline=function(){var t={};(this.transmuxPipeline_=t).type="aac",t.metadataStream=new Je.MetadataStream,t.aacStream=new bt,t.audioTimestampRolloverStream=new Je.TimestampRolloverStream("audio"),t.timedMetadataTimestampRolloverStream=new Je.TimestampRolloverStream("timed-metadata"),t.adtsStream=new rt,t.coalesceStream=new _t(n,t.metadataStream),t.headOfPipeline=t.aacStream,t.aacStream.pipe(t.audioTimestampRolloverStream).pipe(t.adtsStream),t.aacStream.pipe(t.timedMetadataTimestampRolloverStream).pipe(t.metadataStream).pipe(t.coalesceStream),t.metadataStream.on("timestamp",function(e){t.aacStream.setTimestamp(e.timeStamp)}),t.aacStream.on("data",function(e){"timed-metadata"!==e.type&&"audio"!==e.type||t.audioSegmentStream||(a=a||{timelineStartInfo:{baseMediaDecodeTime:s.baseMediaDecodeTime},codec:"adts",type:"audio"},t.coalesceStream.numberOfTracks++,t.audioSegmentStream=new Ct(a,n),t.audioSegmentStream.on("log",s.getLogTrigger_("audioSegmentStream")),t.audioSegmentStream.on("timingInfo",s.trigger.bind(s,"audioTimingInfo")),t.adtsStream.pipe(t.audioSegmentStream).pipe(t.coalesceStream),s.trigger("trackinfo",{hasAudio:!!a,hasVideo:!!r}))}),t.coalesceStream.on("data",this.trigger.bind(this,"data")),t.coalesceStream.on("done",this.trigger.bind(this,"done")),ft(this,t)},this.setupTsPipeline=function(){var i={};(this.transmuxPipeline_=i).type="ts",i.metadataStream=new Je.MetadataStream,i.packetStream=new Je.TransportPacketStream,i.parseStream=new Je.TransportParseStream,i.elementaryStream=new Je.ElementaryStream,i.timestampRolloverStream=new Je.TimestampRolloverStream,i.adtsStream=new rt,i.h264Stream=new St,i.captionStream=new Je.CaptionStream(n),i.coalesceStream=new _t(n,i.metadataStream),i.headOfPipeline=i.packetStream,i.packetStream.pipe(i.parseStream).pipe(i.elementaryStream).pipe(i.timestampRolloverStream),i.timestampRolloverStream.pipe(i.h264Stream),i.timestampRolloverStream.pipe(i.adtsStream),i.timestampRolloverStream.pipe(i.metadataStream).pipe(i.coalesceStream),i.h264Stream.pipe(i.captionStream).pipe(i.coalesceStream),i.elementaryStream.on("data",function(e){var t;if("metadata"===e.type){for(t=e.tracks.length;t--;)r||"video"!==e.tracks[t].type?a||"audio"!==e.tracks[t].type||((a=e.tracks[t]).timelineStartInfo.baseMediaDecodeTime=s.baseMediaDecodeTime):(r=e.tracks[t]).timelineStartInfo.baseMediaDecodeTime=s.baseMediaDecodeTime;r&&!i.videoSegmentStream&&(i.coalesceStream.numberOfTracks++,i.videoSegmentStream=new yt(r,n),i.videoSegmentStream.on("log",s.getLogTrigger_("videoSegmentStream")),i.videoSegmentStream.on("timelineStartInfo",function(e){a&&!n.keepOriginalTimestamps&&(a.timelineStartInfo=e,i.audioSegmentStream.setEarliestDts(e.dts-s.baseMediaDecodeTime))}),i.videoSegmentStream.on("processedGopsInfo",s.trigger.bind(s,"gopInfo")),i.videoSegmentStream.on("segmentTimingInfo",s.trigger.bind(s,"videoSegmentTimingInfo")),i.videoSegmentStream.on("baseMediaDecodeTime",function(e){a&&i.audioSegmentStream.setVideoBaseMediaDecodeTime(e)}),i.videoSegmentStream.on("timingInfo",s.trigger.bind(s,"videoTimingInfo")),i.h264Stream.pipe(i.videoSegmentStream).pipe(i.coalesceStream)),a&&!i.audioSegmentStream&&(i.coalesceStream.numberOfTracks++,i.audioSegmentStream=new Ct(a,n),i.audioSegmentStream.on("log",s.getLogTrigger_("audioSegmentStream")),i.audioSegmentStream.on("timingInfo",s.trigger.bind(s,"audioTimingInfo")),i.audioSegmentStream.on("segmentTimingInfo",s.trigger.bind(s,"audioSegmentTimingInfo")),i.adtsStream.pipe(i.audioSegmentStream).pipe(i.coalesceStream)),s.trigger("trackinfo",{hasAudio:!!a,hasVideo:!!r})}}),i.coalesceStream.on("data",this.trigger.bind(this,"data")),i.coalesceStream.on("id3Frame",function(e){e.dispatchType=i.metadataStream.dispatchType,s.trigger("id3Frame",e)}),i.coalesceStream.on("caption",this.trigger.bind(this,"caption")),i.coalesceStream.on("done",this.trigger.bind(this,"done")),ft(this,i)},this.setBaseMediaDecodeTime=function(e){var t=this.transmuxPipeline_;n.keepOriginalTimestamps||(this.baseMediaDecodeTime=e),a&&(a.timelineStartInfo.dts=void 0,a.timelineStartInfo.pts=void 0,_e(a),t.audioTimestampRolloverStream&&t.audioTimestampRolloverStream.discontinuity()),r&&(t.videoSegmentStream&&(t.videoSegmentStream.gopCache_=[]),r.timelineStartInfo.dts=void 0,r.timelineStartInfo.pts=void 0,_e(r),t.captionStream.reset()),t.timestampRolloverStream&&t.timestampRolloverStream.discontinuity()},this.setAudioAppendStart=function(e){a&&this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(e)},this.setRemux=function(e){var t=this.transmuxPipeline_;n.remux=e,t&&t.coalesceStream&&t.coalesceStream.setRemux(e)},this.alignGopsWith=function(e){r&&this.transmuxPipeline_.videoSegmentStream&&this.transmuxPipeline_.videoSegmentStream.alignGopsWith(e)},this.getLogTrigger_=function(t){var i=this;return function(e){e.stream=t,i.trigger("log",e)}},this.push=function(e){var t;i&&((t=Et(e))&&"aac"!==this.transmuxPipeline_.type?this.setupAacPipeline():t||"ts"===this.transmuxPipeline_.type||this.setupTsPipeline(),i=!1),this.transmuxPipeline_.headOfPipeline.push(e)},this.flush=function(){i=!0,this.transmuxPipeline_.headOfPipeline.flush()},this.endTimeline=function(){this.transmuxPipeline_.headOfPipeline.endTimeline()},this.reset=function(){this.transmuxPipeline_.headOfPipeline&&this.transmuxPipeline_.headOfPipeline.reset()},this.resetCaptions=function(){this.transmuxPipeline_.captionStream&&this.transmuxPipeline_.captionStream.reset()}}).prototype=new j;function It(e,d){var i=Mt(e,["moof","traf"]),e=Mt(e,["mdat"]),c={},n=[];return e.forEach(function(e,t){t=i[t];n.push({mdat:e,traf:t})}),n.forEach(function(e){var t,i,n,r,a,s=e.mdat,o=e.traf,u=Mt(o,["tfhd"]),l=Ht(u[0]),e=l.trackId,u=Mt(o,["tfdt"]),u=0>>4&&(t+=e[4]+1),t}function Lt(e){switch(e){case 5:return"slice_layer_without_partitioning_rbsp_idr";case 6:return"sei_rbsp";case 7:return"seq_parameter_set_rbsp";case 8:return"pic_parameter_set_rbsp";case 9:return"access_unit_delimiter_rbsp";default:return null}}var Dt={Transmuxer:vt,VideoSegmentStream:yt,AudioSegmentStream:Ct,AUDIO_PROPERTIES:Tt,VIDEO_PROPERTIES:wt,generateSegmentTimingInfo:gt},e=function(e){return e>>>0},Ot=function(e){var t="";return t+=String.fromCharCode(e[0]),t+=String.fromCharCode(e[1]),t+=String.fromCharCode(e[2]),t+=String.fromCharCode(e[3])},Rt=e,Mt=function e(t,i){var n,r,a,s=[];if(!i.length)return null;for(n=0;n>>2,dependsOn:3&e[0],isDependedOn:(192&e[1])>>>6,hasRedundancy:(48&e[1])>>>4,paddingValue:(14&e[1])>>>1,isNonSyncSample:1&e[1],degradationPriority:e[2]<<8|e[3]}},jt=function(e){var t,i={version:e[0],flags:new Uint8Array(e.subarray(1,4)),samples:[]},n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=1&i.flags[2],a=4&i.flags[2],s=1&i.flags[1],o=2&i.flags[1],u=4&i.flags[1],l=8&i.flags[1],d=n.getUint32(4),c=8;for(r&&(i.dataOffset=n.getInt32(c),c+=4),a&&d&&(t={flags:Ft(e.subarray(c,c+4))},c+=4,s&&(t.duration=n.getUint32(c),c+=4),o&&(t.size=n.getUint32(c),c+=4),l&&(1===i.version?t.compositionTimeOffset=n.getInt32(c):t.compositionTimeOffset=n.getUint32(c),c+=4),i.samples.push(t),d--);d--;)t={},s&&(t.duration=n.getUint32(c),c+=4),o&&(t.size=n.getUint32(c),c+=4),u&&(t.flags=Ft(e.subarray(c,c+4)),c+=4),l&&(1===i.version?t.compositionTimeOffset=n.getInt32(c):t.compositionTimeOffset=n.getUint32(c),c+=4),i.samples.push(t);return i},Ht=function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength),i={version:e[0],flags:new Uint8Array(e.subarray(1,4)),trackId:t.getUint32(4)},n=1&i.flags[2],r=2&i.flags[2],a=8&i.flags[2],s=16&i.flags[2],o=32&i.flags[2],u=65536&i.flags[0],l=131072&i.flags[0],e=8;return n&&(e+=4,i.baseDataOffset=t.getUint32(12),e+=4),r&&(i.sampleDescriptionIndex=t.getUint32(e),e+=4),a&&(i.defaultSampleDuration=t.getUint32(e),e+=4),s&&(i.defaultSampleSize=t.getUint32(e),e+=4),o&&(i.defaultSampleFlags=t.getUint32(e)),u&&(i.durationIsEmpty=!0),!n&&l&&(i.baseDataOffsetIsMoof=!0),i},j="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},j="undefined"!=typeof window?window:"undefined"!=typeof j?j:"undefined"!=typeof self?self:{},qt=j,Vt=ke,Wt=Fe.CaptionStream,Gt=function(){var t,r,a,s,o,i,n=!1;this.isInitialized=function(){return n},this.init=function(e){t=new Wt,n=!0,i=!!e&&e.isPartial,t.on("data",function(e){e.startTime=e.startPts/s,e.endTime=e.endPts/s,o.captions.push(e),o.captionStreams[e.stream]=!0}),t.on("log",function(e){o.logs.push(e)})},this.isNewInit=function(e,t){return!(e&&0===e.length||t&&"object"==typeof t&&0===Object.keys(t).length)&&(a!==e[0]||s!==t[a])},this.parse=function(e,t,i){if(!this.isInitialized())return null;if(!t||!i)return null;if(this.isNewInit(t,i))a=t[0],s=i[a];else if(null===a||!s)return r.push(e),null;for(;0>>2&63).replace(/^0/,"")):t.codec="mp4a.40.2"):t.codec=t.codec.toLowerCase()));e=Mt(e,["mdia","mdhd"])[0];e&&(t.timescale=Yt(e)),s.push(t)}),s},Qt=ke,$t=q,Jt=Ie,Zt={};Zt.ts={parseType:function(e,t){e=xt(e);return 0===e?"pat":e===t?"pmt":t?"pes":null},parsePat:function(e){var t=At(e),i=4+Pt(e);return t&&(i+=e[i]+1),(31&e[i+10])<<8|e[i+11]},parsePmt:function(e){var t={},i=At(e),n=4+Pt(e);if(i&&(n+=e[n]+1),1&e[n+5]){for(var r=3+((15&e[n+1])<<8|e[n+2])-4,a=12+((15&e[n+10])<<8|e[n+11]);a=e.byteLength)return null;var i=null,n=e[t+7];return 192&n&&((i={}).pts=(14&e[t+9])<<27|(255&e[t+10])<<20|(254&e[t+11])<<12|(255&e[t+12])<<5|(254&e[t+13])>>>3,i.pts*=4,i.pts+=(6&e[t+13])>>>1,i.dts=i.pts,64&n&&(i.dts=(14&e[t+14])<<27|(255&e[t+15])<<20|(254&e[t+16])<<12|(255&e[t+17])<<5|(254&e[t+18])>>>3,i.dts*=4,i.dts+=(6&e[t+18])>>>1)),i},videoPacketContainsKeyFrame:function(e){for(var t=4+Pt(e),i=e.subarray(t),n=0,r=0,a=!1;re.length){i=!0;break}null===a&&(t=e.subarray(o,o+s),a=Zt.aac.parseAacTimestamp(t)),o+=s;break;case"audio":if(e.length-o<7){i=!0;break}if((s=Zt.aac.parseAdtsSize(e,o))>e.length){i=!0;break}null===r&&(t=e.subarray(o,o+s),r=Zt.aac.parseSampleRate(t)),n++,o+=s;break;default:o++}if(i)return null}if(null===r||null===a)return null;var u=ii/r;return{audio:[{type:"audio",dts:a,pts:a},{type:"audio",dts:a+1024*n*u,pts:a+1024*n*u}]}}:ti)(e);return r&&(r.audio||r.video)?(e=t,(t=r).audio&&t.audio.length&&("undefined"!=typeof(i=e)&&!isNaN(i)||(i=t.audio[0].dts),t.audio.forEach(function(e){e.dts=Jt(e.dts,i),e.pts=Jt(e.pts,i),e.dtsTime=e.dts/ii,e.ptsTime=e.pts/ii})),t.video&&t.video.length&&("undefined"!=typeof(n=e)&&!isNaN(n)||(n=t.video[0].dts),t.video.forEach(function(e){e.dts=Jt(e.dts,n),e.pts=Jt(e.pts,n),e.dtsTime=e.dts/ii,e.ptsTime=e.pts/ii}),t.firstKeyFrame&&((t=t.firstKeyFrame).dts=Jt(t.dts,n),t.pts=Jt(t.pts,n),t.dtsTime=t.dts/ii,t.ptsTime=t.pts/ii)),r):null},ri=function(){function e(e,t){this.options=t||{},this.self=e,this.init()}var t=e.prototype;return t.init=function(){var i,e;this.transmuxer&&this.transmuxer.dispose(),this.transmuxer=new Dt.Transmuxer(this.options),i=this.self,(e=this.transmuxer).on("data",function(e){var t=e.initSegment;e.initSegment={data:t.buffer,byteOffset:t.byteOffset,byteLength:t.byteLength};t=e.data;e.data=t.buffer,i.postMessage({action:"data",segment:e,byteOffset:t.byteOffset,byteLength:t.byteLength},[e.data])}),e.on("done",function(e){i.postMessage({action:"done"})}),e.on("gopInfo",function(e){i.postMessage({action:"gopInfo",gopInfo:e})}),e.on("videoSegmentTimingInfo",function(e){var t={start:{decode:de(e.start.dts),presentation:de(e.start.pts)},end:{decode:de(e.end.dts),presentation:de(e.end.pts)},baseMediaDecodeTime:de(e.baseMediaDecodeTime)};e.prependedContentDuration&&(t.prependedContentDuration=de(e.prependedContentDuration)),i.postMessage({action:"videoSegmentTimingInfo",videoSegmentTimingInfo:t})}),e.on("audioSegmentTimingInfo",function(e){var t={start:{decode:de(e.start.dts),presentation:de(e.start.pts)},end:{decode:de(e.end.dts),presentation:de(e.end.pts)},baseMediaDecodeTime:de(e.baseMediaDecodeTime)};e.prependedContentDuration&&(t.prependedContentDuration=de(e.prependedContentDuration)),i.postMessage({action:"audioSegmentTimingInfo",audioSegmentTimingInfo:t})}),e.on("id3Frame",function(e){i.postMessage({action:"id3Frame",id3Frame:e})}),e.on("caption",function(e){i.postMessage({action:"caption",caption:e})}),e.on("trackinfo",function(e){i.postMessage({action:"trackinfo",trackInfo:e})}),e.on("audioTimingInfo",function(e){i.postMessage({action:"audioTimingInfo",audioTimingInfo:{start:de(e.start),end:de(e.end)}})}),e.on("videoTimingInfo",function(e){i.postMessage({action:"videoTimingInfo",videoTimingInfo:{start:de(e.start),end:de(e.end)}})}),e.on("log",function(e){i.postMessage({action:"log",log:e})})},t.pushMp4Captions=function(e){this.captionParser||(this.captionParser=new Gt,this.captionParser.init());var t=new Uint8Array(e.data,e.byteOffset,e.byteLength),e=this.captionParser.parse(t,e.trackIds,e.timescales);this.self.postMessage({action:"mp4Captions",captions:e&&e.captions||[],logs:e&&e.logs||[],data:t.buffer},[t.buffer])},t.probeMp4StartTime=function(e){var t=e.timescales,e=e.data,t=Qt(t,e);this.self.postMessage({action:"probeMp4StartTime",startTime:t,data:e},[e.buffer])},t.probeMp4Tracks=function(e){var t=e.data,e=$t(t);this.self.postMessage({action:"probeMp4Tracks",tracks:e,data:t},[t.buffer])},t.probeTs=function(e){var t=e.data,i=e.baseStartTime,e="number"!=typeof i||isNaN(i)?void 0:i*ue,i=ni(t,e),e=null;i&&((e={hasVideo:i.video&&2===i.video.length||!1,hasAudio:i.audio&&2===i.audio.length||!1}).hasVideo&&(e.videoStart=i.video[0].ptsTime),e.hasAudio&&(e.audioStart=i.audio[0].ptsTime)),this.self.postMessage({action:"probeTs",result:e,data:t},[t.buffer])},t.clearAllMp4Captions=function(){this.captionParser&&this.captionParser.clearAllCaptions()},t.clearParsedMp4Captions=function(){this.captionParser&&this.captionParser.clearParsedCaptions()},t.push=function(e){e=new Uint8Array(e.data,e.byteOffset,e.byteLength);this.transmuxer.push(e)},t.reset=function(){this.transmuxer.reset()},t.setTimestampOffset=function(e){e=e.timestampOffset||0;this.transmuxer.setBaseMediaDecodeTime(Math.round(le(e)))},t.setAudioAppendStart=function(e){this.transmuxer.setAudioAppendStart(Math.ceil(le(e.appendStart)))},t.setRemux=function(e){this.transmuxer.setRemux(e.remux)},t.flush=function(e){this.transmuxer.flush(),self.postMessage({action:"done",type:"transmuxed"})},t.endTimeline=function(){this.transmuxer.endTimeline(),self.postMessage({action:"endedtimeline",type:"transmuxed"})},t.alignGopsWith=function(e){this.transmuxer.alignGopsWith(e.gopsToAlignWith.slice())},e}();self.onmessage=function(e){"init"===e.data.action&&e.data.options?this.messageHandlers=new ri(self,e.data.options):(this.messageHandlers||(this.messageHandlers=new ri(self)),e.data&&e.data.action&&"init"!==e.data.action&&this.messageHandlers[e.data.action]&&this.messageHandlers[e.data.action](e.data))}}))),Il=function(e){e.currentTransmux=null,e.transmuxQueue.length&&(e.currentTransmux=e.transmuxQueue.shift(),"function"==typeof e.currentTransmux?e.currentTransmux():Ou(e.currentTransmux))},xl=function(e){Mu("reset",e)},Al=function(e){var t=new Cl;t.currentTransmux=null,t.transmuxQueue=[];var i=t.terminate;return t.terminate=function(){return t.currentTransmux=null,t.transmuxQueue.length=0,i.call(t)},t.postMessage({action:"init",options:e}),t},Pl=2,Ll=-101,Dl=-102,Ol=No("CodecUtils"),Rl=No("PlaylistSelector"),rr=function(){var e=this.useDevicePixelRatio&&window.devicePixelRatio||1;return nl(this.playlists.master,this.systemBandwidth,parseInt(el(this.tech_.el(),"width"),10)*e,parseInt(el(this.tech_.el(),"height"),10)*e,this.limitRenditionByPlayerDimensions,this.masterPlaylistController_)},Ml=function(n){function e(e,t){var i=n.call(this)||this;if(!e)throw new TypeError("Initialization settings are required");if("function"!=typeof e.currentTime)throw new TypeError("No currentTime getter specified");if(!e.mediaSource)throw new TypeError("No MediaSource specified");return i.bandwidth=e.bandwidth,i.throughput={rate:0,count:0},i.roundTrip=NaN,i.resetStats_(),i.mediaIndex=null,i.partIndex=null,i.hasPlayed_=e.hasPlayed,i.currentTime_=e.currentTime,i.seekable_=e.seekable,i.seeking_=e.seeking,i.duration_=e.duration,i.mediaSource_=e.mediaSource,i.vhs_=e.vhs,i.loaderType_=e.loaderType,i.currentMediaInfo_=void 0,i.startingMediaInfo_=void 0,i.segmentMetadataTrack_=e.segmentMetadataTrack,i.goalBufferLength_=e.goalBufferLength,i.sourceType_=e.sourceType,i.sourceUpdater_=e.sourceUpdater,i.inbandTextTracks_=e.inbandTextTracks,i.state_="INIT",i.timelineChangeController_=e.timelineChangeController,i.shouldSaveSegmentTimingInfo_=!0,i.parse708captions_=e.parse708captions,i.useDtsForTimestampOffset_=e.useDtsForTimestampOffset,i.captionServices_=e.captionServices,i.experimentalExactManifestTimings=e.experimentalExactManifestTimings,i.checkBufferTimeout_=null,i.error_=void 0,i.currentTimeline_=-1,i.pendingSegment_=null,i.xhrOptions_=null,i.pendingSegments_=[],i.audioDisabled_=!1,i.isPendingTimestampOffset_=!1,i.gopBuffer_=[],i.timeMapping_=0,i.safeAppend_=11<=tr.browser.IE_VERSION,i.appendInitSegment_={audio:!0,video:!0},i.playlistOfLastInitSegment_={audio:null,video:null},i.callQueue_=[],i.loadQueue_=[],i.metadataQueue_={id3:[],caption:[]},i.waitingOnRemove_=!1,i.quotaExceededErrorRetryTimeout_=null,i.activeInitSegmentId_=null,i.initSegments_={},i.cacheEncryptionKeys_=e.cacheEncryptionKeys,i.keyCache_={},i.decrypter_=e.decrypter,i.syncController_=e.syncController,i.syncPoint_={segmentIndex:0,time:0},i.transmuxer_=i.createTransmuxer_(),i.triggerSyncInfoUpdate_=function(){return i.trigger("syncinfoupdate")},i.syncController_.on("syncinfoupdate",i.triggerSyncInfoUpdate_),i.mediaSource_.addEventListener("sourceopen",function(){i.isEndOfStream_()||(i.ended_=!1)}),i.fetchAtBuffer_=!1,i.logger_=No("SegmentLoader["+i.loaderType_+"]"),Object.defineProperty(ft(i),"state",{get:function(){return this.state_},set:function(e){e!==this.state_&&(this.logger_(this.state_+" -> "+e),this.state_=e,this.trigger("statechange"))}}),i.sourceUpdater_.on("ready",function(){i.hasEnoughInfoToAppend_()&&i.processCallQueue_()}),"main"===i.loaderType_&&i.timelineChangeController_.on("pendingtimelinechange",function(){i.hasEnoughInfoToAppend_()&&i.processCallQueue_()}),"audio"===i.loaderType_&&i.timelineChangeController_.on("timelinechange",function(){i.hasEnoughInfoToLoad_()&&i.processLoadQueue_(),i.hasEnoughInfoToAppend_()&&i.processCallQueue_()}),i}mt(e,n);var t=e.prototype;return t.createTransmuxer_=function(){return Al({remux:!1,alignGopsAtEnd:this.safeAppend_,keepOriginalTimestamps:!0,parse708captions:this.parse708captions_,captionServices:this.captionServices_})},t.resetStats_=function(){this.mediaBytesTransferred=0,this.mediaRequests=0,this.mediaRequestsAborted=0,this.mediaRequestsTimedout=0,this.mediaRequestsErrored=0,this.mediaTransferDuration=0,this.mediaSecondsLoaded=0,this.mediaAppends=0},t.dispose=function(){this.trigger("dispose"),this.state="DISPOSED",this.pause(),this.abort_(),this.transmuxer_&&this.transmuxer_.terminate(),this.resetStats_(),this.checkBufferTimeout_&&window.clearTimeout(this.checkBufferTimeout_),this.syncController_&&this.triggerSyncInfoUpdate_&&this.syncController_.off("syncinfoupdate",this.triggerSyncInfoUpdate_),this.off()},t.setAudio=function(e){this.audioDisabled_=!e,e?this.appendInitSegment_.audio=!0:this.sourceUpdater_.removeAudio(0,this.duration_())},t.abort=function(){"WAITING"===this.state?(this.abort_(),this.state="READY",this.paused()||this.monitorBuffer_()):this.pendingSegment_&&(this.pendingSegment_=null)},t.abort_=function(){this.pendingSegment_&&this.pendingSegment_.abortRequests&&this.pendingSegment_.abortRequests(),this.pendingSegment_=null,this.callQueue_=[],this.loadQueue_=[],this.metadataQueue_.id3=[],this.metadataQueue_.caption=[],this.timelineChangeController_.clearPendingTimelineChange(this.loaderType_),this.waitingOnRemove_=!1,window.clearTimeout(this.quotaExceededErrorRetryTimeout_),this.quotaExceededErrorRetryTimeout_=null},t.checkForAbort_=function(e){return"APPENDING"!==this.state||this.pendingSegment_?!this.pendingSegment_||this.pendingSegment_.requestId!==e:(this.state="READY",!0)},t.error=function(e){return"undefined"!=typeof e&&(this.logger_("error occurred:",e),this.error_=e),this.pendingSegment_=null,this.error_},t.endOfStream=function(){this.ended_=!0,this.transmuxer_&&xl(this.transmuxer_),this.gopBuffer_.length=0,this.pause(),this.trigger("ended")},t.buffered_=function(){var e=this.getMediaInfo_();if(!this.sourceUpdater_||!e)return tr.createTimeRanges();if("main"===this.loaderType_){var t=e.hasAudio,i=e.hasVideo,e=e.isMuxed;if(i&&t&&!this.audioDisabled_&&!e)return this.sourceUpdater_.buffered();if(i)return this.sourceUpdater_.videoBuffered()}return this.sourceUpdater_.audioBuffered()},t.initSegmentForMap=function(e,t){if(void 0===t&&(t=!1),!e)return null;var i=Su(e),n=this.initSegments_[i];return t&&!n&&e.bytes&&(this.initSegments_[i]=n={resolvedUri:e.resolvedUri,byterange:e.byterange,bytes:e.bytes,tracks:e.tracks,timescales:e.timescales}),n||e},t.segmentKey=function(e,t){if(void 0===t&&(t=!1),!e)return null;var i=Eu(e),n=this.keyCache_[i];this.cacheEncryptionKeys_&&t&&!n&&e.bytes&&(this.keyCache_[i]=n={resolvedUri:e.resolvedUri,bytes:e.bytes});e={resolvedUri:(n||e).resolvedUri};return n&&(e.bytes=n.bytes),e},t.couldBeginLoading_=function(){return this.playlist_&&!this.paused()},t.load=function(){if(this.monitorBuffer_(),this.playlist_)return"INIT"===this.state&&this.couldBeginLoading_()?this.init_():void(!this.couldBeginLoading_()||"READY"!==this.state&&"INIT"!==this.state||(this.state="READY"))},t.init_=function(){return this.state="READY",this.resetEverything(),this.monitorBuffer_()},t.playlist=function(e,t){if(void 0===t&&(t={}),e){var i=this.playlist_,n=this.pendingSegment_;this.playlist_=e,this.xhrOptions_=t,"INIT"===this.state&&(e.syncInfo={mediaSequence:e.mediaSequence,time:0},"main"===this.loaderType_&&this.syncController_.setDateTimeMappingForStart(e));var r=null;if(i&&(i.id?r=i.id:i.uri&&(r=i.uri)),this.logger_("playlist update ["+r+" => "+(e.id||e.uri)+"]"),this.trigger("syncinfoupdate"),"INIT"===this.state&&this.couldBeginLoading_())return this.init_();if(!i||i.uri!==e.uri)return null!==this.mediaIndex&&(e.endList?this.resyncLoader():this.resetLoader()),this.currentMediaInfo_=void 0,void this.trigger("playlistupdate");t=e.mediaSequence-i.mediaSequence;this.logger_("live window shift ["+t+"]"),null!==this.mediaIndex&&(this.mediaIndex-=t,this.mediaIndex<0?(this.mediaIndex=null,this.partIndex=null):(r=this.playlist_.segments[this.mediaIndex],!this.partIndex||r.parts&&r.parts.length&&r.parts[this.partIndex]||(r=this.mediaIndex,this.logger_("currently processing part (index "+this.partIndex+") no longer exists."),this.resetLoader(),this.mediaIndex=r))),n&&(n.mediaIndex-=t,n.mediaIndex<0?(n.mediaIndex=null,n.partIndex=null):(0<=n.mediaIndex&&(n.segment=e.segments[n.mediaIndex]),0<=n.partIndex&&n.segment.parts&&(n.part=n.segment.parts[n.partIndex]))),this.syncController_.saveExpiredSegmentInfo(i,e)}},t.pause=function(){this.checkBufferTimeout_&&(window.clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=null)},t.paused=function(){return null===this.checkBufferTimeout_},t.resetEverything=function(e){this.ended_=!1,this.appendInitSegment_={audio:!0,video:!0},this.resetLoader(),this.remove(0,1/0,e),this.transmuxer_&&(this.transmuxer_.postMessage({action:"clearAllMp4Captions"}),this.transmuxer_.postMessage({action:"reset"}))},t.resetLoader=function(){this.fetchAtBuffer_=!1,this.resyncLoader()},t.resyncLoader=function(){this.transmuxer_&&xl(this.transmuxer_),this.mediaIndex=null,this.partIndex=null,this.syncPoint_=null,this.isPendingTimestampOffset_=!1,this.callQueue_=[],this.loadQueue_=[],this.metadataQueue_.id3=[],this.metadataQueue_.caption=[],this.abort(),this.transmuxer_&&this.transmuxer_.postMessage({action:"clearParsedMp4Captions"})},t.remove=function(e,t,i,n){if(void 0===i&&(i=function(){}),void 0===n&&(n=!1),(t=t===1/0?this.duration_():t)<=e)this.logger_("skipping remove because end ${end} is <= start ${start}");else if(this.sourceUpdater_&&this.getMediaInfo_()){var r,a=1,s=function(){0===--a&&i()};for(r in!n&&this.audioDisabled_||(a++,this.sourceUpdater_.removeAudio(e,t,s)),!n&&"main"!==this.loaderType_||(this.gopBuffer_=function(e,t,i,n){for(var r=Math.ceil((t-n)*pl),a=Math.ceil((i-n)*pl),n=e.slice(),s=e.length;s--&&!(e[s].pts<=a););if(-1===s)return n;for(var o=s+1;o--&&!(e[o].pts<=r););return o=Math.max(o,0),n.splice(o,s-o+1),n}(this.gopBuffer_,e,t,this.timeMapping_),a++,this.sourceUpdater_.removeVideo(e,t,s)),this.inbandTextTracks_)al(e,t,this.inbandTextTracks_[r]);al(e,t,this.segmentMetadataTrack_),s()}else this.logger_("skipping remove because no source updater or starting media info")},t.monitorBuffer_=function(){this.checkBufferTimeout_&&window.clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=window.setTimeout(this.monitorBufferTick_.bind(this),1)},t.monitorBufferTick_=function(){"READY"===this.state&&this.fillBuffer_(),this.checkBufferTimeout_&&window.clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=window.setTimeout(this.monitorBufferTick_.bind(this),500)},t.fillBuffer_=function(){var e;this.sourceUpdater_.updating()||(e=this.chooseNextRequest_())&&("number"==typeof e.timestampOffset&&(this.isPendingTimestampOffset_=!1,this.timelineChangeController_.pendingTimelineChange({type:this.loaderType_,from:this.currentTimeline_,to:e.timeline})),this.loadSegment_(e))},t.isEndOfStream_=function(e,t,i){if(void 0===e&&(e=this.mediaIndex),void 0===t&&(t=this.playlist_),void 0===i&&(i=this.partIndex),!t||!this.mediaSource_)return!1;var n="number"==typeof e&&t.segments[e],e=e+1===t.segments.length,n=!n||!n.parts||i+1===n.parts.length;return t.endList&&"open"===this.mediaSource_.readyState&&e&&n},t.chooseNextRequest_=function(){var e=this.buffered_(),t=qo(e)||0,i=Vo(e,this.currentTime_()),n=!this.hasPlayed_()&&1<=i,r=i>=this.goalBufferLength_(),e=this.playlist_.segments;if(!e.length||n||r)return null;this.syncPoint_=this.syncPoint_||this.syncController_.getSyncPoint(this.playlist_,this.duration_(),this.currentTimeline_,this.currentTime_());var a,n={partIndex:null,mediaIndex:null,startOfSegment:null,playlist:this.playlist_,isSyncRequest:Boolean(!this.syncPoint_)};n.isSyncRequest?n.mediaIndex=function(e,t,i){t=t||[];for(var n=[],r=0,a=0;a=e.length-1&&s&&!this.seeking_()?null:this.generateSegmentInfo_(n)},t.generateSegmentInfo_=function(e){var t=e.independent,i=e.playlist,n=e.mediaIndex,r=e.startOfSegment,a=e.isSyncRequest,s=e.partIndex,o=e.forceTimestampOffset,u=e.getMediaInfoForTime,l=i.segments[n],e="number"==typeof s&&l.parts[s],t={requestId:"segment-loader-"+Math.random(),uri:e&&e.resolvedUri||l.resolvedUri,mediaIndex:n,partIndex:e?s:null,isSyncRequest:a,startOfSegment:r,playlist:i,bytes:null,encryptedBytes:null,timestampOffset:null,timeline:l.timeline,duration:e&&e.duration||l.duration,segment:l,part:e,byteLength:0,transmuxer:this.transmuxer_,getMediaInfoForTime:u,independent:t},o="undefined"!=typeof o?o:this.isPendingTimestampOffset_;t.timestampOffset=this.timestampOffsetForSegment_({segmentTimeline:l.timeline,currentTimeline:this.currentTimeline_,startOfSegment:r,buffered:this.buffered_(),overrideCheck:o});o=qo(this.sourceUpdater_.audioBuffered());return"number"==typeof o&&(t.audioAppendStart=o-this.sourceUpdater_.audioTimestampOffset()),this.sourceUpdater_.videoBuffered().length&&(t.gopsToAlignWith=function(e,t,i){if("undefined"==typeof t||null===t||!e.length)return[];for(var n=Math.ceil((t-i+3)*pl),r=0;rn);r++);return e.slice(r)}(this.gopBuffer_,this.currentTime_()-this.sourceUpdater_.videoTimestampOffset(),this.timeMapping_)),t},t.timestampOffsetForSegment_=function(e){return i=(t=e).segmentTimeline,n=t.currentTimeline,r=t.startOfSegment,e=t.buffered,t.overrideCheck||i!==n?!(i "+p+" for "+e),t=m,i=v.vhs_.tech_,t[n=e]||(i.trigger({type:"usage",name:"vhs-608"}),i.trigger({type:"usage",name:"hls-608"}),/^cc708_/.test(r=n)&&(r="SERVICE"+n.split("_")[1]),(o=i.textTracks().getTrackById(r))?t[n]=o:(s=a=n,c=!1,(o=(i.options_.vhs&&i.options_.vhs.captionServices||{})[r])&&(a=o.label,s=o.language,c=o.default),t[n]=i.addRemoteTextTrack({kind:"captions",id:r,default:c,label:a,language:s},!1).track)),al(h,p,m[e]),l=(f={captionArray:f,inbandTextTracks:m,timestampOffset:g}).inbandTextTracks,m=f.captionArray,d=f.timestampOffset,m&&(u=window.WebKitDataCue||window.VTTCue,m.forEach(function(e){var t=e.stream;l[t].addCue(new u(e.startTime+d,e.endTime+d,e.text))}))}),this.transmuxer_&&this.transmuxer_.postMessage({action:"clearParsedMp4Captions"})):this.metadataQueue_.caption.push(this.handleCaptions_.bind(this,e,t)):this.logger_("SegmentLoader received no captions from a caption event"))},t.handleId3_=function(e,t,i){var n,r,a,s;this.earlyAbortWhenNeeded_(e.stats),this.checkForAbort_(e.requestId)||(this.pendingSegment_.hasAppendedData_?(n=null===this.sourceUpdater_.videoTimestampOffset()?this.sourceUpdater_.audioTimestampOffset():this.sourceUpdater_.videoTimestampOffset(),r=this.inbandTextTracks_,a=i,s=this.vhs_.tech_,r.metadataTrack_||(r.metadataTrack_=s.addRemoteTextTrack({kind:"metadata",label:"Timed Metadata"},!1).track,r.metadataTrack_.inBandMetadataTrackDispatchType=a),rl({inbandTextTracks:this.inbandTextTracks_,metadataArray:t,timestampOffset:n,videoDuration:this.duration_()})):this.metadataQueue_.id3.push(this.handleId3_.bind(this,e,t,i)))},t.processMetadataQueue_=function(){this.metadataQueue_.id3.forEach(function(e){return e()}),this.metadataQueue_.caption.forEach(function(e){return e()}),this.metadataQueue_.id3=[],this.metadataQueue_.caption=[]},t.processCallQueue_=function(){var e=this.callQueue_;this.callQueue_=[],e.forEach(function(e){return e()})},t.processLoadQueue_=function(){var e=this.loadQueue_;this.loadQueue_=[],e.forEach(function(e){return e()})},t.hasEnoughInfoToLoad_=function(){if("audio"!==this.loaderType_)return!0;var e=this.pendingSegment_;return!!e&&(!this.getCurrentMediaInfo_()||!ll({timelineChangeController:this.timelineChangeController_,currentTimeline:this.currentTimeline_,segmentTimeline:e.timeline,loaderType:this.loaderType_,audioDisabled:this.audioDisabled_}))},t.getCurrentMediaInfo_=function(e){return(e=void 0===e?this.pendingSegment_:e)&&e.trackInfo||this.currentMediaInfo_},t.getMediaInfo_=function(e){return void 0===e&&(e=this.pendingSegment_),this.getCurrentMediaInfo_(e)||this.startingMediaInfo_},t.hasEnoughInfoToAppend_=function(){if(!this.sourceUpdater_.ready())return!1;if(this.waitingOnRemove_||this.quotaExceededErrorRetryTimeout_)return!1;var e=this.pendingSegment_,t=this.getCurrentMediaInfo_();if(!e||!t)return!1;var i=t.hasAudio,n=t.hasVideo,t=t.isMuxed;return!(n&&!e.videoTimingInfo)&&(!(i&&!this.audioDisabled_&&!t&&!e.audioTimingInfo)&&!ll({timelineChangeController:this.timelineChangeController_,currentTimeline:this.currentTimeline_,segmentTimeline:e.timeline,loaderType:this.loaderType_,audioDisabled:this.audioDisabled_}))},t.handleData_=function(e,t){if(this.earlyAbortWhenNeeded_(e.stats),!this.checkForAbort_(e.requestId))if(!this.callQueue_.length&&this.hasEnoughInfoToAppend_()){var i,n=this.pendingSegment_;if(this.setTimeMapping_(n.timeline),this.updateMediaSecondsLoaded_(n.part||n.segment),"closed"!==this.mediaSource_.readyState){if(e.map&&(e.map=this.initSegmentForMap(e.map,!0),n.segment.map=e.map),e.key&&this.segmentKey(e.key,!0),n.isFmp4=e.isFmp4,n.timingInfo=n.timingInfo||{},n.isFmp4?(this.trigger("fmp4"),n.timingInfo.start=n[ul(t.type)].start):(i=this.getCurrentMediaInfo_(),(i="main"===this.loaderType_&&i&&i.hasVideo)&&(r=n.videoTimingInfo.start),n.timingInfo.start=this.trueSegmentStart_({currentStart:n.timingInfo.start,playlist:n.playlist,mediaIndex:n.mediaIndex,currentVideoTimestampOffset:this.sourceUpdater_.videoTimestampOffset(),useVideoTimingInfo:i,firstVideoFrameTimeForData:r,videoTimingInfo:n.videoTimingInfo,audioTimingInfo:n.audioTimingInfo})),this.updateAppendInitSegmentStatus(n,t.type),this.updateSourceBufferTimestampOffset_(n),n.isSyncRequest){this.updateTimingInfoEnd_(n),this.syncController_.saveSegmentTimingInfo({segmentInfo:n,shouldSaveTimelineMapping:"main"===this.loaderType_});var r=this.chooseNextRequest_();if(r.mediaIndex!==n.mediaIndex||r.partIndex!==n.partIndex)return void this.logger_("sync segment was incorrect, not appending");this.logger_("sync segment was correct, appending")}n.hasAppendedData_=!0,this.processMetadataQueue_(),this.appendData_(n,t)}}else this.callQueue_.push(this.handleData_.bind(this,e,t))},t.updateAppendInitSegmentStatus=function(e,t){"main"!==this.loaderType_||"number"!=typeof e.timestampOffset||e.changedTimestampOffset||(this.appendInitSegment_={audio:!0,video:!0}),this.playlistOfLastInitSegment_[t]!==e.playlist&&(this.appendInitSegment_[t]=!0)},t.getInitSegmentAndUpdateState_=function(e){var t=e.type,i=e.initSegment,n=e.map,r=e.playlist;if(n){e=Su(n);if(this.activeInitSegmentId_===e)return null;i=this.initSegmentForMap(n,!0).bytes,this.activeInitSegmentId_=e}return i&&this.appendInitSegment_[t]?(this.playlistOfLastInitSegment_[t]=r,this.appendInitSegment_[t]=!1,this.activeInitSegmentId_=null,i):null},t.handleQuotaExceededError_=function(e,t){var i=this,n=e.segmentInfo,r=e.type,a=e.bytes,s=this.sourceUpdater_.audioBuffered(),o=this.sourceUpdater_.videoBuffered();1=n);r++);return e.slice(0,r).concat(t)}(this.gopBuffer_,i.gopInfo,this.safeAppend_)),this.state="APPENDING",this.trigger("appending"),this.waitForAppendsToComplete_(e)}},t.setTimeMapping_=function(e){e=this.syncController_.mappingForTimeline(e);null!==e&&(this.timeMapping_=e)},t.updateMediaSecondsLoaded_=function(e){"number"==typeof e.start&&"number"==typeof e.end?this.mediaSecondsLoaded+=e.end-e.start:this.mediaSecondsLoaded+=e.duration},t.shouldUpdateTransmuxerTimestampOffset_=function(e){return null!==e&&("main"===this.loaderType_&&e!==this.sourceUpdater_.videoTimestampOffset()||!this.audioDisabled_&&e!==this.sourceUpdater_.audioTimestampOffset())},t.trueSegmentStart_=function(e){var t=e.currentStart,i=e.playlist,n=e.mediaIndex,r=e.firstVideoFrameTimeForData,a=e.currentVideoTimestampOffset,s=e.useVideoTimingInfo,o=e.videoTimingInfo,e=e.audioTimingInfo;if("undefined"!=typeof t)return t;if(!s)return e.start;i=i.segments[n-1];return 0!==n&&i&&"undefined"!=typeof i.start&&i.end===r+a?o.start:r},t.waitForAppendsToComplete_=function(e){var t=this.getCurrentMediaInfo_(e);if(!t)return this.error({message:"No starting media returned, likely due to an unsupported media format.",blacklistDuration:1/0}),void this.trigger("error");var i=t.hasAudio,n=t.hasVideo,t=t.isMuxed,n="main"===this.loaderType_&&n,t=!this.audioDisabled_&&i&&!t;if(e.waitingOnAppends=0,!e.hasAppendedData_)return e.timingInfo||"number"!=typeof e.timestampOffset||(this.isPendingTimestampOffset_=!0),e.timingInfo={start:0},e.waitingOnAppends++,this.isPendingTimestampOffset_||(this.updateSourceBufferTimestampOffset_(e),this.processMetadataQueue_()),void this.checkAppendsDone_(e);n&&e.waitingOnAppends++,t&&e.waitingOnAppends++,n&&this.sourceUpdater_.videoQueueCallback(this.checkAppendsDone_.bind(this,e)),t&&this.sourceUpdater_.audioQueueCallback(this.checkAppendsDone_.bind(this,e))},t.checkAppendsDone_=function(e){this.checkForAbort_(e.requestId)||(e.waitingOnAppends--,0===e.waitingOnAppends&&this.handleAppendsDone_())},t.checkForIllegalMediaSwitch=function(e){var t,i,e=(t=this.loaderType_,i=this.getCurrentMediaInfo_(),e=e,"main"===t&&i&&e?e.hasAudio||e.hasVideo?i.hasVideo&&!e.hasVideo?"Only audio found in segment when we expected video. We can't switch to audio only from a stream that had video. To get rid of this message, please add codec information to the manifest.":!i.hasVideo&&e.hasVideo?"Video found in segment when we expected only audio. We can't switch to a stream with video from an audio only stream. To get rid of this message, please add codec information to the manifest.":null:"Neither audio nor video found in segment.":null);return!!e&&(this.error({message:e,blacklistDuration:1/0}),this.trigger("error"),!0)},t.updateSourceBufferTimestampOffset_=function(e){var t;null===e.timestampOffset||"number"!=typeof e.timingInfo.start||e.changedTimestampOffset||"main"!==this.loaderType_||(t=!1,e.timestampOffset-=this.getSegmentStartTimeForTimestampOffsetCalculation_({videoTimingInfo:e.segment.videoTimingInfo,audioTimingInfo:e.segment.audioTimingInfo,timingInfo:e.timingInfo}),e.changedTimestampOffset=!0,e.timestampOffset!==this.sourceUpdater_.videoTimestampOffset()&&(this.sourceUpdater_.videoTimestampOffset(e.timestampOffset),t=!0),e.timestampOffset!==this.sourceUpdater_.audioTimestampOffset()&&(this.sourceUpdater_.audioTimestampOffset(e.timestampOffset),t=!0),t&&this.trigger("timestampoffset"))},t.getSegmentStartTimeForTimestampOffsetCalculation_=function(e){var t=e.videoTimingInfo,i=e.audioTimingInfo,e=e.timingInfo;return this.useDtsForTimestampOffset_?t&&"number"==typeof t.transmuxedDecodeStart?t.transmuxedDecodeStart:i&&"number"==typeof i.transmuxedDecodeStart?i.transmuxedDecodeStart:e.start:e.start},t.updateTimingInfoEnd_=function(e){e.timingInfo=e.timingInfo||{};var t=this.getMediaInfo_(),t="main"===this.loaderType_&&t&&t.hasVideo&&e.videoTimingInfo?e.videoTimingInfo:e.audioTimingInfo;t&&(e.timingInfo.end="number"==typeof t.end?t.end:t.start+e.duration)},t.handleAppendsDone_=function(){if(this.pendingSegment_&&this.trigger("appendsdone"),!this.pendingSegment_)return this.state="READY",void(this.paused()||this.monitorBuffer_());var e=this.pendingSegment_;this.updateTimingInfoEnd_(e),this.shouldSaveSegmentTimingInfo_&&this.syncController_.saveSegmentTimingInfo({segmentInfo:e,shouldSaveTimelineMapping:"main"===this.loaderType_});var t=cl(e,this.sourceType_);if(t&&("warn"===t.severity?tr.log.warn(t.message):this.logger_(t.message)),this.recordThroughput_(e),this.pendingSegment_=null,this.state="READY",!e.isSyncRequest||(this.trigger("syncinfoupdate"),e.hasAppendedData_)){this.logger_("Appended "+ol(e)),this.addSegmentMetadataCue_(e),this.fetchAtBuffer_=!0,this.currentTimeline_!==e.timeline&&(this.timelineChangeController_.lastTimelineChange({type:this.loaderType_,from:this.currentTimeline_,to:e.timeline}),"main"!==this.loaderType_||this.audioDisabled_||this.timelineChangeController_.lastTimelineChange({type:"audio",from:this.currentTimeline_,to:e.timeline})),this.currentTimeline_=e.timeline,this.trigger("syncinfoupdate");var i=e.segment,t=e.part,i=i.end&&this.currentTime_()-i.end>3*e.playlist.targetDuration,t=t&&t.end&&this.currentTime_()-t.end>3*e.playlist.partTargetDuration;if(i||t)return this.logger_("bad "+(i?"segment":"part")+" "+ol(e)),void this.resetEverything();null!==this.mediaIndex&&this.trigger("bandwidthupdate"),this.trigger("progress"),this.mediaIndex=e.mediaIndex,this.partIndex=e.partIndex,this.isEndOfStream_(e.mediaIndex,e.playlist,e.partIndex)&&this.endOfStream(),this.trigger("appended"),e.hasAppendedData_&&this.mediaAppends++,this.paused()||this.monitorBuffer_()}else this.logger_("Throwing away un-appended sync request "+ol(e))},t.recordThroughput_=function(e){var t,i;e.duration<1/60?this.logger_("Ignoring segment's throughput because its duration of "+e.duration+" is less than the min to record "+1/60):(t=this.throughput.rate,i=Date.now()-e.endOfAllRequests+1,i=Math.floor(e.byteLength/i*8*1e3),this.throughput.rate+=(i-t)/++this.throughput.count)},t.addSegmentMetadataCue_=function(e){var t,i,n,r;this.segmentMetadataTrack_&&(i=(t=e.segment).start,r=t.end,sl(i)&&sl(r)&&(al(i,r,this.segmentMetadataTrack_),n=window.WebKitDataCue||window.VTTCue,e={custom:t.custom,dateTimeObject:t.dateTimeObject,dateTimeString:t.dateTimeString,bandwidth:e.playlist.attributes.BANDWIDTH,resolution:e.playlist.attributes.RESOLUTION,codecs:e.playlist.attributes.CODECS,byteLength:e.byteLength,uri:e.uri,timeline:e.timeline,playlist:e.playlist.id,start:i,end:r},(r=new n(i,r,JSON.stringify(e))).value=e,this.segmentMetadataTrack_.addCue(r)))},e}(tr.EventTarget);function Nl(){}function Ul(e){return"string"!=typeof e?e:e.replace(/./,function(e){return e.toUpperCase()})}function Bl(e,t){var i=t[e+"Buffer"];return i&&i.updating||t.queuePending[e]}function Fl(e,t){if(0!==t.queue.length){var i=0,n=t.queue[i];if("mediaSource"!==n.type){if("mediaSource"!==e&&t.ready()&&"closed"!==t.mediaSource.readyState&&!Bl(e,t)){if(n.type!==e){if(null===(i=function(e,t){for(var i=0;i=e.playlist.segments.length){e=null;break}e=this.generateSegmentInfo_({playlist:e.playlist,mediaIndex:e.mediaIndex+1,startOfSegment:e.startOfSegment+e.duration,isSyncRequest:e.isSyncRequest})}return e},t.stopForError=function(e){this.error(e),this.state="READY",this.pause(),this.trigger("error")},t.segmentRequestFinished_=function(e,t,i){var n=this;if(this.subtitlesTrack_){if(this.saveTransferStats_(t.stats),!this.pendingSegment_)return this.state="READY",void(this.mediaRequestsAborted+=1);if(e)return e.code===Ll&&this.handleTimeout_(),e.code===Dl?this.mediaRequestsAborted+=1:this.mediaRequestsErrored+=1,void this.stopForError(e);var r=this.pendingSegment_;this.saveBandwidthRelatedStats_(r.duration,t.stats),t.key&&this.segmentKey(t.key,!0),this.state="APPENDING",this.trigger("appending");var a=r.segment;if(a.map&&(a.map.bytes=t.map.bytes),r.bytes=t.bytes,"function"!=typeof window.WebVTT&&this.subtitlesTrack_&&this.subtitlesTrack_.tech_){var s=function(){n.subtitlesTrack_.tech_.off("vttjsloaded",o),n.stopForError({message:"Error loading vtt.js"})},o=function(){n.subtitlesTrack_.tech_.off("vttjserror",s),n.segmentRequestFinished_(e,t,i)};return this.state="WAITING_ON_VTTJS",this.subtitlesTrack_.tech_.one("vttjsloaded",o),void this.subtitlesTrack_.tech_.one("vttjserror",s)}a.requested=!0;try{this.parseVTTCues_(r)}catch(e){return void this.stopForError({message:e.message})}if(this.updateTimeMapping_(r,this.syncController_.timelines[r.timeline],this.playlist_),r.cues.length?r.timingInfo={start:r.cues[0].startTime,end:r.cues[r.cues.length-1].endTime}:r.timingInfo={start:r.startOfSegment,end:r.startOfSegment+r.duration},r.isSyncRequest)return this.trigger("syncinfoupdate"),this.pendingSegment_=null,void(this.state="READY");r.byteLength=r.bytes.byteLength,this.mediaSecondsLoaded+=a.duration,r.cues.forEach(function(e){n.subtitlesTrack_.addCue(n.featuresNativeTextTracks_?new window.VTTCue(e.startTime,e.endTime,e.text):e)}),function(t){var e=t.cues;if(e)for(var i=0;iu)&&(r=void 0,r=o<0?i.start-$o({defaultDuration:t.targetDuration,durationList:t.segments,startIndex:e.mediaIndex,endIndex:a}):i.end+$o({defaultDuration:t.targetDuration,durationList:t.segments,startIndex:e.mediaIndex+1,endIndex:a}),this.discontinuities[s]={time:r,accuracy:u})}},t.dispose=function(){this.trigger("dispose"),this.off()},e}(tr.EventTarget),fd=function(t){function e(){var e=t.call(this)||this;return e.pendingTimelineChanges_={},e.lastTimelineChanges_={},e}mt(e,t);var i=e.prototype;return i.clearPendingTimelineChange=function(e){this.pendingTimelineChanges_[e]=null,this.trigger("pendingtimelinechange")},i.pendingTimelineChange=function(e){var t=e.type,i=e.from,e=e.to;return"number"==typeof i&&"number"==typeof e&&(this.pendingTimelineChanges_[t]={type:t,from:i,to:e},this.trigger("pendingtimelinechange")),this.pendingTimelineChanges_[t]},i.lastTimelineChange=function(e){var t=e.type,i=e.from,e=e.to;return"number"==typeof i&&"number"==typeof e&&(this.lastTimelineChanges_[t]={type:t,from:i,to:e},delete this.pendingTimelineChanges_[t],this.trigger("timelinechange")),this.lastTimelineChanges_[t]},i.dispose=function(){this.trigger("dispose"),this.pendingTimelineChanges_={},this.lastTimelineChanges_={},this.off()},e}(tr.EventTarget),md=x(U(W(function(){var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t,i){return e(i={path:t,exports:{},require:function(e,t){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==t&&i.path)}},i.exports),i.exports}var i=t(function(e){function n(e,t){for(var i=0;i>7))^f]=f;for(e=t=0;!d[e];e^=i||1,t=p[t]||1)for(s=16843009*h[n=h[i=h[c[d[e]=r=(r=t^t<<1^t<<2^t<<3^t<<4)>>8^255&r^99]=e]]]^65537*n^257*i^16843008*e,a=257*h[r]^16843008*r,f=0;f<4;f++)u[f][e]=a=a<<24^a>>>8,l[f][r]=s=s<<24^s>>>8;for(f=0;f<5;f++)u[f]=u[f].slice(0),l[f]=l[f].slice(0);return o}(),this._tables=[[d[0][0].slice(),d[0][1].slice(),d[0][2].slice(),d[0][3].slice(),d[0][4].slice()],[d[1][0].slice(),d[1][1].slice(),d[1][2].slice(),d[1][3].slice(),d[1][4].slice()]];var r=this._tables[0][4],a=this._tables[1],s=e.length,o=1;if(4!==s&&6!==s&&8!==s)throw new Error("Invalid aes key size");var u=e.slice(0),l=[];for(this._key=[u,l],t=s;t<4*s+28;t++)n=u[t-1],(t%s==0||8===s&&t%s==4)&&(n=r[n>>>24]<<24^r[n>>16&255]<<16^r[n>>8&255]<<8^r[255&n],t%s==0&&(n=n<<8^n>>>24^o<<24,o=o<<1^283*(o>>7))),u[t]=u[t-s]^n;for(i=0;t;i++,t--)n=u[3&i?t:t-4],l[i]=t<=4||i<4?n:a[0][r[n>>>24]]^a[1][r[n>>16&255]]^a[2][r[n>>8&255]]^a[3][r[255&n]]}return e.prototype.decrypt=function(e,t,i,n,r,a){for(var s,o,u,l=this._key[1],d=e^l[0],c=n^l[1],h=i^l[2],p=t^l[3],f=l.length/4-2,m=4,t=this._tables[1],g=t[0],y=t[1],v=t[2],_=t[3],b=t[4],T=0;T>>24]^y[c>>16&255]^v[h>>8&255]^_[255&p]^l[m],o=g[c>>>24]^y[h>>16&255]^v[p>>8&255]^_[255&d]^l[m+1],u=g[h>>>24]^y[p>>16&255]^v[d>>8&255]^_[255&c]^l[m+2],p=g[p>>>24]^y[d>>16&255]^v[c>>8&255]^_[255&h]^l[m+3],m+=4,d=s,c=o,h=u;for(T=0;T<4;T++)r[(3&-T)+a]=b[d>>>24]<<24^b[c>>16&255]<<16^b[h>>8&255]<<8^b[255&p]^l[m++],s=d,d=c,c=h,h=p,p=s},e}(),l=function(t){function e(){var e=t.call(this,a)||this;return e.jobs=[],e.delay=1,e.timeout_=null,e}r(e,t);var i=e.prototype;return i.processJob_=function(){this.jobs.shift()(),this.jobs.length?this.timeout_=setTimeout(this.processJob_.bind(this),this.delay):this.timeout_=null},i.push=function(e){this.jobs.push(e),this.timeout_||(this.timeout_=setTimeout(this.processJob_.bind(this),this.delay))},e}(a),g=function(e){return e<<24|(65280&e)<<8|(16711680&e)>>8|e>>>24},s=function(){function u(e,t,i,n){var r=u.STEP,a=new Int32Array(e.buffer),s=new Uint8Array(e.byteLength),o=0;for(this.asyncStream_=new l,this.asyncStream_.push(this.decryptChunk_(a.subarray(o,o+r),t,i,s)),o=r;o>2),u=new m(Array.prototype.slice.call(t)),e=new Uint8Array(e.byteLength),l=new Int32Array(e.buffer),d=i[0],c=i[1],h=i[2],p=i[3],f=0;f "+n+" from "+t),this.tech_.trigger({type:"usage",name:"vhs-rendition-change-"+t})),this.masterPlaylistLoader_.media(e,i)},t.startABRTimer_=function(){var e=this;this.stopABRTimer_(),this.abrTimer_=window.setInterval(function(){return e.checkABR_()},250)},t.stopABRTimer_=function(){this.tech_.scrubbing&&this.tech_.scrubbing()||(window.clearInterval(this.abrTimer_),this.abrTimer_=null)},t.getAudioTrackPlaylists_=function(){var e=this.master(),t=e&&e.playlists||[];if(!e||!e.mediaGroups||!e.mediaGroups.AUDIO)return t;var i,n=e.mediaGroups.AUDIO,r=Object.keys(n);if(Object.keys(this.mediaTypes_.AUDIO.groups).length)i=this.mediaTypes_.AUDIO.activeTrack();else{var a,s=n.main||r.length&&n[r[0]];for(a in s)if(s[a].default){i={label:a};break}}if(!i)return t;var o,u=[];for(o in n)if(n[o][i.label]){var l=n[o][i.label];if(l.playlists&&l.playlists.length)u.push.apply(u,l.playlists);else if(l.uri)u.push(l);else if(e.playlists.length)for(var d=0;d "+r.id;if(!t)return l(d+" as current playlist is not set"),!0;if(r.id===t.id)return!1;e=Boolean(Bo(i,n).length);if(!t.endList)return e||"number"!=typeof t.partTargetDuration?(l(d+" as current playlist is live"),!0):(l("not "+d+" as current playlist is live llhls, but currentTime isn't in buffered."),!1);i=Vo(i,n),n=u?kl.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE:kl.MAX_BUFFER_LOW_WATER_LINE;if(o= bufferLowWaterLine ("+i+" >= "+a+")";return u&&(a+=" and next bandwidth > current bandwidth ("+n+" > "+r+")"),l(a),!0}return l("not "+d+" as no switching criteria met"),!1}({buffered:this.tech_.buffered(),currentTime:i,currentPlaylist:t,nextPlaylist:e,bufferLowWaterLine:n,bufferHighWaterLine:r,duration:this.duration(),experimentalBufferBasedABR:this.experimentalBufferBasedABR,log:this.logger_})},t.setupSegmentLoaderListeners_=function(){var t=this;this.experimentalBufferBasedABR||(this.mainSegmentLoader_.on("bandwidthupdate",function(){var e=t.selectPlaylist();t.shouldSwitchToMedia_(e)&&t.switchMedia_(e,"bandwidthupdate"),t.tech_.trigger("bandwidthupdate")}),this.mainSegmentLoader_.on("progress",function(){t.trigger("progress")})),this.mainSegmentLoader_.on("error",function(){t.blacklistCurrentPlaylist(t.mainSegmentLoader_.error())}),this.mainSegmentLoader_.on("appenderror",function(){t.error=t.mainSegmentLoader_.error_,t.trigger("error")}),this.mainSegmentLoader_.on("syncinfoupdate",function(){t.onSyncInfoUpdate_()}),this.mainSegmentLoader_.on("timestampoffset",function(){t.tech_.trigger({type:"usage",name:"vhs-timestamp-offset"}),t.tech_.trigger({type:"usage",name:"hls-timestamp-offset"})}),this.audioSegmentLoader_.on("syncinfoupdate",function(){t.onSyncInfoUpdate_()}),this.audioSegmentLoader_.on("appenderror",function(){t.error=t.audioSegmentLoader_.error_,t.trigger("error")}),this.mainSegmentLoader_.on("ended",function(){t.logger_("main segment loader ended"),t.onEndOfStream()}),this.mainSegmentLoader_.on("earlyabort",function(e){t.experimentalBufferBasedABR||(t.delegateLoaders_("all",["abort"]),t.blacklistCurrentPlaylist({message:"Aborted early because there isn't enough bandwidth to complete the request without rebuffering."},120))});function e(){if(!t.sourceUpdater_.hasCreatedSourceBuffers())return t.tryToCreateSourceBuffers_();var e=t.getCodecsOrExclude_();e&&t.sourceUpdater_.addOrChangeSourceBuffers(e)}this.mainSegmentLoader_.on("trackinfo",e),this.audioSegmentLoader_.on("trackinfo",e),this.mainSegmentLoader_.on("fmp4",function(){t.triggeredFmp4Usage||(t.tech_.trigger({type:"usage",name:"vhs-fmp4"}),t.tech_.trigger({type:"usage",name:"hls-fmp4"}),t.triggeredFmp4Usage=!0)}),this.audioSegmentLoader_.on("fmp4",function(){t.triggeredFmp4Usage||(t.tech_.trigger({type:"usage",name:"vhs-fmp4"}),t.tech_.trigger({type:"usage",name:"hls-fmp4"}),t.triggeredFmp4Usage=!0)}),this.audioSegmentLoader_.on("ended",function(){t.logger_("audioSegmentLoader ended"),t.onEndOfStream()})},t.mediaSecondsLoaded_=function(){return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded+this.mainSegmentLoader_.mediaSecondsLoaded)},t.load=function(){this.mainSegmentLoader_.load(),this.mediaTypes_.AUDIO.activePlaylistLoader&&this.audioSegmentLoader_.load(),this.mediaTypes_.SUBTITLES.activePlaylistLoader&&this.subtitleSegmentLoader_.load()},t.smoothQualityChange_=function(e){void 0===e&&(e=this.selectPlaylist()),this.fastQualityChange_(e)},t.fastQualityChange_=function(e){var t=this;(e=void 0===e?this.selectPlaylist():e)!==this.masterPlaylistLoader_.media()?(this.switchMedia_(e,"fast-quality"),this.mainSegmentLoader_.resetEverything(function(){tr.browser.IE_VERSION||tr.browser.IS_EDGE?t.tech_.setCurrentTime(t.tech_.currentTime()+.04):t.tech_.setCurrentTime(t.tech_.currentTime())})):this.logger_("skipping fastQualityChange because new media is same as old")},t.play=function(){if(!this.setupFirstPlay()){this.tech_.ended()&&this.tech_.setCurrentTime(0),this.hasPlayed_&&this.load();var e=this.tech_.seekable();return this.tech_.duration()===1/0&&this.tech_.currentTime()this.maxPlaylistRetries?1/0:Date.now()+1e3*t,i.excludeUntil=a,e.reason&&(i.lastExcludeReason_=e.reason),this.tech_.trigger("blacklistplaylist"),this.tech_.trigger({type:"usage",name:"vhs-rendition-blacklisted"}),this.tech_.trigger({type:"usage",name:"hls-rendition-blacklisted"});r=this.selectPlaylist();if(!r)return this.error="Playback cannot continue. No available working or supported playlists.",void this.trigger("error");t=e.internal?this.logger_:tr.log.warn,a=e.message?" "+e.message:"";t((e.internal?"Internal problem":"Problem")+" encountered with playlist "+i.id+"."+a+" Switching to playlist "+r.id+"."),r.attributes.AUDIO!==i.attributes.AUDIO&&this.delegateLoaders_("audio",["abort","pause"]),r.attributes.SUBTITLES!==i.attributes.SUBTITLES&&this.delegateLoaders_("subtitle",["abort","pause"]),this.delegateLoaders_("main",["abort","pause"]);a=r.targetDuration/2*1e3||5e3,a="number"==typeof r.lastRequest&&Date.now()-r.lastRequest<=a;return this.switchMedia_(r,"exclude",s||a)},t.pauseLoading=function(){this.delegateLoaders_("all",["abort","pause"]),this.stopABRTimer_()},t.delegateLoaders_=function(i,e){var n=this,r=[],t="all"===i;!t&&"main"!==i||r.push(this.masterPlaylistLoader_);var a=[];!t&&"audio"!==i||a.push("AUDIO"),!t&&"subtitle"!==i||(a.push("CLOSED-CAPTIONS"),a.push("SUBTITLES")),a.forEach(function(e){e=n.mediaTypes_[e]&&n.mediaTypes_[e].activePlaylistLoader;e&&r.push(e)}),["main","audio","subtitle"].forEach(function(e){var t=n[e+"SegmentLoader_"];!t||i!==e&&"all"!==i||r.push(t)}),r.forEach(function(t){return e.forEach(function(e){"function"==typeof t[e]&&t[e]()})})},t.setCurrentTime=function(e){var t=Bo(this.tech_.buffered(),e);return this.masterPlaylistLoader_&&this.masterPlaylistLoader_.media()&&this.masterPlaylistLoader_.media().segments?t&&t.length?e:(this.mainSegmentLoader_.resetEverything(),this.mainSegmentLoader_.abort(),this.mediaTypes_.AUDIO.activePlaylistLoader&&(this.audioSegmentLoader_.resetEverything(),this.audioSegmentLoader_.abort()),this.mediaTypes_.SUBTITLES.activePlaylistLoader&&(this.subtitleSegmentLoader_.resetEverything(),this.subtitleSegmentLoader_.abort()),void this.load()):0},t.duration=function(){if(!this.masterPlaylistLoader_)return 0;var e=this.masterPlaylistLoader_.media();return e?e.endList?this.mediaSource?this.mediaSource.duration:$l.Playlist.duration(e):1/0:0},t.seekable=function(){return this.seekable_},t.onSyncInfoUpdate_=function(){var e;if(this.masterPlaylistLoader_){var t=this.masterPlaylistLoader_.media();if(t){var i=this.syncController_.getExpiredTime(t,this.duration());if(null!==i){var n,r,a=this.masterPlaylistLoader_.master,s=$l.Playlist.seekable(t,i,$l.Playlist.liveEdgeDelay(a,t));if(0!==s.length){if(this.mediaTypes_.AUDIO.activePlaylistLoader){if(t=this.mediaTypes_.AUDIO.activePlaylistLoader.media(),null===(i=this.syncController_.getExpiredTime(t,this.duration())))return;if(0===(e=$l.Playlist.seekable(t,i,$l.Playlist.liveEdgeDelay(a,t))).length)return}this.seekable_&&this.seekable_.length&&(n=this.seekable_.end(0),r=this.seekable_.start(0)),!e||e.start(0)>s.end(0)||s.start(0)>e.end(0)?this.seekable_=s:this.seekable_=tr.createTimeRanges([[(e.start(0)>s.start(0)?e:s).start(0),(e.end(0) "'+a[e]+'"')}),u.length)return void this.blacklistCurrentPlaylist({playlist:this.media(),message:"Codec switching not supported: "+u.join(", ")+".",blacklistDuration:1/0,internal:!0})}return a}t=Object.keys(o).reduce(function(e,t){return e&&(e+=", "),e+=t+' does not support codec(s): "'+o[t].join(",")+'"'},"")+".";this.blacklistCurrentPlaylist({playlist:this.media(),internal:!0,message:t,blacklistDuration:1/0})}else this.blacklistCurrentPlaylist({playlist:this.media(),message:"Could not determine codecs for playlist.",blacklistDuration:1/0})},t.tryToCreateSourceBuffers_=function(){var e;"open"!==this.mediaSource.readyState||this.sourceUpdater_.hasCreatedSourceBuffers()||!this.areMediaTypesKnown_()||(e=this.getCodecsOrExclude_())&&(this.sourceUpdater_.createSourceBuffers(e),e=[e.video,e.audio].filter(Boolean).join(","),this.excludeIncompatibleVariants_(e))},t.excludeUnsupportedVariants_=function(){var n=this,r=this.master().playlists,a=[];Object.keys(r).forEach(function(e){var t,i=r[e];-1===a.indexOf(i.id)&&(a.push(i.id),t=[],!(e=Ju(n.master,i)).audio||mr(e.audio)||fr(e.audio)||t.push("audio codec "+e.audio),!e.video||mr(e.video)||fr(e.video)||t.push("video codec "+e.video),e.text&&"stpp.ttml.im1t"===e.text&&t.push("text codec "+e.text),t.length&&(i.excludeUntil=1/0,n.logger_("excluding "+i.id+" for unsupported: "+t.join(", "))))})},t.excludeIncompatibleVariants_=function(e){var r=this,a=[],s=this.master().playlists,e=Qu(cr(e)),o=$u(e),u=e.video&&cr(e.video)[0]||null,l=e.audio&&cr(e.audio)[0]||null;Object.keys(s).forEach(function(e){var t,i,n=s[e];-1===a.indexOf(n.id)&&n.excludeUntil!==1/0&&(a.push(n.id),t=[],i=Ju(r.masterPlaylistLoader_.master,n),e=$u(i),(i.audio||i.video)&&(e!==o&&t.push('codec count "'+e+'" !== "'+o+'"'),r.sourceUpdater_.canChangeType()||(e=i.video&&cr(i.video)[0]||null,i=i.audio&&cr(i.audio)[0]||null,e&&u&&e.type.toLowerCase()!==u.type.toLowerCase()&&t.push('video codec "'+e.type+'" !== "'+u.type+'"'),i&&l&&i.type.toLowerCase()!==l.type.toLowerCase()&&t.push('audio codec "'+i.type+'" !== "'+l.type+'"')),t.length&&(n.excludeUntil=1/0,r.logger_("blacklisting "+n.id+": "+t.join(" && ")))))})},t.updateAdCues_=function(e){var t=0,i=this.seekable();i.length&&(t=i.start(0)),function(e,t,i){if(void 0===i&&(i=0),e.segments)for(var n=i,r=0;r=r.adStartTime&&t<=r.adEndTime)return r}return null}(t,n+u.duration/2)){if("cueIn"in u){o.endTime=n,o.adEndTime=n,n+=u.duration,o=null;continue}if(n=t.end(t.length-1)))return this.techWaiting_();5<=this.consecutiveUpdates&&e===this.lastRecordedTime?(this.consecutiveUpdates++,this.waiting_()):e===this.lastRecordedTime?this.consecutiveUpdates++:(this.consecutiveUpdates=0,this.lastRecordedTime=e)}},t.cancelTimer_=function(){this.consecutiveUpdates=0,this.timer_&&(this.logger_("cancelTimer_"),clearTimeout(this.timer_)),this.timer_=null},t.fixesBadSeeks_=function(){if(!this.tech_.seeking())return!1;var e,t=this.seekable(),i=this.tech_.currentTime();if(this.afterSeekableWindow_(t,i,this.media(),this.allowSeeksWithinUnsafeLiveWindow)&&(e=t.end(t.length-1)),"undefined"!=typeof(e=this.beforeSeekableWindow_(t,i)?(a=t.start(0))+(a===t.end(0)?0:.1):e))return this.logger_("Trying to seek outside of seekable at time "+i+" with seekable range "+jo(t)+". Seeking to "+e+"."),this.tech_.setCurrentTime(e),!0;for(var n=this.masterPlaylistController_.sourceUpdater_,r=this.tech_.buffered(),a=n.audioBuffer?n.audioBuffered():null,t=n.videoBuffer?n.videoBuffered():null,n=this.media(),s=n.partTargetDuration||2*(n.targetDuration-ml),o=[a,t],u=0;u "+t.end(0)+"]. Attempting to resume playback by seeking to the current time."),this.tech_.trigger({type:"usage",name:"vhs-unknown-waiting"}),this.tech_.trigger({type:"usage",name:"hls-unknown-waiting"})))},t.techWaiting_=function(){var e=this.seekable(),t=this.tech_.currentTime();if(this.tech_.seeking()||null!==this.timer_)return!0;if(this.beforeSeekableWindow_(e,t)){var i=e.end(e.length-1);return this.logger_("Fell out of live window at time "+t+". Seeking to live point (seekable end) "+i),this.cancelTimer_(),this.tech_.setCurrentTime(i),this.tech_.trigger({type:"usage",name:"vhs-live-resync"}),this.tech_.trigger({type:"usage",name:"hls-live-resync"}),!0}e=this.tech_.vhs.masterPlaylistController_.sourceUpdater_,i=this.tech_.buffered();if(this.videoUnderflow_({audioBuffered:e.audioBuffered(),videoBuffered:e.videoBuffered(),currentTime:t}))return this.cancelTimer_(),this.tech_.setCurrentTime(t),this.tech_.trigger({type:"usage",name:"vhs-video-underflow"}),this.tech_.trigger({type:"usage",name:"hls-video-underflow"}),!0;e=Fo(i,t);if(0=6.9.0" @@ -53,6 +55,163 @@ "npm": ">=5" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@node-minify/core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@node-minify/core/-/core-6.4.0.tgz", + "integrity": "sha512-tgfV6r+/4EBr+IvasZsOhlKMLZ5oLJtapUzEtiiTTokRQKFNCOnI/UXFbkXNsFq4wW7USVWjxiNScA+eBd5e1g==", + "license": "MIT", + "dependencies": { + "@node-minify/utils": "^6.4.0", + "globby": "11.0.4", + "mkdirp": "1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@node-minify/csso": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@node-minify/csso/-/csso-8.0.6.tgz", + "integrity": "sha512-6S6HW6rMGyB7APmVKaGfnONc60YdIe23VpAs7xI6M2oi2zxNoOXtZQvqV9Lx9tjVU1wN1Y5kGCoarfdMtCJ/DA==", + "license": "MIT", + "dependencies": { + "@node-minify/utils": "8.0.6", + "csso": "5.0.5" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@node-minify/csso/node_modules/@node-minify/utils": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@node-minify/utils/-/utils-8.0.6.tgz", + "integrity": "sha512-csY4qcR7jUwiZmkreNTJhcypQfts2aY2CK+a+rXgXUImZiZiySh0FvwHjRnlqWKvg+y6ae9lHFzDRjBTmqlTIQ==", + "license": "MIT", + "dependencies": { + "gzip-size": "6.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@node-minify/terser": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@node-minify/terser/-/terser-6.4.0.tgz", + "integrity": "sha512-62dCsMFkJ8JnCFiLkItjTVKrSoI8pJe58bQfjBapXCJe68acf8skbfmkVmyIZyLBJS52ef2yyGBusyilzy2jfA==", + "license": "MIT", + "dependencies": { + "@node-minify/utils": "^6.4.0", + "terser": "5.14.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@node-minify/utils": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@node-minify/utils/-/utils-6.4.0.tgz", + "integrity": "sha512-mx6oZCmAdibRWuBhJV3Fx6jXwgCY2bCasVb7sXh06H28jqAd9BDcufLEoBoAXPuNrfz0t/wptoKbjmXuE8YXdg==", + "license": "MIT", + "dependencies": { + "gzip-size": "6.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@video-js-plugins/videojs-ads-markers": { "version": "1.0.0", "license": "MIT", @@ -141,9 +300,17 @@ "videojs-contrib-ads": "^6.6.1" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "license": "ISC" + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/aes-decrypter": { "version": "3.1.3", @@ -172,45 +339,37 @@ "version": "1.3.0", "license": "MIT" }, - "node_modules/babel-runtime": { - "version": "6.26.0", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "license": "MIT", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "engines": { + "node": ">=8" } }, - "node_modules/babel-runtime/node_modules/regenerator-runtime": { - "version": "0.11.1", - "license": "MIT" - }, "node_modules/balanced-match": { "version": "1.0.2", "license": "MIT" }, - "node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/bundle-js-css": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "csso": "^5.0.5", - "js-beautify": "^1.6.4", - "optimist": "^0.6.1", - "resolve": "^1.4.0" - }, - "bin": { - "bundle-js": "bin/bundle-js-css.js" + "fill-range": "^7.1.1" }, "engines": { - "node": ">=6.8.1" + "node": ">=8" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, "node_modules/cardboard-vr-display": { "version": "1.0.19", "license": "Apache-2.0", @@ -232,7 +391,9 @@ } }, "node_modules/clientjs/node_modules/ua-parser-js": { - "version": "0.7.32", + "version": "0.7.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.39.tgz", + "integrity": "sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==", "funding": [ { "type": "opencollective", @@ -241,9 +402,16 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, "engines": { "node": "*" } @@ -259,27 +427,18 @@ }, "node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "license": "MIT" }, - "node_modules/config-chain": { - "version": "1.1.13", - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/core-js": { - "version": "2.6.12", - "hasInstallScript": true, - "license": "MIT" - }, "node_modules/css-tree": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "license": "MIT", "dependencies": { "mdn-data": "2.0.28", @@ -292,6 +451,8 @@ }, "node_modules/csso": { "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "license": "MIT", "dependencies": { "css-tree": "~2.2.0" @@ -319,27 +480,62 @@ "version": "3.2.0", "license": "MIT" }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dom-walk": { "version": "0.1.2" }, - "node_modules/editorconfig": { - "version": "0.15.3", + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, - "bin": { - "editorconfig": "bin/editorconfig" + "engines": { + "node": ">=8.6.0" } }, - "node_modules/es5-shim": { - "version": "4.6.7", + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, "node_modules/fs-extra": { @@ -387,21 +583,16 @@ "version": "1.0.0", "license": "MIT" }, - "node_modules/glob": { - "version": "8.0.3", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 6" } }, "node_modules/global": { @@ -425,6 +616,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/good-listener": { "version": "1.2.2", "license": "MIT", @@ -436,6 +647,21 @@ "version": "4.2.10", "license": "ISC" }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/has": { "version": "1.0.3", "license": "MIT", @@ -466,6 +692,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/individual": { "version": "2.0.0" }, @@ -481,40 +716,38 @@ "version": "2.0.4", "license": "ISC" }, - "node_modules/ini": { - "version": "1.3.8", - "license": "ISC" - }, - "node_modules/is-core-module": { - "version": "2.11.0", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-function": { "version": "1.0.2", "license": "MIT" }, - "node_modules/js-beautify": { - "version": "1.14.7", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { - "config-chain": "^1.1.13", - "editorconfig": "^0.15.3", - "glob": "^8.0.3", - "nopt": "^6.0.0" - }, - "bin": { - "css-beautify": "js/bin/css-beautify.js", - "html-beautify": "js/bin/html-beautify.js", - "js-beautify": "js/bin/js-beautify.js" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" } }, "node_modules/js-tokens": { @@ -562,14 +795,6 @@ "loose-envify": "cli.js" } }, - "node_modules/lru-cache": { - "version": "4.1.5", - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "node_modules/m3u8-parser": { "version": "4.8.0", "license": "Apache-2.0", @@ -599,28 +824,50 @@ }, "node_modules/mdn-data": { "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", "license": "CC0-1.0" }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/min-document": { "version": "2.19.0", "dependencies": { "dom-walk": "^0.1.0" } }, - "node_modules/minimatch": { - "version": "5.1.0", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" } }, - "node_modules/minimist": { - "version": "0.0.10", - "license": "MIT" - }, "node_modules/mpd-parser": { "version": "0.22.0", "license": "Apache-2.0", @@ -675,19 +922,6 @@ "thenify-all": "^1.0.0" } }, - "node_modules/nopt": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/nosleep.js": { "version": "0.7.0", "license": "MIT" @@ -713,18 +947,6 @@ "wrappy": "1" } }, - "node_modules/optimist": { - "version": "0.6.1", - "license": "MIT/X11", - "dependencies": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "license": "MIT" - }, "node_modules/path-is-absolute": { "version": "1.0.1", "license": "MIT", @@ -732,9 +954,26 @@ "node": ">=0.10.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/pkcs7": { "version": "1.0.4", @@ -753,13 +992,25 @@ "node": ">= 0.6.0" } }, - "node_modules/proto-list": { - "version": "1.2.4", - "license": "ISC" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "license": "ISC" + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, "node_modules/react": { "version": "18.2.0", @@ -785,22 +1036,19 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.10", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "license": "MIT" }, - "node_modules/resolve": { - "version": "1.22.1", + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, "node_modules/rimraf": { @@ -849,6 +1097,29 @@ "node": "*" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rust-result": { "version": "1.0.0", "license": "MIT", @@ -874,32 +1145,59 @@ "version": "1.1.2", "license": "MIT" }, - "node_modules/semver": { - "version": "5.7.1", - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/sigmund": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/source-map-js": { - "version": "1.0.2", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, "node_modules/thenify": { @@ -927,12 +1225,22 @@ "version": "2.1.0", "license": "MIT" }, - "node_modules/tsml": { - "version": "1.0.1", - "license": "MIT" + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } }, "node_modules/ua-parser-js": { - "version": "1.0.32", + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", + "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", "funding": [ { "type": "opencollective", @@ -941,9 +1249,16 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, "engines": { "node": "*" } @@ -1100,13 +1415,6 @@ "version": "0.2.28", "license": "Apache-2.0" }, - "node_modules/videojs-ie8": { - "version": "1.1.2", - "license": "Apache 2.0", - "dependencies": { - "es5-shim": "^4.5.1" - } - }, "node_modules/videojs-playlist-ui": { "version": "4.1.0", "license": "Apache-2.0", @@ -1115,70 +1423,6 @@ "video.js": "^6 || ^7" } }, - "node_modules/videojs-replay": { - "version": "1.1.0", - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "video.js": "^5.6.0" - } - }, - "node_modules/videojs-replay/node_modules/global": { - "version": "4.3.0", - "dependencies": { - "min-document": "^2.6.1", - "process": "~0.5.1" - } - }, - "node_modules/videojs-replay/node_modules/process": { - "version": "0.5.2", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/videojs-replay/node_modules/video.js": { - "version": "5.20.5", - "license": "Apache-2.0", - "dependencies": { - "babel-runtime": "^6.9.2", - "global": "4.3.0", - "safe-json-parse": "4.0.0", - "tsml": "1.0.1", - "videojs-font": "2.0.0", - "videojs-ie8": "1.1.2", - "videojs-swf": "5.4.1", - "videojs-vtt.js": "0.12.6", - "xhr": "2.2.2" - } - }, - "node_modules/videojs-replay/node_modules/videojs-font": { - "version": "2.0.0", - "license": "Apache-2.0" - }, - "node_modules/videojs-replay/node_modules/videojs-swf": { - "version": "5.4.1" - }, - "node_modules/videojs-replay/node_modules/videojs-vtt.js": { - "version": "0.12.6", - "license": "Apache-2.0", - "dependencies": { - "global": "^4.3.1" - } - }, - "node_modules/videojs-replay/node_modules/videojs-vtt.js/node_modules/global": { - "version": "4.4.0", - "license": "MIT", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/videojs-replay/node_modules/videojs-vtt.js/node_modules/process": { - "version": "0.11.10", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/videojs-share": { "version": "3.2.1", "license": "MIT", @@ -1216,64 +1460,10 @@ "global": "^4.3.1" } }, - "node_modules/videojs-watermark": { - "version": "2.0.0", - "license": "Apache-2.0", - "dependencies": { - "video.js": "^6.2.0" - } - }, - "node_modules/videojs-watermark/node_modules/global": { - "version": "4.3.2", - "license": "MIT", - "dependencies": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "node_modules/videojs-watermark/node_modules/process": { - "version": "0.5.2", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/videojs-watermark/node_modules/video.js": { - "version": "6.13.0", - "license": "Apache-2.0", - "dependencies": { - "babel-runtime": "^6.9.2", - "global": "4.3.2", - "safe-json-parse": "4.0.0", - "tsml": "1.0.1", - "videojs-font": "2.1.0", - "videojs-ie8": "1.1.2", - "videojs-vtt.js": "0.12.6", - "xhr": "2.4.0" - } - }, - "node_modules/videojs-watermark/node_modules/videojs-font": { - "version": "2.1.0", - "license": "Apache-2.0" - }, - "node_modules/videojs-watermark/node_modules/videojs-vtt.js": { - "version": "0.12.6", - "license": "Apache-2.0", - "dependencies": { - "global": "^4.3.1" - } - }, - "node_modules/videojs-watermark/node_modules/xhr": { - "version": "2.4.0", - "license": "MIT", - "dependencies": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, "node_modules/videojs-youtube": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/videojs-youtube/-/videojs-youtube-2.6.1.tgz", + "integrity": "sha512-qvwrkgXixbX8xzdkBa7o5r9KUITRISAy4bbyrpBgub3m0mhwz6WLXDIwJZ6/w4Z/JijWjLQqlg8W1jYhCEgHZw==", "license": "MIT", "dependencies": { "video.js": "^5.6.0 || ^6.2.8 || ^7.0.2" @@ -1293,58 +1483,18 @@ "version": "1.0.18", "license": "Apache-2.0" }, - "node_modules/wordwrap": { - "version": "0.0.3", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/wrappy": { "version": "1.0.2", "license": "ISC" - }, - "node_modules/xhr": { - "version": "2.2.2", - "license": "MIT", - "dependencies": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr/node_modules/global": { - "version": "4.3.2", - "license": "MIT", - "dependencies": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "node_modules/xhr/node_modules/process": { - "version": "0.5.2", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "2.1.2", - "license": "ISC" } }, "dependencies": { "@babel/runtime": { - "version": "7.20.1", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", "requires": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.14.0" } }, "@filmgardi/videojs-collect-data": { @@ -1356,6 +1506,118 @@ "video.js": "^6 || ^7" } }, + "@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@node-minify/core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@node-minify/core/-/core-6.4.0.tgz", + "integrity": "sha512-tgfV6r+/4EBr+IvasZsOhlKMLZ5oLJtapUzEtiiTTokRQKFNCOnI/UXFbkXNsFq4wW7USVWjxiNScA+eBd5e1g==", + "requires": { + "@node-minify/utils": "^6.4.0", + "globby": "11.0.4", + "mkdirp": "1.0.4" + } + }, + "@node-minify/csso": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@node-minify/csso/-/csso-8.0.6.tgz", + "integrity": "sha512-6S6HW6rMGyB7APmVKaGfnONc60YdIe23VpAs7xI6M2oi2zxNoOXtZQvqV9Lx9tjVU1wN1Y5kGCoarfdMtCJ/DA==", + "requires": { + "@node-minify/utils": "8.0.6", + "csso": "5.0.5" + }, + "dependencies": { + "@node-minify/utils": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@node-minify/utils/-/utils-8.0.6.tgz", + "integrity": "sha512-csY4qcR7jUwiZmkreNTJhcypQfts2aY2CK+a+rXgXUImZiZiySh0FvwHjRnlqWKvg+y6ae9lHFzDRjBTmqlTIQ==", + "requires": { + "gzip-size": "6.0.0" + } + } + } + }, + "@node-minify/terser": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@node-minify/terser/-/terser-6.4.0.tgz", + "integrity": "sha512-62dCsMFkJ8JnCFiLkItjTVKrSoI8pJe58bQfjBapXCJe68acf8skbfmkVmyIZyLBJS52ef2yyGBusyilzy2jfA==", + "requires": { + "@node-minify/utils": "^6.4.0", + "terser": "5.14.2" + } + }, + "@node-minify/utils": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@node-minify/utils/-/utils-6.4.0.tgz", + "integrity": "sha512-mx6oZCmAdibRWuBhJV3Fx6jXwgCY2bCasVb7sXh06H28jqAd9BDcufLEoBoAXPuNrfz0t/wptoKbjmXuE8YXdg==", + "requires": { + "gzip-size": "6.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@video-js-plugins/videojs-ads-markers": { "version": "1.0.0", "requires": {} @@ -1417,8 +1679,10 @@ "videojs-contrib-ads": "^6.6.1" } }, - "abbrev": { - "version": "1.1.1" + "acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==" }, "aes-decrypter": { "version": "3.1.3", @@ -1442,35 +1706,26 @@ "any-promise": { "version": "1.3.0" }, - "babel-runtime": { - "version": "6.26.0", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1" - } - } + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, "balanced-match": { "version": "1.0.2" }, - "brace-expansion": { - "version": "2.0.1", + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "requires": { - "balanced-match": "^1.0.0" + "fill-range": "^7.1.1" } }, - "bundle-js-css": { - "version": "1.0.0", - "requires": { - "csso": "^5.0.5", - "js-beautify": "^1.6.4", - "optimist": "^0.6.1", - "resolve": "^1.4.0" - } + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "cardboard-vr-display": { "version": "1.0.19", @@ -1490,7 +1745,9 @@ }, "dependencies": { "ua-parser-js": { - "version": "0.7.32" + "version": "0.7.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.39.tgz", + "integrity": "sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==" } } }, @@ -1503,23 +1760,17 @@ } }, "commander": { - "version": "2.20.3" + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "concat-map": { "version": "0.0.1" }, - "config-chain": { - "version": "1.1.13", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "core-js": { - "version": "2.6.12" - }, "css-tree": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "requires": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" @@ -1527,6 +1778,8 @@ }, "csso": { "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "requires": { "css-tree": "~2.2.0" } @@ -1541,20 +1794,49 @@ "delegate": { "version": "3.2.0" }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, "dom-walk": { "version": "0.1.2" }, - "editorconfig": { - "version": "0.15.3", + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "requires": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" } }, - "es5-shim": { - "version": "4.6.7" + "fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "requires": { + "to-regex-range": "^5.0.1" + } }, "fs-extra": { "version": "0.26.7", @@ -1592,14 +1874,12 @@ "gl-preserve-state": { "version": "1.0.0" }, - "glob": { - "version": "8.0.3", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "is-glob": "^4.0.1" } }, "global": { @@ -1615,6 +1895,19 @@ "define-properties": "^1.1.3" } }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, "good-listener": { "version": "1.2.2", "requires": { @@ -1624,6 +1917,14 @@ "graceful-fs": { "version": "4.2.10" }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "requires": { + "duplexer": "^0.1.2" + } + }, "has": { "version": "1.0.3", "requires": { @@ -1639,6 +1940,11 @@ "has-symbols": { "version": "1.0.3" }, + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" + }, "individual": { "version": "2.0.0" }, @@ -1652,27 +1958,27 @@ "inherits": { "version": "2.0.4" }, - "ini": { - "version": "1.3.8" - }, - "is-core-module": { - "version": "2.11.0", - "requires": { - "has": "^1.0.3" - } + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-function": { "version": "1.0.2" }, - "js-beautify": { - "version": "1.14.7", + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { - "config-chain": "^1.1.13", - "editorconfig": "^0.15.3", - "glob": "^8.0.3", - "nopt": "^6.0.0" + "is-extglob": "^2.1.1" } }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, "js-tokens": { "version": "4.0.0", "peer": true @@ -1706,13 +2012,6 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lru-cache": { - "version": "4.1.5", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "m3u8-parser": { "version": "4.8.0", "requires": { @@ -1735,7 +2034,23 @@ "version": "3.0.5" }, "mdn-data": { - "version": "2.0.28" + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } }, "min-document": { "version": "2.19.0", @@ -1743,14 +2058,10 @@ "dom-walk": "^0.1.0" } }, - "minimatch": { - "version": "5.1.0", - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minimist": { - "version": "0.0.10" + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "mpd-parser": { "version": "0.22.0", @@ -1789,12 +2100,6 @@ "thenify-all": "^1.0.0" } }, - "nopt": { - "version": "6.0.0", - "requires": { - "abbrev": "^1.0.0" - } - }, "nosleep.js": { "version": "0.7.0" }, @@ -1810,21 +2115,18 @@ "wrappy": "1" } }, - "optimist": { - "version": "0.6.1", - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "parse-headers": { - "version": "2.0.5" - }, "path-is-absolute": { "version": "1.0.1" }, - "path-parse": { - "version": "1.0.7" + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pkcs7": { "version": "1.0.4", @@ -1835,11 +2137,10 @@ "process": { "version": "0.11.10" }, - "proto-list": { - "version": "1.2.4" - }, - "pseudomap": { - "version": "1.0.2" + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "react": { "version": "18.2.0", @@ -1857,15 +2158,14 @@ } }, "regenerator-runtime": { - "version": "0.13.10" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "resolve": { - "version": "1.22.1", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } + "reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==" }, "rimraf": { "version": "2.7.1", @@ -1899,6 +2199,14 @@ } } }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, "rust-result": { "version": "1.0.0", "requires": { @@ -1921,17 +2229,40 @@ "select": { "version": "1.1.2" }, - "semver": { - "version": "5.7.1" + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, - "sigmund": { - "version": "1.0.1" + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { - "version": "1.0.2" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0" + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } }, "thenify": { "version": "3.3.1", @@ -1951,11 +2282,18 @@ "tiny-emitter": { "version": "2.1.0" }, - "tsml": { - "version": "1.0.1" + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } }, "ua-parser-js": { - "version": "1.0.32" + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", + "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==" }, "url-toolkit": { "version": "2.2.5" @@ -2072,12 +2410,6 @@ "videojs-hotkeys": { "version": "0.2.28" }, - "videojs-ie8": { - "version": "1.1.2", - "requires": { - "es5-shim": "^4.5.1" - } - }, "videojs-playlist-ui": { "version": "4.1.0", "requires": { @@ -2085,62 +2417,6 @@ "video.js": "^6 || ^7" } }, - "videojs-replay": { - "version": "1.1.0", - "requires": { - "video.js": "^5.6.0" - }, - "dependencies": { - "global": { - "version": "4.3.0", - "requires": { - "min-document": "^2.6.1", - "process": "~0.5.1" - } - }, - "process": { - "version": "0.5.2" - }, - "video.js": { - "version": "5.20.5", - "requires": { - "babel-runtime": "^6.9.2", - "global": "4.3.0", - "safe-json-parse": "4.0.0", - "tsml": "1.0.1", - "videojs-font": "2.0.0", - "videojs-ie8": "1.1.2", - "videojs-swf": "5.4.1", - "videojs-vtt.js": "0.12.6", - "xhr": "2.2.2" - } - }, - "videojs-font": { - "version": "2.0.0" - }, - "videojs-swf": { - "version": "5.4.1" - }, - "videojs-vtt.js": { - "version": "0.12.6", - "requires": { - "global": "^4.3.1" - }, - "dependencies": { - "global": { - "version": "4.4.0", - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "process": { - "version": "0.11.10" - } - } - } - } - }, "videojs-share": { "version": "3.2.1", "requires": { @@ -2174,57 +2450,10 @@ "global": "^4.3.1" } }, - "videojs-watermark": { - "version": "2.0.0", - "requires": { - "video.js": "^6.2.0" - }, - "dependencies": { - "global": { - "version": "4.3.2", - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "process": { - "version": "0.5.2" - }, - "video.js": { - "version": "6.13.0", - "requires": { - "babel-runtime": "^6.9.2", - "global": "4.3.2", - "safe-json-parse": "4.0.0", - "tsml": "1.0.1", - "videojs-font": "2.1.0", - "videojs-ie8": "1.1.2", - "videojs-vtt.js": "0.12.6", - "xhr": "2.4.0" - } - }, - "videojs-font": { - "version": "2.1.0" - }, - "videojs-vtt.js": { - "version": "0.12.6", - "requires": { - "global": "^4.3.1" - } - }, - "xhr": { - "version": "2.4.0", - "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - } - } - }, "videojs-youtube": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/videojs-youtube/-/videojs-youtube-2.6.1.tgz", + "integrity": "sha512-qvwrkgXixbX8xzdkBa7o5r9KUITRISAy4bbyrpBgub3m0mhwz6WLXDIwJZ6/w4Z/JijWjLQqlg8W1jYhCEgHZw==", "requires": { "video.js": "^5.6.0 || ^6.2.8 || ^7.0.2" } @@ -2238,38 +2467,8 @@ "webvr-polyfill-dpdb": { "version": "1.0.18" }, - "wordwrap": { - "version": "0.0.3" - }, "wrappy": { "version": "1.0.2" - }, - "xhr": { - "version": "2.2.2", - "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "global": { - "version": "4.3.2", - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "process": { - "version": "0.5.2" - } - } - }, - "xtend": { - "version": "4.0.2" - }, - "yallist": { - "version": "2.1.2" } } } diff --git a/package.json b/package.json index 4eae1b0..484ad59 100644 --- a/package.json +++ b/package.json @@ -2,10 +2,18 @@ "name": "videojs-plugins", "scripts": { "bundle-prod": "node bundle-prod.js", - "bundle-dev": "node bundle-dev.js" + "bundle-dev": "node bundle-dev.js" }, "dependencies": { - "bundle-js-css": "^1.0.0", + "@filmgardi/videojs-collect-data": "^2.0.2", + "@video-js-plugins/videojs-ads-markers": "^1.0.0", + "@videojs/http-streaming": "^2.15.0", + "@videojs/vhs-utils": "^4.0.0", + "@viostream/videojs-overlay": "^2.1.6-f.97-master", + "@youon/videojs-ssa": "^1.1.1", + "@node-minify/core": "^6.2.0", + "@node-minify/csso": "^8.0.6", + "@node-minify/terser": "^6.2.0", "video.js": "^7.20.3", "videojs-contrib-ads": "^6.9.0", "videojs-contrib-eme": "^5.0.1", @@ -14,18 +22,9 @@ "videojs-hls-quality-selector": "^1.1.4", "videojs-hotkeys": "^0.2.28", "videojs-playlist-ui": "^4.1.0", - "videojs-replay": "^1.1.0", "videojs-share": "^3.2.1", - "videojs-vr": "^1.10.1", - "videojs-watermark": "^2.0.0", - "@video-js-plugins/videojs-ads-markers": "^1.0.0", - "@youon/videojs-ssa": "^1.1.1", - "videojs-contrib-ads": "^6.9.0", "videojs-vjsdownload": "^1.0.4", - "videojs-youtube": "^2.6.1", - "@filmgardi/videojs-collect-data": "^2.0.2", - "@videojs/http-streaming": "^2.15.0", - "@videojs/vhs-utils": "^4.0.0", - "@viostream/videojs-overlay": "^2.1.6-f.97-master" + "videojs-vr": "^1.10.1", + "videojs-youtube": "^2.6.1" } } \ No newline at end of file diff --git a/player-init-plugin-v2.js b/player-init-plugin-v2.js deleted file mode 100644 index bf97f47..0000000 --- a/player-init-plugin-v2.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * This script is an init script designed for hooverhigh - * HooverHighVideoPlayer 1 - * Copyright oxmc. - */ - -window.addEventListener('HVJS-Load', async (event) => { - console.log('HVJS-Load event recived, Adding player script'); - console.log("Player-init.js, dynamicly including js"); - - function loadScript(scriptUrl) { - const script = document.createElement('script'); - script.src = scriptUrl; - document.body.appendChild(script); - - return new Promise((res, rej) => { - script.onload = function() { - res(); - } - script.onerror = function() { - rej(); - } - }); - } - - //Run player.js: - await loadScript('https://hooverhigh.ml/videojs-plugins/player.js').then(() => { - console.log('Script loaded!'); - }).catch(() => { - console.error('Player-init-plugin Script loading failed!'); - }); - - console.log("End Player-init-plugin.js"); -}); \ No newline at end of file diff --git a/player-init-plugin.js b/player-init-plugin.js deleted file mode 100644 index eeccefd..0000000 --- a/player-init-plugin.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * This script is an init script designed for hooverhigh - * HooverHighVideoPlayer 1 - * Copyright oxmc. - */ - -window.addEventListener('DOMContentLoaded', async (event) => { - console.log('DOM fully loaded and parsed, Adding player script'); - console.log("Player-init.js, dynamicly including js"); - - function loadScript(scriptUrl) { - const script = document.createElement('script'); - script.src = scriptUrl; - document.body.appendChild(script); - - return new Promise((res, rej) => { - script.onload = function() { - res(); - } - script.onerror = function() { - rej(); - } - }); - } - - //Run player.js: - await loadScript('https://hooverhigh.ml/videojs-plugins/player.js').then(() => { - console.log('Script loaded!'); - }).catch(() => { - console.error('Player-init-plugin Script loading failed!'); - }); - - console.log("End Player-init-plugin.js"); -}); \ No newline at end of file diff --git a/player-init.js b/player-init.js index ca51d60..4f852d1 100644 --- a/player-init.js +++ b/player-init.js @@ -1,39 +1,40 @@ /** - * This script is an init script designed for hooverhigh - * HooverHighVideoPlayer 2 - * Copyright oxmc. + * This script is an init script designed to load ajs or vjs if the specific elements exist + * Copyright oxmc. */ -window.addEventListener('HVJS-Load', async (event) => { +window.addEventListener('DOMContentLoaded', async (event) => { console.log('DOM fully loaded and parsed, Adding player scripts and styles'); - console.log("Player-init.js, dynamicly including css and js"); + console.log("Player-init.js, dynamically including CSS and JS"); + // Load script dynamically function loadScript(scriptUrl) { const script = document.createElement('script'); script.src = scriptUrl; document.body.appendChild(script); return new Promise((res, rej) => { - script.onload = function() { - res(); - } - script.onerror = function() { - rej(); - } + script.onload = res; + script.onerror = rej; }); } - function removefile(filename, filetype) { - var targetelement = (filetype == "js") ? "script" : (filetype == "css") ? "link" : "none"; - var targetattr = (filetype == "js") ? "src" : (filetype == "css") ? "href" : "none"; - var allsuspects = document.getElementsByTagName(targetelement); - for (var i = allsuspects.length; i >= 0; i--) { - if (allsuspects[i] && allsuspects[i].getAttribute(targetattr) != null && allsuspects[i].getAttribute(targetattr).indexOf(filename) != -1) - allsuspects[i].parentNode.removeChild(allsuspects[i]); - console.log(`Removed: ${filename}`); + // Remove specified file from DOM (JS/CSS) + function removeFile(filename, filetype) { + const targetElement = filetype === "js" ? "script" : filetype === "css" ? "link" : null; + const targetAttr = filetype === "js" ? "src" : filetype === "css" ? "href" : null; + if (!targetElement || !targetAttr) return; + + const allElements = document.getElementsByTagName(targetElement); + for (let i = allElements.length - 1; i >= 0; i--) { + if (allElements[i] && allElements[i].getAttribute(targetAttr)?.includes(filename)) { + allElements[i].parentNode.removeChild(allElements[i]); + console.log(`Removed: ${filename}`); + } } } + // Remove elements by class name function removeElementsByClass(className) { const elements = document.getElementsByClassName(className); while (elements.length > 0) { @@ -41,46 +42,74 @@ window.addEventListener('HVJS-Load', async (event) => { } } - //List of scripts and css to load for video.js - const include_List = { - "css": [ - "https://vjs.zencdn.net/7.20.3/video-js.css", - "https://hooverhigh.ml/videojs-plugins/css/videojs-bundle.min.css" - ], - "js": [ - "https://hooverhigh.ml/videojs-plugins/ad.js", - "https://hooverhigh.ml/videojs-plugins/hooverhigh-videojs-player.min.js" - ] + // List of CSS and JS to load + const includeList = { + vjs: { + css: [ + "bundle/vjs-player-bundle.min.css" + ], + js: [ + "bundle/vjs-player-bundle.min.js", + ] + }, + ajs: { + css: [ + "assets/lib/ajs/audiojs-playertheme.css" + ], + js: [ + "assets/lib/ajs/audio.min.js", + "assets/lib/ajs/player.js" + ] + } }; - //Add CSS: - console.log("Adding CSS"); - include_List.css.forEach(async function(url) { - //console.log(url); - $("", { - rel: "stylesheet", - type: "text/css", - href: url - }).appendTo("head"); - }); + // Load Video.js if there are video elements + const videoPlayers = document.querySelectorAll("video"); + if (videoPlayers.length > 0) { + console.log("Adding VJS CSS"); + // Add VJS CSS + for (const url of includeList.vjs.css) { + const link = document.createElement('link'); + link.rel = "stylesheet"; + link.type = "text/css"; + link.href = url; + document.head.appendChild(link); + } - //Add JS: - console.log("Adding JS"); - include_List.js.forEach(async function(url) { - //console.log(url); - //$.getScript(url); - $("